Para comprimir un video con FFmpeg, usa el modo CRF: ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a copy output.mp4. CRF 23 con el preset slow te da un buen equilibrio entre calidad y tamaño para la mayoría de los casos, sin necesidad de cálculos.
Pero CRF no es la única herramienta disponible. Esta guía cubre CRF, bitrate objetivo, codificación de 2 pasadas y presets — los cuatro enfoques principales de compresión de video. Después de hacer bastantes pruebas con material real para 32blog, puedo decirte que la diferencia entre "comprimir sin pensar" y "comprimir correctamente" puede significar un 60% de reducción en tamaño sin pérdida visual perceptible. Al final encontrarás comandos listos para copiar para 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 el que la guía oficial de codificación H.264 recomienda como modo principal de control de tasa.
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 -rc vbr -cq 23 -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. Para más detalles, consulta FFmpeg con aceleración GPU: NVENC, QSV y AMF comparados.
Si no quieres que tu máquina local esté ocupada con codificaciones veryslow o H.265, puedes delegar el trabajo a un servidor VPS dedicado a codificación. Subes el archivo, lanzas la codificación remotamente y descargas el resultado — tu equipo queda libre.
VPS en la nube de grado empresarial con centros de datos globales
- 13 centros de datos (EE.UU., Europa, Asia, Oriente Medio)
- Desde $4/mes por 1GB RAM — pago por uso
- Prueba gratuita de 30 días
Preguntas frecuentes
¿Cuál es el mejor valor CRF para FFmpeg?
No hay un valor único "mejor" — depende de tu contenido y objetivos. Para compresión de uso general, CRF 23 (H.264) o CRF 28 (H.265) son los valores predeterminados y un buen punto de partida. Las grabaciones de pantalla y animaciones se benefician de CRF 18–20, mientras que las subidas a redes sociales pueden llegar hasta CRF 30–35 sin degradación perceptible.
¿CRF o bitrate: cuál debería usar?
Usa CRF cuando la calidad importa y el tamaño del archivo es flexible. Usa bitrate objetivo cuando tengas un límite estricto de tamaño (por ejemplo, "debe pesar menos de 25 MB para Discord"). CRF produce mejores resultados en la mayoría de las situaciones porque adapta la tasa de datos a la complejidad de la escena.
¿FFmpeg puede comprimir sin pérdida de calidad?
No con recodificación — cualquier codificación con pérdida introduce alguna reducción de calidad. Sin embargo, puedes usar -c:v copy para remuxear (cambiar el formato del contenedor) o recortar sin recodificar, lo que preserva la calidad original bit a bit. Para recortes específicamente, consulta Corte Sin Pérdida con FFmpeg.
¿Cómo comprimo un video a un tamaño específico?
Calcula el bitrate objetivo: tamaño_objetivo_en_bits ÷ duración_en_segundos = bitrate_objetivo. Luego usa codificación de 2 pasadas con ese bitrate. Por ejemplo, para alcanzar 50 MB en un video de 120 segundos: 50 × 8 × 1024 ÷ 120 ≈ 3.413 kbps — usa -b:v 3400k con 2 pasadas.
¿H.264 o H.265: qué códec elijo para compresión?
H.265 produce aproximadamente la mitad del tamaño a la misma calidad visual, pero codifica 2–5× más lento y tiene menor compatibilidad. Usa H.264 cuando necesites máximo soporte de dispositivos (entrega web, redes sociales). Usa H.265 cuando el ahorro de almacenamiento importa más que la compatibilidad (archivado, servidores multimedia personales). Para una comparación completa incluyendo AV1, consulta AV1 vs H.265 vs H.264.
¿La codificación GPU es mejor que la CPU?
La codificación GPU (NVENC, QSV, AMF) es dramáticamente más rápida — a menudo 5–10× — pero produce archivos más grandes a calidad visual equivalente. Es ideal para codificación en tiempo real, procesamiento por lotes, o situaciones donde el tiempo importa más que el tamaño. La codificación CPU con presets slow o veryslow sigue ganando en eficiencia de compresión.
¿Qué hace -movflags +faststart?
Mueve los metadatos del MP4 (átomo moov) del final del archivo al principio. Esto permite que los navegadores y reproductores comiencen la reproducción antes de que se descargue el archivo completo. Siempre inclúyelo para video destinado a la web.
¿Cómo verifico el bitrate actual de un video antes de comprimir?
Usa ffprobe -v quiet -show_entries format=bit_rate -of default=noprint_wrappers=1 input.mp4. Esto muestra el bitrate general. Conocer el bitrate de origen te ayuda a elegir un objetivo que realmente reduzca el tamaño en lugar de aumentarlo accidentalmente.
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.
Artículos relacionados: