速度を最大化する FFmpegを使用してビデオをh264に変換する必要がある
もちろん、調整できるオプションはたくさんありますが、この質問は特に最適なものを選択することに関するものです-thread <count>
オプション。私はの関数として理想的なスレッド数を見つけようとしています
デフォルトの-thread 0
は、最適と思われるコアあたり1スレッドのアプローチに従います。しかし、これが時間またはスペースに最適化されているかどうかはわかりません。また、特定のテストケースでは、デフォルトよりも多くのスレッド(デュアルコアテストマシンで4つのスレッドなど)がより早く終了するのを確認しました。
それ以外の方向、たとえばconfigureオプションw.r.t。スレッド、追求する価値がある?
threads
はすべてのコアをうまく利用できず、ハイパースレッドはまったく使用されないことがわかりました。私が思いついた解決策の1つは、3〜4つのffmpegプロセスを並行して実行することです。 https://superuser.com/questions/538164/how-many-instances-of-を参照してくださいffmpeg-commands-can-i-run-in-parallel/547340#547340 このアプローチは、すべてのコアを完全に使用することになり、単一コマンドオプションでの単一入力、複数出力よりも高速です。
「デュアルコア」にハイパースレッディングがある場合、2xコアがおそらく正しいでしょう。仮想コアの数(ハイパースレッディングを含む)を超えて利益が得られることはまずありませんが、おそらくFFmpegの内部問題のために、それは真実かもしれません。
スレッド0、6、12、24で徹底的に実験しましたが、フレームレート、全体的な処理時間、CPU使用率に違いはありません。私のシステムには12個の物理コアもあります。一般に、トップ/システムモニターを見ている間、私の12コアが基本的に98-99%使用されているスレッドを指定せずに、処理能力を使用するのに良い仕事をしているようです。
魔法の弾丸があればよかったのですが、ffmpegは現在のところ非常にうまく最適化されているので、今のところ物事をスピードアップする他の方法はありません。唯一の選択肢は、単により多くの計算能力を得るか、分散処理を行うことです。
*すべてのテストがffmpegバージョン3.3.1を使用していたことに注意してください