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