2013-05-02 52 views
1

这是用于读取视频的帮助教程:什么是在MATLAB上处理视频的最有效的内存方式?

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

类似的问题:[如何在Matlab中用for循环处理大视频并且没有内存错误](http://stackoverflow.com/q/11718704/97160) – Amro 2013-05-02 22:37:08

回答

2

处理视频的最有效处理内存的方法是一次加载,处理和写入单个帧。那么你只有一个内存框架。

但是,这在磁盘IO方面可能相当低效。对于任何类型的大文件来说,一个很好的技术就是以块处理。在这种情况下,您将一次读取,处理和写入N帧。您需要选择N以在您的系统上使用适量的内存。一般来说,一个更大的N将会更快,直到达到内存限制。

相关问题