web-dev-qa-db-ja.com

最速のh264への変換のためのFFmpegのスレッドカウントオプション?

速度を最大化する FFmpegを使用してビデオをh264に変換する必要がある

  • 任意の入力形式ソース動画
  • ユーザーのマシンは任意の数のコアを持つことができます
  • 電力とメモリの消費は問題ではありません

もちろん、調整できるオプションはたくさんありますが、この質問は特に最適なものを選択することに関するものです-thread <count>オプション。私はの関数として理想的なスレッド数を見つけようとしています

  • 番号。コアの
  • 入力ビデオ形式
  • 多分h264フレンドリーな値?
  • 上記で見逃したものはありますか?

デフォルトの-thread 0は、最適と思われるコアあたり1スレッドのアプローチに従います。しかし、これが時間またはスペースに最適化されているかどうかはわかりません。また、特定のテストケースでは、デフォルトよりも多くのスレッド(デュアルコアテストマシンで4つのスレッドなど)がより早く終了するのを確認しました。

それ以外の方向、たとえばconfigureオプションw.r.t。スレッド、追求する価値がある?

25
S B

threadsはすべてのコアをうまく​​利用できず、ハイパースレッドはまったく使用されないことがわかりました。私が思いついた解決策の1つは、3〜4つのffmpegプロセスを並行して実行することです。 https://superuser.com/questions/538164/how-many-instances-of-を参照してくださいffmpeg-commands-can-i-run-in-parallel/547340#547340 このアプローチは、すべてのコアを完全に使用することになり、単一コマンドオプションでの単一入力、複数出力よりも高速です。

14
d33pika

「デュアルコア」にハイパースレッディングがある場合、2xコアがおそらく正しいでしょう。仮想コアの数(ハイパースレッディングを含む)を超えて利益が得られることはまずありませんが、おそらくFFmpegの内部問題のために、それは真実かもしれません。

2
jesup

スレッド0、6、12、24で徹底的に実験しましたが、フレームレート、全体的な処理時間、CPU使用率に違いはありません。私のシステムには12個の物理コアもあります。一般に、トップ/システムモニターを見ている間、私の12コアが基本的に98-99%使用されているスレッドを指定せずに、処理能力を使用するのに良い仕事をしているようです。

魔法の弾丸があればよかったのですが、ffmpegは現在のところ非常にうまく最適化されているので、今のところ物事をスピードアップする他の方法はありません。唯一の選択肢は、単により多くの計算能力を得るか、分散処理を行うことです。

*すべてのテストがffmpegバージョン3.3.1を使用していたことに注意してください

1
Areeb Soo Yasir