ffmpegはデフォルトでいくつのスレッドを使用しますか?


47

-threads <count>ffmpegにはコマンドラインオプションがあります。このオプションのデフォルト値は何ですか?

回答:


24

使用されるコーデック、ffmpegバージョン、およびCPUコア数に依存します。コアごとに単に1つのスレッドである場合もあります。時にはもっと複雑です:

libx264では、フレームスレッドの場合はコアx 1.5、スライススレッドの場合はコアx 1です。


ありがとう。ffmpegでサポートされているいくつかの標準コーデックのデフォルトへの参照はありますか?
エドワードデール

6
それに頼らないでください。Linuxでの私のffmpeg 0.7.8は、デフォルトでは1スレッドを使用します。
バラフアルビノ

より良い結果を得るためにどの値を使用できますか?PS AndroidフレームワークでFFMpegを使用しています。
キラー

23

2014年の時点では、最適な数が使用されています。

topffmpegのさまざまなオプションを使用してCPU負荷(Linux:、Windows:タスクマネージャー)を調べることにより、マルチコアコンピューターでこれを確認できます。

  • -threads 0 (最適な);

  • -threads 1 (シングルスレッド);

  • -threads 2 (たとえば、Intel Core 2 Duoの場合は2スレッド)。

  • なし(デフォルト、最適)。

2015年の編集: 12コアCPUの一部のffmpegコマンドでは、Linux topで最大200%のCPU(2コアのみ)が表示され-threadsます。したがって、デフォルトは「このffmpegバイナリが取得できる限り」という意味では依然として最適ですが、「リートCPUを完全に活用する」という意味では最適ではありません。


1
これはエンコーディングにのみ当てはまるようで、一般的な処理には当てはまらないことに注意してください。実際に出力フレームを生成していない場合、並列化されません。たとえば、02:00以降のシェークを解除する場合、02:00以降の並列処理のみが可能になりますが、02:00まではすべて連続して処理する必要があります。
Mehrdad

6

2015年、ffmpeg 0.8.10-6を使用するUbuntu 14.04では、4コアシステムで1コアを使用しました。 htopこれを示した。1つのコアのみが使用され、FullHDビデオの変換レートは16 fpsでした。

使用すると-threads 4、すべてのCPUコアが100%になり、47 fpsの変換率が得られました。

次のコマンドを使用しました。

$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg

6

これらの回答のいくつかは少し古いので、Ryzen 5 2600Xシステムの6コア/ 12スレッドすべてを引数なしで最大ffmpeg 4.1化したを使用してエンコードします。libx264-thread


私は1800Xを使用しており、16個のスレッドに20%の使用率が広がっているわけではありませんが、いくつかのオプションの引数も使用しています-vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode。追加し-threads 12ても効果はありませんでした。
エラスカネーター

3

CentOS 6.5 VM(Ryzen 1700 8c / 16t-vmに16コアのうち12が割り当てられています)での変換で遊んでいました。480pムービーの実験では、次のことが明らかになりました。

スレッドオプション/変換レート(fps @ 60秒)

(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps

おもしろいのは、CPUのロード(htopそれを見るために使用)でした。130fpsの範囲で巻き上げられたオプション
を使用せず-threads、低負荷レベルですべてのコアに負荷が分散されます。
1つのスレッドを使用すると、まさにそれが行われ、1つのコアが100%でロードされました。他のものを使用すると、別の分散負荷状況が発生しました。

ご覧のとおり、リターンが減少する点もあるため、特定のマシンの-threadsオプションを調整する必要があります。具体的には、-threads 6(12コアマシン上)を使用すると、ビデオを変換するとき(異なるビットレートでh264からx264に強制的に変換する)に最高のFPSが得られ、実際に返されたスレッドは、より多くのスレッドそれ。

メモリの問題でもある可能性があります-VMに割り当てられたのは1GBのみでした。私はそれを微調整し、それが何かを変えるかどうか見るかもしれません。それでも-この-threadsオプションを使用するとパフォーマンスが向上する可能性があるため、特定のマシンでさまざまなレベルでテストを実行して、セットアップのスイートスポットを見つけてください。


「変換」とはどういう意味ですか?理想的には、正確なコマンド。
オンドラジー

Ubuntu 18.04の4.1.3および非常に類似した結果。デフォルトは「すべてのコアの低負荷」でした。
Roel Van de Paar

「12コア」マシンで6スレッド(cpuが指定されていない、最初にリストされたものとは異なる)で最適になった理由は、6が実際のコア数であり、12がスレッド数だったからでしょうか?
Roel Van de Paar

1

スレッドが有効になっていると仮定すると、1.5xのコア数が割り当てられます。


フレームスレッド用のコアの1.5 x数。1 xスライススレッドのコア数。これは(lib)x264に固有です。他のエンコーダーの割り当てが何なのかわかりません。
-llogan

@LordNeckbeardフレームスレッドとスライススレッドを切り替える方法!?
Dr.jacky

1
@ Mr.Hydeおそらく-x264-params sliced-threads=1。またはの使用により-tune zerolatency
-llogan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.