web-dev-qa-db-ja.com

FFmpegのCPU使用率が低い

コマンドffmpeg -i in.mp4 -c:v copy -c:a aac out.mp4を使用して、FFmpegを使用して多数のファイルをMP4(H264&AC3)からMP4(H264&AAC)に変換しています。

ハイパースレッディングを備えた4コアCPUがあり、変換を行うときに約15%の使用率を示しています。ファイルはSSDにあり、ディスクアクティビティは約3MB /秒であるため、ディスクがボトルネックになっているようには見えません。

エンコードが開始されると、CPUは最大周波数に達しますが、どのコアの負荷も約50%を超えることに気づいていません。

FFmpegは複数のコアをうまく​​利用していませんか?エンコードを高速化する方法はありますか?

2
user2248702

エンコードしているのはオーディオだけであり、存在するほとんどのオーディオエンコーディングライブラリはシングルスレッドです。これは、オーディオエンコーディングがすでにシングルスレッドアプリケーションとして非常に高速であり(とにかくビデオエンコーディングと比較した場合)、メモリをあまり使用しないため、シングルスレッドを使用して各ファイルをエンコードして開始することが実際に可能であるためです。 CPUを完全に飽和させるために、必要な数の個別のプロセスをアップします。マルチスレッドも必ずしも線形パフォーマンスの向上をもたらすとは限らないという事実を考慮に入れてください。おそらく、ほとんどのオーディオエンコーダの開発者がマルチスレッドを優先度が高いと考えていない理由があります。マルチスレッドを実装する2つのオーディオエンコーダー(MP3の場合はLAME MT)、FLACの場合は pflac )のみを知っています。どちらも個別の変更であり、それらが派生したプロジェクトの主なコードベース。

CPU使用率に関しては、ハイパースレッディングでは8つの論理コアがあり、100%の8つは12.5%であり、15%の使用率の数値からそれほど遠くありません。システムがどのコアにも100%の負荷を示していない理由はよくわかりません。おそらく、OSがコア間でプロセスを移動して、負荷を均等にするなどです。

多数のファイルをエンコードする必要がある場合は、複数のFFmpegプロセスを起動して複数のファイルを同時にエンコードするスクリプトを作成することを検討してください。私はスクリプト/プログラミングの経験がほとんどありませんが、画像の最適化に同じロジックを適用するオープンソースツールを知っています: picopt 。したがって、Pythonでそれを行う方法についてのポインタが必要な場合は、picoptのソースコードを見ることができます。

1
veikk0

小切手 ffmpeg -hwaccels

から https://ffmpeg.org/ffmpeg.html

-hwaccelsこのffmpegのビルドでサポートされているすべてのハードウェアアクセラレーションメソッドを一覧表示します。

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)
Select a device to use for hardware acceleration.

This option only makes sense when the -hwaccel option is also specified. Its exact meaning depends on the specific hardware

選択した加速方法。

vdpau
For VDPAU, this option specifies the X11 display/screen to use. If this option is not specified, the value of the DISPLAY environment

変数が使用されます

dxva2
For DXVA2, this option should contain the number of the display adapter to use. If this option is not specified, the default adapter

使用されている。

qsv
For QSV, this option corresponds to the values of MFX_IMPL_* . Allowed values are:

auto
sw
hw
auto_any
hw_any
hw2
hw3
hw4
0
Michael D.