Saltar al contenido principal

Jugando con ffmpeg

· 3 min de lectura
Franco R.
Software Person @ sils.tech

Como todos sabemos la conversión de los videos históricos (playback) una vez descargados se realiza en una cloud function que básicamente usa un wrapper del querido y popular ffmpeg.

Actualmente esa conversión la realizamos con los siguientes parámetros:

ffmpeg -y -v error -r 10 -i entrada.h26x \
-f mp4 -metadata artist=Silstech -metadata comment="Generado por Silstech" \
-crf 40 -vcodec libx264 -s 1920x1080 -an -sn -r 20 \
salida.mp4

Explicación de los parámetros:

  • -r 10: asume que los FPS de entrada son 10
  • -crf 40: el CRF es el Constant Rate Factor, un número entre 1 y 51. A mayor sea el número, menor calidad de salida. Por defecto es 23.
  • -vcodec libx264: el códec del video de salida. Si acá ponemos libx265 no se puede ver el video en un browser (no soportado … aún).
  • -s 1920x1080: tamaño del video de salida. En este caso corresponde con el FullHD
  • -an: no audio
  • -sn: no subtítulos
  • -r 20: FPS de salida

Todos los ejemplos que muesto se hicieron con un H.265 original "a810ef37-10fd-490c-b085-4c11c4dc325d.h26x" de 4.5MB y 3 minutos de largo. Lo adjunto:

a810ef37-10fd-490c-b085-4c11c4dc325d.h26x

A continuación se muestran distintos videos generados para cada configuración.

  • CRF 40 y size 1920x1080. 3.7MB y 281 segundos de conversión

CSRF 40 1920x1080

  • CRF 51 y size 1920x1080. 1MB y 183 segundos de conversión

CSRF 51 1920x1080

  • CRF 40 y size 800x600. 1.1MB y 71 segundos de conversión

CSRF 40 800x600

  • CRF 40 , size 800x600 pero con un aspect "16:9". 1.1MB y 71 segundos de conversión

CSRF 40 800x600 r16:9

Agrego video:

  • CRF 23, size 800x600, aspect 16:9. 10.9MB y 160 segundos de conversión

CSRF 23 800x600 r16:9

  • CRF 30, size 800x600, aspect 16:9. 3.7MB y 111 segundos de conversión

CSRF 30 800x600 r16:9

Agrego video de este caso:

UPDATE 7/10/2024

Tamaños

Video de 20m (solicitado vía api por la restricción del front end) tardó 4m en bajarse del dispositivo y 1m 12s la ejecución de la función de conversión!

Conclusión

Hasta acá yo creo que podemos elegir entre dos candidatos que son los que adjunté el video:

  • CRF 40 , size 800x600 pero con un aspect "16:9". 1.1MB y 71 segundos de conversión
  • CRF 30, size 800x600, aspect 16:9. 3.7MB y 111 segundos de conversión

La única diferencia entre ambos es el CRF lo cual se nota mínimamente en la calidad. Lo que tendríamos que analizar es si esa difrencia de calidad justifica la diferencia de espacio y de tiempo.