FFmpeg のメモリ使用量を制限する方法はありますか?

FFmpeg のメモリ使用量を制限する方法はありますか?

Windows Server 2016 を実行している VM 上の Docker コンテナー内から、コマンド ライン経由で FFmpeg を使用してビデオをエンコードしています。懸念されるのは、使用可能な RAM の大部分が消費されることです。同じ VM 上で多数の他のコンテナーが実行されているため、これは望ましくありません。

設定またはコマンドライン引数を通じて FFmpeg が使用する RAM を制限することは可能ですか?そうでない場合、同様の結果を達成するにはどうすればよいでしょうか?

以下は、FFMPEG 以外で私が検討したいくつかの (理想的ではない) 可能性です。これらについてご意見をお聞かせいただければ幸いです。

  • Windows システム リソース マネージャーを使用してプロセスの RAM 使用量を制限する
  • 8 GB以上のRAMが利用可能な場合にのみFFmpegがエンコードを開始できるようにするロジックを適用します。
  • 限られたRAMを搭載したDockerで起動する

メモリ使用量 (4GB 以上) の問題は、次のコマンドを使用して (小さい 35MB) ビデオを GIF に変換しているときに発生します。

ffmpeg -i C:\test\vidmp4.mp4 -vf "fps=24,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" C:\temp\testgif.gif

答え1

ffmpegRAMを一切使用しないので、実際にはニーズ通常、これはごくわずかです。

ffmpegプロセスが実際に大量の RAM を使用する場合(一部の読み取りの誤解ではありません)、RAM 割り当てを制限すると、OOM 状態でクラッシュするだけです。

ご使用のコマンドラインをお知らせいただければffmpeg、RAM の使用量が少ない代替案を提案できる場合があります。

答え2

分割フィルターを使用すると、RAM の使用量が膨大になりました。状況によっては、分割フィルターを使用しないと RAM の使用量が大幅に減りました。

split を使用する代わりに、同じ入力を 2 回読み込み、2 つの入力を個別に処理してマージすることもできます (処理に余分な時間がかかる可能性があります)。

したがって、あなたの場合は次のようなことを試してください:

ffmpeg -i C:\test\vidmp4.mp4 -i C:\test\vidmp4.mp4 -vf "[0:v]fps=24,scale=320:-1:flags=lanczos[s0];[1:v]fps=24,scale=320:-1:flags=lanczos[s1];[s0]palettegen[p];[s1][p]paletteuse" C:\temp\testgif.gif

関連情報