有沒有辦法限制FFmpeg的記憶體使用?

有沒有辦法限制FFmpeg的記憶體使用?

我透過命令列使用 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

相關內容