2016-05-17 4 views
4

[私がやっていること]ffmpegでフレームのデコードをベンチマークする方法は?

私は

  • によって異なるffmpegのデコーダの性能を測定しようとしていますコールがavcodec_decode_video2(..)を機能させるにどのくらいのタイミングは次のようにffmpeg.cに取り、ffmpegのバイナリを実行しています

~/bin/ffmpeg -benchmark_all -loglevel debug -threads 0 -i ~/Documents/video-input.h264 -c:v libx265 -x265-params crf=25 video-output.hevc

  • とどのくらい番目のタイミングにより、 E同じ機能は

~/bin/ffplay ~/Documents/video-input.h264

次のような方法は、私の理解では、その関数の呼び出しのための平均時間は、私はビデオを変換していますかどうかを同じにする必要がありffplay.cに取り、ffplayバイナリを実行していますか、私はそのビデオのフレームをデコードするのにかかる時間を測定しているに過ぎないからです。これは間違ったやり方ですか?私が間違っている場合は、私に知らせてください。私が得ている結果は、私にとっては奇妙なことです。前述の関数への呼び出しは、ffplayバイナリと比較してffmpegバイナリのほうが2倍多くなります。私は-threads 0でffmpegバイナリを実行しようとしましたが、結果はまだ同じです(ffplayの2倍です)。バイナリをffplayするだけでもっと多くのスレッドを利用することができますか? -threads 1で試してみると、ffmpegはffplayの約10倍の時間がかかります(いくつかのスレッドを使用する前から私には意味がありますが、現在は1を使用しています)。

私は質問しています。私はビデオ処理とビデオのエンコード/デコード処理の初心者であることを知りました。

[私の質問]

私はそれが(1つのスレッドを使用して)フレームをデコードするためにかかる時間を測定する正確な方法であるもの疑問に思って? ffplayバイナリではなく、ffmpegバイナリを使用してavcodec_decode_video2(..)関数を呼び出すのにどれくらい時間がかかりますか?結果はより正確になりますか? また、-benchmark_all -loglevel debugオプションを有効にしようとしましたが、次のメッセージのように見えます。bench: 64537 decode_video 0.0は、0.0が時間を意味すると思われる場合はあまり役に立ちません。 (他の番号が何を意味するかわからない)

答えて

9

ヌルマキサー

あなたはベンチマークのデコードに簡単な方法で使用したい場合null muxer

$ time ffmpeg -i input -f null - 
[...] 
real 0m5.343s 
user 0m20.290s 
sys  0m0.230s 

ffmpeg -i input -f null - 

タイミングデコード

LinuxとMacOSのユーザーがtimeコマンドを追加することができます

man time詳細については。

-benchmarkオプション

-benchmarkオプションは、出力CPU時間と最大メモリ消費量に追加することができます。

$ time ffmpeg -i input -f null - 
[...] 
bench: utime=7.314s 
bench: maxrss=72280kB 

選ぶことが

ストリームあなただけの特定のストリームをデコードしたい場合は、使用map option

ffmpeg -i input -map 0:a:0 -f null - 

スレッド

あなたがしたい場合には、一つのスレッドでデコードすることができます。

​​

は、すべてのデコーダは、スレッド機能を持っていないし、いくつかは、いくつか持っています。 ffmpeg -h decoder=h264などのデコーダの詳細を確認できます。

デコーダの選択

フォーマットには複数のデコーダを使用できます。

ffmpeg -c:v vp8 -i input -f null - 
ffmpeg -c:v libvpx -i input -f null - 
+0

異なる時刻間の違いを説明する価値があるかもしれません - 実際の時刻はおそらく比較のためには最も有用ではないでしょうシステム負荷、使用可能なコアなどに依存します。 – Mick

+0

ストリームを無視する簡単な方法は、オーディオストリームを無視する '-an'またはビデオストリームを無視する' -vn'です。 –

+0

@PeterCordes私は '-map'よりも柔軟性が高く、特定のストリームを選択(または除外)することができます。 – LordNeckbeard

関連する問題