2012-03-02 24 views
2

VideoWriterを使用して一連のプロットからビデオを作ります。それはほとんどOK(this SO answerの次のアドバイスの後)です。しかし、Matlabはアニメーションが完了した後、3000フレームすべてを順番に表示しようとしているので、ウィンドウマネージャがフリークアウトしてコンピュータがフリーズすることがあります。ビデオフレームをファイルに直接書き込んで、画面レンダリングをバイパスします。

スクリーンレンダリングをバイパスしてビデオフレームを直接ディスクに書き込む方法はありますか? writeVideo(vid, getframe(f))getframeは必ず図を見えるようにします。それを避ける方法はありますか?

+1

im2frameを使用しないでください。 From http://www.mathworks.com/help/techdoc/ref/getframe.html: "注意モニタ上に現在表示されていない仮想デスクトップ上でMATLABソフトウェアが実行されている状況では、getframeの呼び出しは完了しますが隠されたデスクトップ上の図または軸が占める位置に対応するモニタ上の領域をキャプチャするので、現在アクティブなデスクトップにgetframeによってキャプチャされるウィンドウが存在することを確認してください。これは、かなり設定された振る舞いのようです。 – tmpearce

+0

私の経験は同じです。私はこの機能を可能にする文書化されていない機能も歓迎します。 – macduff

答えて

2

フレームが3000枚の場合は、画像として保存し、ffmpegなどの画像を使用して画像を作成できます。 PNGなどの画像にはロスレスフォーマットを使用することを忘れないでください。

0

avifileとaddframeを使用すると、ビデオを作成して画面に表示しないようにできます。これは物事をやっているより遅い方法だと思われる。ここで

が呼ばポストに基づく例です。もちろん

mov = avifile('myPeaks2.avi','fps',15); 
set(gcf, 'visible', 'off') 

for k=1:20 
    surf(sin(2*pi*k/20)*Z,Z); 
    mov = addframe(mov, gcf); 
end 
mov = close(mov); 

、この方法は推奨されませんので、最終的にあなたはそれを使用することはできません。

+0

このメソッドは非推奨であるため、時間を犠牲にしないことを望むようなことを行うための好ましい方法は何ですか? – hyiltiz

1

は、フレームを取得し使用しますが、それはいいだろうけれども残念ながら、私は、そうは思わない代わりに

writerObj = VideoWriter('awesomeMovie.mp4', 'MPEG-4'); 
open(writerObj); 
masterFrame = rand(10,10,3); 
f = im2frame(masterFrame); 
writeVideo(writerObj,f); 
関連する問題