主に高メモリ使用の原因となるのはビデオコーデックです。
したがって、FFmpegを直接処理するのではなく、メモリ使用量に対処する必要があるのはエンコーダです。のメモリ使用量を修正する方法はわかりませんx264
が、新しいx26 5を試しましたが、私の場合は1.6 GBしか使用していませんが、libx264は2 GBを超えるメモリ制限を要求して失敗していました(プロセスごと、32で)ビットシステム)。
だから、私のために働いたのは使用することでした:
ffmpeg -i input -pix_fmt yuv420p -c:v hevc -x265-params crf=23 out.mp4
(オーディオを処理するためのパラメーターを省略します。)
しかし、一般的なアプローチは、他のエンコーダーを試すことです。x265が機能しない場合は、mpeg4とvp9を試してみました。それでもうまくいかない場合は、エンコーダーの設定を確認するなどのオプションがあります(ただし、メモリの使用に直接関連する明白なものは何も表示されません)。
ffmpeg -h encoder=mpeg4
更新:実際、YouTubeはまだHEVC(別名H.265)を受け入れていないことが判明しました(アップロードが完了した後にのみ通知されます)。それで、上で提案したように、私はVP9に行き、今回は最初の50フレームでパイロットランを行いました。私が見つけたガイドと同様の設定を使用しました(一定の品質設定ですが、提案されたパラメーターをもっと使用する必要がありました)。
ffmpeg.exe -i <input> -pix_fmt yuv420p -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 20 -f webm pass1.webm
ffmpeg.exe -i <input> -pix_fmt yuv420p -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 20 -f webm pass2.webm
(pass1.webm
ほとんど空になることに注意してください。)
また、可能な限り2つのパスが推奨されることに注意してください。全体的に高速なエンコーディングを含め、すべての面で優れています。
これらの設定では、4K解像度で73秒のクリップをエンコードするのに約16時間かかりました。これは、指定するのを忘れたため、1つのコアを使用しています-threads
。遅いですが、FFmpegのメモリ使用量は約0.6GBまでしか増えませんでした。結果のファイルは300MBであり、非圧縮フレームと比較して品質の低下は見られません(したがって-crf 20
、少し低すぎた可能性があります)。