3

私は、FFmpeg の X11grab モジュールを使用してスクリーンキャストの記録を実験してきましたが、これまでのところ多かれ少なかれうまく機能しています。A/V エンコーディングは細かい点が多い複雑なプロセスであることは理解していますが、学ぶために最善を尽くしています。

ストリームの記録中にシステムにできるだけ負担をかけないように、ビデオ ストリームを「軽量」に記録したいと考えています。pacat と sox を使用して、2 つのオーディオ ストリームを別々に録音します。その後、全体がフィルター処理、正規化、エンコードされ、Matroska コンテナーに結合されます。

現在、x264 の yuv4 demuxer に供給される rawvideo ストリームを ffmpeg で記録しています。以前、ffv1 とストレート x264 レコーディングを試しました。私のシステムは、最終ストリームに必要な設定で x264 を使用したリアルタイム エンコーディングを処理できないため、記録が完了したら個別に再圧縮する必要があります。ffv1 ではひどいフレーム ドロップが発生し、yuv4 でも発生することがわかりましたが、それほどではありません。これは、記録されたデータを保持するためだけに使用されている SATA3 Caviar Black に座っている場合でも、ハード ドライブの速度が原因であると思われます。

問題は、どのビデオ コーデックの組み合わせを見ればよいかということです。x264 で直接記録し、後で「より良い」x264 に再圧縮しますか? 生のビデオを圧縮しますか? 発生しているフレーム ドロップなどの問題を特定するにはどうすればよいですか?

編集:これは私が現在使用しているffmpeg行です。

ffmpeg -v warning -f x11grab -s 1920x1080 -r 30000/1001 -i :0.0\
-vcodec rawvideo -pix_fmt yuv420p -s 1280x720\
-threads 0\
recvideo.y4m
4

1 に答える 1

3

http://en.wikipedia.org/wiki/Huffyuvを試しましたか?

問題がCPUまたはディスク帯域幅のどちらであるかを確実に知っていますか?ディスクに書き込もうとしているデータレートはどれくらいですか?ffmpegはビットレートと設定でコーデックにどのくらいのCP​​Uを必要としますか?コンピューターがアイドル状態になっていることを記録していないと思います。記録のためにどれだけのリソースが残っていますか?

ディスク書き込みパフォーマンスをテストするには、100MBを割り当て、そこから100MBを読み取り/dev/urandom、ディスクがアイドル状態のときにそのディスク上のファイルにバッファを書き込みます。書き込みにかかる時間を測定します(urandomからの読み取りには時間がかかります)。Linuxにはライトバックがあります。つまり、書き込み直後ではなく、5秒ごとにダーティページをディスクにフラッシュします。fdatasync(またはフル)を使用fsyncすると、データがディスクに保存されるまでリアルタイムで表示されます。

ffmpegのCPU使用率が表示されないのはなぜですか?表示されているターミナルウィンドウの1分を記録してみtopませんか?そうでない場合は、perf record -a sleep 60ターミナルで、あなたがしていることに切り替えて、1分を録音してからどうperf reportですか?

編集:私は使用avconv -v warning -f x11grab -s 1680x1050 -r 30000/1001 -i :0.0 -vcodec ffvhuff -s 1280x720 -threads 0 capture.mkvしました、そしてそれはRGBで記録するのに素晴らしい働きをしました。その後、オフラインでYUVのH.264にトランスコードしたり、最高品質のデュアルパスなどを使用したりできます。約24MB /秒でしたが、シングルスレッドのようです。私のCore2@2.3Ghzはそれで問題ありません。

于 2012-04-15T23:26:50.427 に答える