2009-03-24 17 views
4

私はPythonからgstreamer 0.10を使用して、v4l2ビデオソースを同時に表示し、それをxvid-in-aviに記録しようとしています。長い間、コンピュータはこれを実行するのに十分速くなりますが、別のプログラムがディスクを使用するとフレームをドロップします。それは十分に悪いですが、再生時に、フレームレートの低いフレームでエンコードできるフレームを表示するのではなく、フレームがドロップされたビデオに動きのバーストがあります。フレームを落とさずにgstreamerでライブビデオを録画する方法はありますか?

パイプラインはv4l2src ! capsfilter ! tee ! queue ! xvidenc ! avimux ! filesinkで、ティーもqueue ! xvimagesink sync=falseにシンクします。私はxvidencの前にvideorateを追加しようとしましたが、それは事態を悪化させるようです。

私はこのパイプラインで非圧縮ビデオをディスクにスプールし、バックグラウンドスレッドでエンコードすることを検討しました。この問題を解決するために他に何ができますか? xvidencまたはavimuxは、落としたフレームで間違ったことをしていますか?エンコーダに先行するキューのサイズを大幅に増やすことはできますか?

答えて

5

teeはいずれかの出力ブロックがブロックされるため、おそらくボトルネックになります。私は、ディスクにエンコードするのに時間がかかり、そこからエンコードするストリームを書くことを提案します。

+0

どうでしょう、あなたのチャンクに出力され、各チャンクは、すぐにそれがトランスコードされているように削除することができますか? – joeforker

+1

モーションJPEGに切り替わりました。圧縮はひどいですが、CPUに過大な負荷をかけません。 – joeforker

1

、あなたがxvimagesinkを記述する必要が、xvimagesyncない

+0

シンプルなスペルエラー – joeforker

関連する問題