如何从yuv 420视频中提取帧?假设我想将它们存储为静止图像。怎么样?
答案 0 :(得分:1)
以下是来自MathWorks File Exchange的提交内容,应提供您想要的内容:
上面提交的函数loadFileYuv
将加载YUV文件并返回一组电影帧。每个电影帧都是具有以下字段的结构:
cdata
:uint8
值的矩阵。尺寸是按宽度乘以3。colormap
:N-by-3双打矩阵。它在真彩色系统上是空的。因此,您可以从数组中的每个电影帧中提取cdata
字段,并将其保存/用作RGB图像。
您的代码可能如下所示:
nFrames = 115; %# The number of frames
vidHeight = 352; %# The image height
vidWidth = 240; %# The image width
mov = loadFileYuv('myVideo.yuv',vidHeight,vidWidth,1:nFrames); %# Read the file
for k = 1:nFrames %# Loop over the movie frames
imwrite(mov(k).cdata,['myImage' int2str(k) '.bmp']); %# Save each frame to
%# a bitmap image file
end
答案 1 :(得分:0)
ffmpeg -i input.yuv -r 1 -f image2 images%05d.png
-r 1表示rate =每帧
答案 2 :(得分:0)
您可以使用以下代码:
vidObj1 = mmreader('testballroom_0.avi'); %# Create a video file object
nFrames = vidObj1.NumberOfFrames; %# Get the number of frames
vidHeight1 = vidObj1.Height; %# Get the image height
vidWidth1 = vidObj1.Width; %# Get the image width
%# Preallocate the structure array of movie frames:
mov1(1:nFrames) = struct('cdata',zeros(vidHeight1,vidWidth1,3,'uint8'),...
'colormap',[]); %# Note that colormap is empty!
您可以从矩阵mov1:)
访问每个帧