2013-05-02 36 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將會更快,直到達到內存限制。

相關問題