DEV Community

Cover image for Cómo mejorar la calidad de video con FFmpeg: Escalado, reducción de ruido y estabilización
Roobia
Roobia

Posted on • Originally published at apidog.com

Cómo mejorar la calidad de video con FFmpeg: Escalado, reducción de ruido y estabilización

TL;DR

FFmpeg escala video con -vf "scale=1920:1080:flags=lanczos" — Lanczos es el mejor algoritmo de escalado para ampliar. Para la eliminación de ruido, hqdn3d reduce el grano mientras preserva los bordes. Para la estabilización, vidstab maneja la vibración de la cámara mediante un proceso de dos pasadas. Combina los tres en una única cadena de filtros para una tubería de mejora de calidad.

Prueba Apidog hoy

Introducción

La mejora de la calidad de video con FFmpeg va más allá de simplemente cambiar la resolución. La verdadera mejora combina el escalado de resolución con una eliminación de ruido inteligente y estabilización opcional. Cada paso aborda un problema de calidad diferente: metraje suave o pixelado, fotogramas granulados o ruidosos, y movimiento de cámara inestable.

Esta guía cubre cada técnica de forma independiente y muestra cómo combinarlas.

Algoritmos de escalado

El algoritmo de escalado determina cómo FFmpeg rellena los nuevos píxeles al ampliar. La elección tiene un efecto visible en la calidad de salida.

Algoritmo Velocidad Calidad Mejor para
neighbor Más rápido Más baja Pixel art
bilinear Rápido Baja Crítico en velocidad
bicubic Media Buena Reducción general
lanczos Más lento Mejor Ampliación

Escalar a 1080p con Lanczos:

ffmpeg -i input_720p.mp4 -vf "scale=1920:1080:flags=lanczos" -c:v libx264 -crf 20 output_1080p.mp4
Enter fullscreen mode Exit fullscreen mode

Mantener la relación de aspecto:

ffmpeg -i input.mp4 -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 output.mp4
Enter fullscreen mode Exit fullscreen mode

-2 calcula automáticamente la altura manteniendo la relación de aspecto y asegurando que el resultado sea divisible por 2.

Escalar a 4K:

ffmpeg -i input.mp4 -vf "scale=3840:-2:flags=lanczos" -c:v libx264 -crf 18 -preset slow output_4k.mp4
Enter fullscreen mode Exit fullscreen mode

-preset slow le indica a x264 que dedique más tiempo a optimizar la compresión, lo cual es más importante en resoluciones más altas.

Eliminación de ruido con hqdn3d

El filtro hqdn3d es una eliminación de ruido 3D de alta calidad. Elimina el grano y el ruido mientras preserva el detalle de los bordes.

ffmpeg -i noisy_video.mp4 -vf "hqdn3d=4:3:6:4.5" -c:v libx264 -crf 20 denoised.mp4
Enter fullscreen mode Exit fullscreen mode
  • luma_spatial (0-16): Ruido espacial en el canal de brillo. Por defecto 4.
  • chroma_spatial (0-16): Ruido espacial en los canales de color. Por defecto 3.
  • luma_temporal (0-16): Suavizado temporal en el brillo. Por defecto 6.
  • chroma_temporal (0-16): Suavizado temporal en el color. Por defecto 4.5.

Eliminación de ruido más fuerte:

ffmpeg -i grainy.mp4 -vf "hqdn3d=10:8:15:10" -c:v libx264 -crf 20 clean.mp4
Enter fullscreen mode Exit fullscreen mode

Valores más altos eliminan más ruido, pero pueden difuminar los detalles finos. Prueba con diferentes configuraciones antes de procesar el video completo.

Eliminación de ruido ligera (preservar detalle):

ffmpeg -i video.mp4 -vf "hqdn3d=2:1.5:3:2.5" -c:v libx264 -crf 20 output.mp4
Enter fullscreen mode Exit fullscreen mode

Estabilización con vidstab

El filtro vidstab requiere un enfoque de dos pasadas: primero analiza el movimiento, luego aplica la estabilización.

Instalación: El soporte de vidstab depende de tu compilación de FFmpeg. Verifica con:

ffmpeg -filters | grep vidstab
Enter fullscreen mode Exit fullscreen mode

En macOS:

brew install ffmpeg
Enter fullscreen mode Exit fullscreen mode

lo incluye.

Primera pasada: Analizar movimiento

ffmpeg -i shaky_video.mp4 -vf "vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform.trf" -f null -
Enter fullscreen mode Exit fullscreen mode
  • shakiness=8 (1-10): Cuánta vibración de cámara esperar.
  • accuracy=9 (1-15): Precisión de detección.
  • -f null - descarta la salida; solo necesitas el archivo .trf.

Segunda pasada: Aplicar estabilización

ffmpeg -i shaky_video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=1:smoothing=10" -c:v libx264 -crf 20 stabilized.mp4
Enter fullscreen mode Exit fullscreen mode
  • zoom=1 añade un zoom del 1% para compensar el recorte de los bordes. Aumenta si aparecen bordes negros.
  • smoothing=10 controla cuán suave se vuelve la trayectoria de la cámara (mayor = más suave).

Estabilización más agresiva:

