【问题标题】:What's the most memory-efficient way of processing a video on MATLAB?在 MATLAB 上处理视频最节省内存的方法是什么?
【发布时间】:2013-05-02 19:40:02
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

标签: matlab video video-processing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多