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

ビデオを処理する最もメモリ効率の良い方法は、一度に 1 つのフレームを読み込み、処理し、書き込むことです。その場合、メモリには 1 つのフレームしかありません。

ただし、これはおそらくディスク IO に関してはかなり非効率的です。どのタイプの大きなファイルでも、チャンクで処理することをお勧めします。この場合、一度に N フレームを読み取り、処理し、書き込みます。システムで適切な量のメモリを使用するには、N を選択する必要があります。一般的に言えば、メモリ制限に達するまでは、N が大きいほど高速になります。

于 2013-05-02T19:48:48.277 に答える