ffmpeg -i video.mp4 -vf "vidstabtransform=input=transform.trf:zoom=3:smoothing=30:optzoom=1" -c:v libx264 -crf 20 stable.mp4
Enter fullscreen mode Exit fullscreen mode

optzoom=1 optimiza automáticamente el zoom para evitar los bordes.

Tubería combinada de mejora de calidad

Ejecuta las tres operaciones juntas en una única cadena de filtros:

ffmpeg -i source.mp4 \
  -vf "hqdn3d=4:3:6:4.5,scale=1920:-2:flags=lanczos,vidstabtransform=input=transform.trf:zoom=1:smoothing=10" \
  -c:v libx264 -crf 18 -preset slow \
  -c:a copy \
  enhanced.mp4
Enter fullscreen mode Exit fullscreen mode

Aplica este orden: primero elimina el ruido (elimina artefactos que podrían afectar el escalado), luego escala, luego estabiliza. Así evitas escalar el ruido a una resolución más alta.

Nota: Ejecuta primero la pasada de vidstabdetect antes de usar esta tubería combinada.

Filtro de nitidez

Si el metraje se ve suave en lugar de ruidoso, el enfoque puede ayudar:

ffmpeg -i video.mp4 -vf "unsharp=5:5:1.5:5:5:0.5" -c:v libx264 -crf 20 sharpened.mp4
Enter fullscreen mode Exit fullscreen mode
  • lx:ly:la:cx:cy:ca (tamaños y cantidades de luma/croma)
  • lx:ly — tamaño de la matriz de luma (píxeles)
  • la — cantidad de luma (positivo = enfocar, negativo = difuminar)
  • cx:cy:ca — equivalentes de croma

Para un enfoque ligero: unsharp=3:3:0.5:3:3:0.0

Para un enfoque fuerte: unsharp=5:5:2.5:5:5:0.0

Consideraciones de rendimiento

Las operaciones de mejora requieren muchos recursos computacionales. Estimaciones de tiempo de procesamiento para un video de 10 minutos en 1080p:

  • Solo escalado simple: 2-5 minutos
  • Escala + hqdn3d: 5-10 minutos
  • Escala + hqdn3d + vidstab: 15-25 minutos

Usa -preset para equilibrar la velocidad de codificación frente al tamaño del archivo:

  • ultrafast — codificación más rápida, archivos más grandes
  • fast — velocidad/tamaño moderado
  • slow — más lento, archivos más pequeños para un CRF dado
  • veryslow — generalmente no vale la pena el tiempo extra en comparación con slow

Para procesamiento por lotes, ejecuta múltiples archivos concurrentemente o usa parallel:

ls *.mp4 | parallel ffmpeg -i {} -vf "scale=1920:-2:flags=lanczos" -c:v libx264 -crf 20 enhanced_{/}
Enter fullscreen mode Exit fullscreen mode

Conexión a APIs de escalado de video con IA

Para el escalado impulsado por IA (que produce mejores resultados que los filtros de FFmpeg para metraje de baja calidad o dañado), existen APIs especializadas junto con las herramientas de FFmpeg.

WaveSpeedAI ofrece modelos de escalado de IA que utilizan escalado neuronal en lugar de filtros algorítmicos:

POST https://api.wavespeed.ai/api/v2/wavespeed-ai/video-enhance
Authorization: Bearer {{WAVESPEED_API_KEY}}
Content-Type: application/json

{
  "video_url": "https://storage.example.com/source-video.mp4",
  "scale": 2,
  "enhance": true
}
Enter fullscreen mode Exit fullscreen mode

Prueba esto con Apidog antes de integrar:

Añade aserciones:

Status code is 200
Response body has field id
Enter fullscreen mode Exit fullscreen mode

Consulta el endpoint de estado para la finalización, luego compara la salida escalada por IA con la salida de Lanczos de FFmpeg. El escalado de IA maneja mejor las texturas y los detalles finos que los métodos algorítmicos; FFmpeg es más rápido y gratuito.

Usa FFmpeg para trabajos de calidad estándar y el escalado de IA basado en API para metraje donde la calidad es lo más importante.

Preguntas Frecuentes

¿Es Lanczos mejor que bicubic en todos los casos?

Para el escalado (ampliación), sí. Para la reducción, bicubic suele ser más rápido con una calidad comparable. Lanczos es computacionalmente más caro.

¿Funciona vidstab en metraje de teléfono?

Sí. El metraje de teléfono a menudo es el que más se beneficia de la estabilización. El parámetro shakiness debe establecerse alto (8-10) para videos de teléfono grabados a mano.

¿Cuánto zoom se necesita para ocultar los bordes de estabilización?

Típicamente del 3-8% dependiendo de cuán inestable sea la fuente. Establece optzoom=1 para que FFmpeg lo calcule automáticamente.

¿Puede FFmpeg mejorar el metraje histórico de baja resolución?

Los filtros de FFmpeg ayudan, pero tienen límites. Las herramientas de escalado basadas en IA (como ESRGAN o APIs especializadas de mejora de video) producen resultados significativamente mejores en metraje severamente degradado.

¿La eliminación de ruido ralentiza la reproducción?

No. La eliminación de ruido es un paso de procesamiento durante la conversión, no un efecto en tiempo real. El video de salida se reproduce normalmente.

Top comments (0)