如何从Matlab中将文件保存到y4m?

时间:2011-01-16 19:32:33

标签: matlab video

所以,我有一个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

1 个答案:

答案 0 :(得分:1)

对于“侧面”(我假设你的意思是旋转)你只需要旋转你的数组(用行交换列)。对于跟踪,如果它是一个固定的数量,它似乎与你的重塑有关(尝试(宽度 - 1)*高度,看看它做了什么,并从那里去)