【问题标题】:How to save a file to y4m out of Matlab?如何将文件保存到 Matlab 之外的 y4m?
【发布时间】:2011-01-17 03:42:03
【问题描述】:

所以,我有一个 Matlab 电影格式的电影(实际上,只有几个 RGB 帧),我想将它保存为 y4m 文件。 (与 x.264 一起使用)。我已经获得了在开始时编写帧标题所需的所有信息,并且我有将 RGB 帧转换为 YUV 的函数,但是任何时候我尝试将其保存出来,它是横向的并且跟踪已关闭.我也在尝试将其转换为 C420。这是我目前的功能:

function saveMovToY4m(mov, fileName, f, width, height, fpsNum, fpsDen, inter, ascNum, ascDen)

fileId = fopen(fileName, 'w');
fprintf(fileId, 'YUV4MPEG2 W%d H%d F%d:%d I%c A%d:%d C420jpeg\n', width, height, fpsNum, fpsDen, inter, ascNum, ascDen);
for frame = 1:f-1
    frame
    imgRgb = frame2im(mov(frame));
    imgYuv = (convertRgbToYuv(imgRgb, width, height));
    fprintf(fileId,'FRAME\n');
    % Print Y component
    buf = reshape(imgYuv(:,:,1),width*height,1);
    buf = buf;
    fwrite(fileId, buf, 'uint8');

    % Print U component
    Cb = reshape(imgYuv(:,:,2),width*height,1);
    CBdown = downsample(Cb, 4);
    fwrite(fileId, CBdown, 'uint8');   

    % Print V component
    Cbr = reshape(imgYuv(:,:,3),width*height,1);
    CBrDown = downsample(Cbr, 4);
    fwrite(fileId, CBrDown, 'uint8');
end
fclose(fileId);
end

【问题讨论】:

    标签: matlab video


    【解决方案1】:

    对于“横向”(我假设您的意思是旋转),您只需要旋转数组(将列与行交换)。对于跟踪,如果它偏离固定量,它似乎与您的重塑有关(尝试 (width - 1)*height 并查看它的作用并从那里开始)

    【讨论】:

    • 改变整形会引发错误,因为它说它不能改变元素的数量。
    • 旋转 Y 分量使其非常接近正确。只是出现了颜色错误。
    • 其实现在已经镜像了。 (而且大多是黑白的。)
    • 也许张贴之前和之后的图片?在旋转时,您必须以一种特殊的方式进行,这样您就不会旋转颜色信息。跟踪是数组/向量的奇怪之处。我会玩弄它以弄清楚发生了什么。
    • 我现在方向正确,但颜色仍然不对。黑白相间,还夹杂着一点紫色。我认为这只是我从 RGB 转换为 YUV 的问题,现在。我会玩弄那个。
    猜你喜欢
    • 2012-06-27
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2014-02-18
    相关资源
    最近更新 更多