¿Hay alguna forma de limitar el uso de memoria de FFmpeg?

¿Hay alguna forma de limitar el uso de memoria de FFmpeg?

Estoy usando FFmpeg a través de la línea de comandos para codificar algunos videos desde un contenedor Docker en una máquina virtual que ejecuta Windows Server 2016. Mi preocupación es que esto está consumiendo un gran porcentaje de la RAM disponible. Esto no es deseable, ya que tengo muchos otros contenedores ejecutándose en la misma máquina virtual.

¿Es posible limitar la RAM utilizada por FFmpeg mediante una configuración o un argumento de línea de comando?Si no es así, ¿cómo podría lograr un resultado similar?

A continuación se muestran algunas posibilidades (no ideales) que he considerado fuera de FFMPEG. Agradecería cualquier idea sobre estos.

  • Utilice el Administrador de recursos del sistema de Windows para limitar el uso de RAM del proceso
  • Aplique lógica que solo permita que FFmpeg inicie una codificación mientras haya más de 8 GB de RAM disponibles
  • Ejecútelo en una ventana acoplable equipada con RAM limitada

El problema con el uso de memoria (4GB+) ocurre cuando convierto videos (pequeños de 35MB) a GIF mediante este comando:

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

Respuesta1

ffmpegno utiliza RAM, que en realidad nonecesidades. Normalmente esto es muy poco.

Si sus ffmpegprocesos realmente usan mucha RAM (no es una mala interpretación de alguna lectura), limitar su asignación de RAM simplemente hará que falle con una condición OOM.

Si nos cuenta sobre su ffmpeglínea de comando, es posible que podamos sugerirle alternativas que utilicen menos RAM.

Respuesta2

Experimenté un uso extensivo de RAM cuando usé el filtro dividido. En algunas situaciones, utilicé mucho menos RAM al evitar el filtro dividido.

En lugar de utilizar la división, puede intentar cargar la misma entrada dos veces y procesar las dos entradas individualmente hasta que las combine (potencialmente a costa de un tiempo de procesamiento adicional).

Entonces, en tu caso, prueba algo como:

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

información relacionada