Cómo Forzar Keyframes en FFmpeg para Edición de Video

Procesar video con herramientas como FFmpeg puede ser un desafío cuando se necesita control total sobre los puntos de codificación. A menudo, los editores se preguntan si existe una forma directa de forzar keyframes durante el procesamiento para asegurar que las transiciones o cortes sean perfectos.

Infografía sobre el uso de keyframes en FFmpeg para facilitar la edición
Visualización de cómo los parámetros de FFmpeg facilitan cortes precisos en la edición de video.

Cómo Forzar Keyframes en FFmpeg

La respuesta es sí. El software permite insertar keyframes de varias maneras, dependiendo de lo que necesites exactamente.

Opciones Principales para Insertar Keyframes

Una de las opciones más útiles es el uso del parámetro -force_key_frames. Este comando te da un control preciso sobre cuándo se deben generar los fotogramas clave:

  • Cada X segundos: Puedes usar una expresión para forzar keyframes automáticamente. Por ejemplo, cada 2 segundos se escribe:
    ffmpeg -i input.mp4 -c:v libx264 -force_key_frames "expr:gte(t,n_forced*2)" output.mp4
  • Tiempos concretos: También puedes especificar los tiempos exactos directamente en la línea de comandos, como:
    -force_key_frames 5,10,15,20.

Otra opción poderosa es controlar el intervalo máximo del grupo de imágenes (GOP) utilizando el parámetro -g. Si tu video tiene una tasa de cuadros de 30 fps y deseas un keyframe como máximo cada segundo, simplemente configuras:
-g 30.

Finalmente, para evitar que el codificador inserte keyframes automáticamente al detectar cambios en la escena, puedes usar -sc_threshold 0. Esto asegura que los keyframes aparezcan únicamente donde los determines tú a través del GOP o con -force_key_frames.

Generando un Keyframe Cada Segundo

Aquí tienes un ejemplo completo para generar un keyframe exactamente cada segundo:

ffmpeg -i input.mp4 
-c:v libx264 
-g 30 
-keyint_min 30 
-sc_threshold 0 
-force_key_frames "expr:gte(t,n_forced*1)" 
-c:a copy output.mp4

Si tu objetivo es que herramientas como PySceneDetect o un editor de video puedan cortar el material sin perder fotogramas, lo más recomendable es generar un keyframe en cada punto de corte (o con una frecuencia alta, por ejemplo cada 0,5 o 1 segundo).

Es importante considerar si tu idea es recomprimir el video con más keyframes antes de usar PySceneDetect. Si prefieres insertar keyframes sin recodificar el archivo original, debes saber que esto no es posible: para añadir estos puntos clave hay que volver a codificar el video completamente.