0

MEncoder を使用して、膨大な量の jpg 画像をタイムラプス ビデオに結合しています。それぞれ約10個のサブフォルダーを持つ2つのメインフォルダーがあり、実行中のプロセスを自動化するために:

find . -type d -name img -exec sh -c '(cd {} && /Volumes/SAMSUNG/PedestrianBehaviour/BreakableBonds/jpg2avi.sh t*)' ';'

ここで、jpg2avi は MEncoder の設定です。

mencoder 'mf://t00*.jpg' -mf fps=10 -o raw.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=2000 -o out.avi

並列化するために、BreakableBonds と UnBreakableBonds の 2 つのフォルダーでこのコマンドを開始しました。ただし、各プロセスは約 27% しか使用しないため、合計で 50% を少し上回ります。これを加速できる方法はありますか?各プロセスが約 50% を占めるようにします。(各プロセスで 50% が不可能であることは承知しています。)

4

1 に答える 1

1

使用しているビデオ コーデックによっては (x264 が適切な選択です)、1 つのエンコードで複数の CPU コアを飽和させることができます。mencoder は AVI のような想定で設計されているため、通常は ffmpeg を直接使用します。

これを行う方法については、 ffmpeg の wiki ページを参照してください。

繰り返しになりますが、avi コンテナーではなく、mkv または mp4 コンテナーで h.264 を使用することを強くお勧めします。avi の h.264 はハックであり、avi の通常のコーデックは divx (h.263) です。h.264 は大きな前進です。

h.264 はビデオ用であり、オーディオ用の mp3 と同じです。十分に優れた最初のコーデックであり、CPU がリアルタイムで実行できるほど高速になり、ディスクとネットワークが適切なファイル サイズを処理できるようになったときに登場しました。品質。libx264 のフロントエンドとして ffmpegと共に使用します。

h.265 (および vp9) はどちらも h.264 よりも (圧縮効率の点で) 優れたコーデックですが、サポート範囲がはるかに狭く、より多くの CPU 時間を必要とします。それらを使用する場合は、ffmpeg を libx265 または libvpx のフロントエンドとして使用してください。x265 は大規模な開発が行われているため、おそらく改善されていますが、数か月前、エンコードの CPU 時間が等しい場合、x265 はビットレートあたりの品質で x264 を凌駕しませんでした。ただし、CPU 時間がはるかに多い場合、 x265は優れた仕事をし、x264 よりもはるかに少ないビットレートで見栄えの良いエンコードを行うことができます。

これら 3 つのコーデックはすべてマルチスレッドであり、高速設定でも 4 コアを飽和させる可能性があります。より高い設定 (ブロックごとにより多くの CPU 時間を費やす) では、少なくとも 16 コアを飽和させることができると思います。よくわかりませんが、HD x265 エンコードで 64 コア、またはそれ以上のコアを効率的に活用できると思います。

高速設定と高ビットレートでは、gzip スタイルのエントロピー コーディングの最終段階 (つまり、x264 の CABAC) により、使用できる CPU の量が制限されます。これはシリアル タスクであるため、エンコード全体は、1 つの CPU が最終的なビットストリームを圧縮できる速度でのみ実行されます。

于 2015-10-27T14:33:25.080 に答える