1

这是阅读视频的帮助教程:

    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 处理过视频。

这种情况有最佳实践吗?我错过了什么?

谢谢!

4

1 回答 1

2

处理视频最节省内存的方法是一次加载、处理和写入单个帧。那么你在内存中只有一帧。

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

于 2013-05-02T19:48:48.277 回答