2012-04-15 11 views
3

私はFFmpegのX11grabモジュールを使ってスクリーンキャストを録画することを実験してきました。私は、/ vエンコーディングは多くの細かい細部まで複雑なプロセスであると理解していますが、私は学ぶために最善を尽くしています。FFmpegスクリーンキャスト録画:どのコーデックを使用するのですか?

ビデオストリームの記録を「軽量」にしたいと思っています。これは、ストリームが記録されている間、システムにできるだけ負荷をかけません。私は、2つのオーディオストリームをpacatとsoxで別々に記録します。その後、すべてがフィルタリング、正規化、エンコードされ、Matroskaコンテナに結合されます。

現時点では、ffmpegにrawvideoストリームを記録してx264のyuv4 demuxerに供給させています。私は前にffv1とストレートx264の録音を実験しました。私のシステムでは、最終的なストリームに必要な設定でx264のリアルタイムエンコードを処理できないため、録画が完了したら別途再圧縮する必要があります。私はffv1が私に恐ろしいフレームの落下を与え、yuv4もあまりにも少ないことを見出しました。私はSATA3のキャビアブラックに座っていても記録されたデータを保持するために使用されていても、これはハードドライブの速度によるものだと思われます。

問題は、どのビデオコーデックをどのように見なければならないのですか? x264ですぐに録音し、後で「より良い」x264に再圧縮しますか?生の動画を圧縮してから圧縮しますか?私が経験しているフレームドロップなどの問題点を突き止めるにはどうすればいいですか?

EDIT:これは私が現在使用している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 
+0

スクリーンキャストの解像度は? –

+0

私は1080pで画面全体を記録し、その場で720pにスケーリングします。 – mkaito

+0

https://trac.ffmpeg.org/wiki/StreamingGuideには、使用するコーデックがいくつか記載されています – rogerdpack

答えて

3

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

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

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

なぜffmpegのCPU使用率がわかりませんか?どのように1分の録画は、端末ウィンドウのtopを表示するのですか?そうでない場合は、端末でperf record -a sleep 60を実行し、次に何をするかに切り替えて、1分後にperf reportを記録しますか?

EDIT:私は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はそれでいいです。

+0

はい、私はhuffyuvを試しました。私は録音中にffmpeg専用の4つのコアを2つ保有しています。また、私の質問の一部は、私が持っている問題を正確に突き止めることでした。つまり、それがCPUかHDDかどうかはわかりません。私はまた、ディスクに書き込むために使用されているデータレートを見つけることについてもよく分かりません。 – mkaito

+1

RGB(ネイティブピクセル)をYUVに変換しています。 RGBで録音してみてください。あなたが記録している間、 'top'(または 'htop'やLinuxツールの' perf record -a sleep 60 ')を実行するのと同じくらい簡単にCPU使用量を取得する必要があります。 1秒あたりのディスク書き込み速度は、1分で記録したファイルのサイズを60で割ったものです。ディスクは100MB /秒で書き込むことができます(これは、これだけで使用され、 、それによってシークが起こります)。 –

+0

YUV4では、(A)RGBピクセル形式が嫌いです。 x264は生のy4mストリームのほかに何も食べませんし、ffmpegはx264を使うように指示するときにyuv420pを自動的に選択します。ビデオファイルのサイズは約2.30Gb /分です。つまり、約40Mb/sを書きます。 htopは、ffmpegに割り当てられたコアの負荷がそれぞれ約30%になることを報告します。 – mkaito

関連する問題