コマンド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は複数のコアをうまく利用していませんか?エンコードを高速化する方法はありますか?
エンコードしているのはオーディオだけであり、存在するほとんどのオーディオエンコーディングライブラリはシングルスレッドです。これは、オーディオエンコーディングがすでにシングルスレッドアプリケーションとして非常に高速であり(とにかくビデオエンコーディングと比較した場合)、メモリをあまり使用しないため、シングルスレッドを使用して各ファイルをエンコードして開始することが実際に可能であるためです。 CPUを完全に飽和させるために、必要な数の個別のプロセスをアップします。マルチスレッドも必ずしも線形パフォーマンスの向上をもたらすとは限らないという事実を考慮に入れてください。おそらく、ほとんどのオーディオエンコーダの開発者がマルチスレッドを優先度が高いと考えていない理由があります。マルチスレッドを実装する2つのオーディオエンコーダー(MP3の場合はLAME MT)、FLACの場合は pflac )のみを知っています。どちらも個別の変更であり、それらが派生したプロジェクトの主なコードベース。
CPU使用率に関しては、ハイパースレッディングでは8つの論理コアがあり、100%の8つは12.5%であり、15%の使用率の数値からそれほど遠くありません。システムがどのコアにも100%の負荷を示していない理由はよくわかりません。おそらく、OSがコア間でプロセスを移動して、負荷を均等にするなどです。
多数のファイルをエンコードする必要がある場合は、複数のFFmpegプロセスを起動して複数のファイルを同時にエンコードするスクリプトを作成することを検討してください。私はスクリプト/プログラミングの経験がほとんどありませんが、画像の最適化に同じロジックを適用するオープンソースツールを知っています: picopt 。したがって、Pythonでそれを行う方法についてのポインタが必要な場合は、picoptのソースコードを見ることができます。
小切手 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