
我透過命令列使用 FFmpeg 從運行 Windows Server 2016 的 VM 上的 Docker 容器內進行一些視訊編碼。這是不可取的,因為我在同一個虛擬機器上運行著許多其他容器。
是否可以透過設定或命令列參數來限制 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 使用量會少很多。
您可以嘗試載入相同的輸入兩次並單獨處理兩個輸入,直到合併它們(可能會花費一些額外的處理時間),而不是使用分割。
所以在你的情況下嘗試類似的事情:
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