¿Archivos de video demasiado grandes para subir? ¿El almacenamiento se llena rápido? FFmpeg puede resolver ambos problemas con un solo comando.
Esta guía recorre CRF, bitrate objetivo, codificación de 2 pasadas y presets — los cuatro enfoques principales de compresión de video. También encontrarás comandos listos para copiar para casos de uso comunes: entrega web, redes sociales, archivado y dispositivos móviles.
Conceptos básicos de la compresión de video
Antes de entrar en los comandos, conviene entender el compromiso fundamental: calidad vs. tamaño de archivo.
Hay dos estrategias principales de codificación:
- Bitrate variable (VBR) — Usa más bits para escenas complejas y menos para las simples. Logra mejor calidad con tamaños más pequeños.
- Bitrate constante (CBR) — Mantiene una tasa de datos fija a lo largo de todo el video. Se usa cuando se requieren garantías de ancho de banda, como en transmisiones en vivo.
Los dos códecs dominantes hoy en día son H.264 (libx264) y H.265 (libx265). H.265 produce aproximadamente la mitad del tamaño de archivo de H.264 a calidad equivalente, pero codifica más lento y tiene menor compatibilidad de reproducción en dispositivos antiguos.
El códec se especifica con la bandera -c:v. Usa -c:v libx264 para H.264 y -c:v libx265 para H.265.
Comprimir con CRF (Calidad constante)
CRF — Factor de Tasa Constante — fija un nivel de calidad y deja que el codificador decida el tamaño del archivo. Es el método de compresión más popular de FFmpeg y la opción predeterminada correcta para la mayoría de los casos de uso.
Compresión CRF con H.264:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a copy output.mp4
Compresión CRF con H.265 (menor tamaño de archivo a calidad equivalente):
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a copy output.mp4
Para aumentar la calidad (a costa del tamaño de archivo), reduce el CRF. Para material con mucho detalle como grabaciones de pantalla o animación, prueba CRF 18. Para subidas a redes sociales donde el tamaño importa más que la calidad perfecta, CRF 30–35 puede reducir drásticamente el tamaño sin degradación perceptible.
Comprimir con bitrate objetivo
El bitrate objetivo es la opción correcta cuando necesitas control estricto sobre el tamaño del archivo o el ancho de banda de transmisión. Si tienes un objetivo como "este archivo debe pesar menos de 50 MB", este es tu método.
Una estimación aproximada de tamaño: duración (segundos) × bitrate (bps) ÷ 8 = bytes. Un video de 60 segundos a 2 Mbps resulta en aproximadamente 15 MB.
Codificar video con un objetivo de 2 Mbps:
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -c:a copy output.mp4
Especificar tanto el bitrate de video como de audio:
ffmpeg -i input.mp4 -c:v libx264 -b:v 1800k -c:a aac -b:a 192k output.mp4
Una limitación del bitrate objetivo: se usa la misma cantidad de datos independientemente de la complejidad de la escena. Las escenas simples tendrán más bits de los necesarios; las escenas complejas pueden no tener suficientes. A menos que tengas un requisito estricto de tamaño, CRF generalmente produce mejores resultados.
Optimizar con codificación de 2 pasadas
La codificación de 2 pasadas es un proceso de dos etapas: FFmpeg primero analiza todo el video, luego lo codifica usando ese análisis. Esto le permite distribuir los bits de manera más eficiente a lo largo del video. Es más beneficiosa para contenido de larga duración o cuando necesitas la mejor calidad posible a un bitrate fijo.
Pasada 1 (solo análisis — no se crea video de salida):
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 1 -an -f null /dev/null
Pasada 2 (codificación final):
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 2 -c:a aac -b:a 192k output.mp4
Para H.265, usa -c:v libx265 -x265-params pass=1 en la primera pasada.
La codificación de 2 pasadas toma aproximadamente el doble de tiempo que una sola pasada, pero produce mejor calidad al mismo bitrate. Es especialmente efectiva para autoría de DVD, entrega broadcast, o cualquier escenario con un límite estricto de tamaño de archivo. Para compresión cotidiana, CRF suele ser suficiente.
Controlar velocidad y eficiencia con presets
Los libx264 y libx265 de FFmpeg incluyen un sistema de presets que equilibra la velocidad de codificación contra la eficiencia de compresión.
Presets del más rápido al más lento:
ultrafast → superfast → veryfast → faster → fast → medium (predeterminado) → slow → slower → veryslow
Codificar con un preset especificado:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a copy output.mp4
Para comparar múltiples presets en la misma entrada:
for preset in fast medium slow veryslow; do
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset $preset -c:a copy output_${preset}.mp4
done
Recomendaciones prácticas: usa medium (predeterminado) o slow para la mayoría de las tareas de compresión; usa veryslow cuando quieras el archivo más pequeño posible y tengas tiempo de sobra; usa fast o veryfast para procesamiento en tiempo real o lotes grandes.
Configuraciones óptimas por caso de uso
Comandos listos para usar para los escenarios más comunes.
| Caso de uso | Códec | CRF | Preset | Notas |
|---|---|---|---|---|
| Entrega web | H.264 | 23 | slow | Máxima compatibilidad |
| Redes sociales (X / Instagram) | H.264 | 28–30 | medium | Prioridad tamaño |
| Archivado a largo plazo | H.265 | 24 | veryslow | Mejor ratio para almacenamiento |
| Reproducción móvil | H.264 | 26 | fast | Combinar con escalado de resolución |
Entrega web (compatibilidad primero):
ffmpeg -i input.mp4 \
-c:v libx264 -crf 23 -preset slow \
-c:a aac -b:a 128k \
-movflags +faststart \
output_web.mp4
-movflags +faststart mueve el átomo moov al inicio del archivo, permitiendo que la reproducción comience antes de que se complete la descarga. Esta bandera es imprescindible para video web.
Redes sociales (tamaño de archivo mínimo):
ffmpeg -i input.mp4 \
-c:v libx264 -crf 30 -preset medium \
-vf "scale=1280:-2" \
-c:a aac -b:a 96k \
output_sns.mp4
Archivado a largo plazo (H.265, compresión máxima):
ffmpeg -i input.mp4 \
-c:v libx265 -crf 24 -preset veryslow \
-c:a aac -b:a 128k \
output_archive.mp4
Reproducción móvil (reducir escala + ligero):
ffmpeg -i input.mp4 \
-c:v libx264 -crf 26 -preset fast \
-vf "scale=720:-2" \
-c:a aac -b:a 96k \
output_mobile.mp4
Errores comunes y cómo solucionarlos
Error 1: El archivo se hizo más grande después de la compresión
Si el video fuente ya estaba comprimido, recodificar puede en realidad aumentar el tamaño del archivo debido a la sobrecarga de codificación. Solución: copia los flujos del video con -c:v copy, o establece un bitrate objetivo por debajo del bitrate original del fuente.
Error 2: Fotogramas verdes o negros en la salida
Esto generalmente es un problema de compatibilidad de formato de píxeles. Añadir -pix_fmt yuv420p lo resuelve en la mayoría de los casos:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -pix_fmt yuv420p -c:a copy output.mp4
Error 3: La calidad del audio se ha degradado
Error 4: La codificación es extremadamente lenta
Combinar el preset veryslow, resolución 4K+ y H.265 puede resultar en tiempos de codificación medidos en horas. La codificación GPU reduce esto drásticamente:
# GPU NVIDIA (NVENC)
ffmpeg -i input.mp4 -c:v h264_nvenc -cq 23 -b:v 0 -c:a copy output.mp4
Ten en cuenta que los codificadores GPU son generalmente menos eficientes que los codificadores CPU con configuraciones equivalentes — obtendrás archivos más grandes o menor calidad con los mismos valores nominales. Usa la codificación GPU cuando la velocidad sea la prioridad.
Conclusión
Elegir el enfoque de compresión correcto marca una diferencia real en los resultados.
- Para compresión priorizando calidad, usa CRF — elige un valor y deja que FFmpeg se encargue del resto
- Para requisitos estrictos de tamaño, usa 2 pasadas — más efectivo para broadcast y entrega
- Ajusta velocidad vs. eficiencia con presets —
slowyveryslowmejoran significativamente los resultados - No olvides
-movflags +faststartpara video web — es fácil de pasar por alto e importante
Si eres nuevo en FFmpeg y quieres ponerte al día con lo básico primero, consulta Tutorial de Uso de FFmpeg. Si necesitas cortar material sin ninguna pérdida de calidad, Corte Sin Pérdida con FFmpeg cubre ese flujo de trabajo.
¿No quieres escribir estos comandos CRF cada vez? ffmpeg-quick te permite ejecutar npx ffmpeg-quick compress input.mp4 y obtener valores predeterminados sensatos al instante. Usa --dry-run para ver el comando FFmpeg real.