Cómo diagnosticar y corregir el estiramiento vertical en un video loop con FFmpeg y Blender

El problema del estiramiento vertical

Hay un caso común que puede pasarle a tus videos en loop: el contenido se estira verticalmente algunos píxeles durante su duración. ¿Cómo corregirlo? La respuesta no es tan simple como aplicar un filtro estático, porque primero hay que entender qué está ocurriendo realmente.

Comparativa entre un video distorsionado y uno limpio
Representación visual de un video en loop con estiramiento vertical versus una versión corregida.

Distinguir entre geometría y resolución

Lo más importante es no intentar compensar el estiramiento a ojo antes de averiguar la causa. Hay dos problemas distintos que pueden producir ese efecto:

  • El contenido realmente cambia de altura durante el video: aquí hay que corregir directamente la geometría o la animación.
  • El video cambia su resolución efectiva, pixel aspect ratio o interpretación de frames: en este caso, herramientas como FFmpeg pueden arreglarlo sin tocar el render original.

Causas comunes dentro de Blender

Si lo que describes es que el video empieza con una altura visual correcta y termina unos píxeles más «alto», hay varios factores en Blender que debes revisar:

  1. Scale de la cámara: una cámara ortográfica puede producir comportamientos distintos a una perspectiva.
  2. Aspect Ratio del render y del proyecto: verifica que los valores sean consistentes.
  3. Pixel Aspect X/Y: este valor debería normalmente ser 1.000 para evitar distorsiones.
  4. Parent, constraint o driver: revisa si algún objeto está modificando la escala durante la animación.
  5. Interpolación del loop: el problema puede estar en cómo se interpretan el primer y último keyframe al concatenarlos.

La solución con FFmpeg

Si descartas los problemas de contenido 3D, puedes usar un comando para aplicar una transformación temporal. El concepto es hacer que la altura varíe progresivamente:

Mapa visual de la transformación progresiva por frames
Diagrama técnico de cómo mapear los números de frame para lograr una altura variable en el render final.
scale=1920:altura_variable

Aquí, altura_variable dependerá del número de frame. Por ejemplo, si el crecimiento es lineal, puedes mapear los frames para que la altura suba y luego baje hasta volver a su estado original.