我在运行 Windows Server 2016 的虚拟机上的 Docker 容器内通过命令行使用 FFmpeg 进行一些视频编码。我担心这会占用大量可用 RAM。这是不可取的,因为我在同一台虚拟机上运行了许多其他容器。
是否可以通过设置或命令行参数来限制 FFmpeg 使用的 RAM?如果没有,我该如何实现类似的结果?
以下是我在 FFMPEG 之外考虑过的一些(非理想的)可能性。如果您对此有任何想法,我将不胜感激。
- 使用 Windows 系统资源管理器限制进程的 RAM 使用量
- 应用仅允许 FFmpeg 在有 8+ GB RAM 可用时启动编码的逻辑
- 在配备有限 RAM 的 Docker 中启动它
当我通过以下命令将(小型 35MB)视频转换为 GIF 时,出现内存使用问题(4GB+):
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)。
因此,对于你的情况,请尝试以下方法:
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