
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
ffmpeg
RAMを一切使用しないので、実際にはニーズ通常、これはごくわずかです。
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