这是阅读视频的帮助教程:
xyloObj = VideoReader('xylophone.mpg');
nFrames = xyloObj.NumberOfFrames;
vidHeight = xyloObj.Height;
vidWidth = xyloObj.Width;
% Preallocate movie structure.
mov(1:nFrames) = ...
struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),...
'colormap', []);
% Read one frame at a time.
for k = 1 : nFrames
mov(k).cdata = read(xyloObj, k);
end
% Play back the movie once at the video's frame rate.
movie(mov, 1, xyloObj.FrameRate);
但是我正在尝试处理一个巨大的视频,如果我尝试上面的代码,我的电脑就会耗尽内存。我已经考虑过读取一些帧,处理它们,读取更多帧,处理,直到所有帧都被处理完毕(当然,在代码进行时删除旧帧,以保留低级别的内存消耗),但是我我不确定这是最好的方法,因为我从未使用MATLAB处理视频。
这种情况有最好的做法吗?我错过了什么吗?
谢谢!
答案 0 :(得分:2)
处理视频的最有效内存的方法是一次加载,处理和写入一个帧。那么你在内存中只有一帧。
但是,就磁盘IO而言,这可能效率很低。任何类型的大文件的一个好方法是以块的形式处理。在这种情况下,您将一次读取,处理和写入N帧。您需要选择N以在系统上使用适当的内存量。一般来说,在你达到内存限制之前,更大的N会更快。