Cómo convertir el formato de video con FFmpeg paso a paso
Guía completa para convertir formatos de video con FFmpeg — MP4, MOV, AVI, WebM, MKV. Cubre selección de códec, control de calidad y scripts de conversión por lotes.

La conversión de formatos de video es una de las tareas más comunes en el procesamiento de medios. Ya sea que necesites MP4 para la web, MOV para flujos de trabajo de Apple o WebM para proyectos de código abierto, FFmpeg los maneja todos desde la línea de comandos. Esta guía cubre desde conversiones básicas hasta selección avanzada de códecs y procesamiento por lotes.
Conversión básica de formato
La conversión más sencilla solo cambia el formato contenedor. FFmpeg detecta el formato de salida a partir de la extensión del archivo:
# Convertir MKV a MP4
ffmpeg -i input.mkv output.mp4
# Convertir AVI a MOV
ffmpeg -i input.avi output.mov
# Convertir MP4 a WebM
ffmpeg -i input.mp4 output.webm
Cuando no especificas códecs, FFmpeg elige los predeterminados para el contenedor de destino. Esto funciona pero no te da control sobre la calidad o compatibilidad.
Contenedores vs. códecs
Antes de profundizar, es útil entender la diferencia:
- Contenedor (MP4, MKV, MOV, AVI, WebM) — el formato de archivo que contiene video, audio y metadatos
- Códec de video (H.264, H.265, VP9, AV1) — cómo se comprime el video
- Códec de audio (AAC, Opus, MP3, FLAC) — cómo se comprime el audio
Un contenedor es como una caja; los códecs son lo que hay dentro. El mismo códec de video puede vivir en distintos contenedores.
| Contenedor | Códecs de video comunes | Códecs de audio comunes | Ideal para |
|---|---|---|---|
| MP4 | H.264, H.265, AV1 | AAC, MP3 | Web, móvil, uso general |
| MKV | Cualquiera | Cualquiera | Archivado, medios multi-pista |
| MOV | H.264, H.265, ProRes | AAC, PCM | Ecosistema Apple, edición |
| WebM | VP8, VP9, AV1 | Vorbis, Opus | Web (código abierto) |
| AVI | H.264, MPEG-4 | MP3, PCM | Compatibilidad con versiones anteriores |
Guía de selección de códecs
H.264 — Máxima compatibilidad
H.264 (libx264) se reproduce en prácticamente cualquier dispositivo y navegador. Es la opción más segura para distribución general.
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
H.265 (HEVC) — Mejor compresión
H.265 (libx265) entrega archivos ~50% más pequeños con la misma calidad. El soporte está creciendo pero aún no es universal.
ffmpeg -i input.avi -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4
Nota: H.265 usa una escala CRF diferente. CRF 28 en H.265 es aproximadamente equivalente a CRF 23 en H.264.
VP9 — Código abierto, amigable para la web
VP9 es el códec libre de regalías de Google. Se combina con WebM y es compatible con todos los navegadores modernos.
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm
El -b:v 0 indica a FFmpeg que use el modo CRF puro (sin límite de tasa de bits).
AV1 — La siguiente generación
AV1 ofrece la mejor tasa de compresión, pero la codificación es muy lenta. Úsalo cuando tengas tiempo y quieras los archivos más pequeños.
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -cpu-used 4 -c:a libopus -b:a 128k output.mkv
-cpu-used 4 acelera significativamente la codificación (rango 0-8; mayor = más rápido pero menor calidad).
Comparación de códecs
| Códec | Compresión | Velocidad | Soporte en navegadores | Licencia |
|---|---|---|---|---|
| H.264 | Buena | Rápida | Universal | Con licencia |
| H.265 | Mejor | Media | Creciente | Con licencia |
| VP9 | Mejor | Lenta | Todos los modernos | Sin regalías |
| AV1 | La mejor | Muy lenta | Creciente | Sin regalías |
Combinación de códecs de audio
Cada contenedor funciona mejor con ciertos códecs de audio:
# MP4 + AAC (combinación más común)
ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac -b:a 192k output.mp4
# WebM + Opus (mejor calidad por tasa de bits)
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm
# MKV + FLAC (audio sin pérdida)
ffmpeg -i input.mov -c:v libx264 -crf 18 -c:a flac output.mkv
# MOV + PCM (sin comprimir, para edición)
ffmpeg -i input.mp4 -c:v copy -c:a pcm_s16le output.mov
| Códec de audio | Calidad | Tamaño del archivo | Mejor contenedor |
|---|---|---|---|
| AAC | Buena | Pequeño | MP4, MOV |
| Opus | Excelente | El más pequeño | WebM, MKV |
| MP3 | Buena | Pequeño | MP4, AVI, MKV |
| FLAC | Sin pérdida | Grande | MKV |
| PCM | Sin pérdida | Muy grande | MOV, WAV |
Copia de flujo — Conversión instantánea
Cuando los códecs del origen son compatibles con el contenedor de destino, puedes copiar los flujos sin recodificar. Esto es instantáneo y sin pérdida:
# Remuxar MKV a MP4 sin recodificar
ffmpeg -i input.mkv -c copy output.mp4
# Copiar video, recodificar solo el audio
ffmpeg -i input.mkv -c:v copy -c:a aac -b:a 128k output.mp4
La copia de flujo solo funciona cuando los códecs son compatibles con el contenedor de destino. Por ejemplo, no puedes poner video VP9 en un contenedor AVI.
Calidad vs. tamaño de archivo
Modo CRF — El mejor para archivos locales
CRF (Factor de Tasa Constante) da la mejor relación calidad/tamaño. El codificador ajusta la tasa de bits escena por escena. Para profundizar en las técnicas de compresión, consulta nuestra guía de compresión de video.
# Alta calidad (archivo más grande)
ffmpeg -i input.avi -c:v libx264 -crf 18 -c:a aac -b:a 192k output.mp4
# Calidad equilibrada
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
# Archivo más pequeño (menor calidad)
ffmpeg -i input.avi -c:v libx264 -crf 28 -c:a aac -b:a 96k output.mp4
Codificación en dos pasadas — Lo mejor para tamaño de archivo objetivo
Cuando necesitas un tamaño de archivo específico, usa la codificación en dos pasadas:
# Pasada 1: analizar
ffmpeg -i input.avi -c:v libx264 -b:v 2M -pass 1 -an -f null /dev/null
# Pasada 2: codificar
ffmpeg -i input.avi -c:v libx264 -b:v 2M -pass 2 -c:a aac -b:a 128k output.mp4
Presets — Velocidad vs. compresión
Los presets más lentos producen archivos más pequeños con la misma calidad:
# Codificación rápida, archivo más grande
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset fast -c:a aac output.mp4
# Codificación lenta, archivo más pequeño
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset slow -c:a aac output.mp4
Convertir con cambios de resolución
Combina la conversión de formato con el escalado:
# Convertir a MP4 720p
ffmpeg -i input.mkv -c:v libx264 -crf 23 -vf "scale=-2:720" -c:a aac -b:a 128k output.mp4
# Convertir a WebM 1080p
ffmpeg -i input.avi -c:v libvpx-vp9 -crf 30 -b:v 0 -vf "scale=-2:1080" -c:a libopus output.webm
Scripts de conversión por lotes
Convertir todos los archivos en un directorio
# Convertir todos los archivos AVI a MP4
for f in *.avi; do
ffmpeg -i "$f" -c:v libx264 -crf 23 -c:a aac -b:a 128k "${f%.avi}.mp4"
done
# Convertir todos los archivos MKV a MP4 (copia de flujo si es posible)
for f in *.mkv; do
ffmpeg -i "$f" -c copy "${f%.mkv}.mp4"
done
Convertir con calidad personalizada por formato
#!/bin/bash
# Convertir por lotes a múltiples formatos
INPUT="input.mp4"
# MP4 optimizado para la web
ffmpeg -i "$INPUT" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart web.mp4
# Archivo MKV de alta calidad
ffmpeg -i "$INPUT" -c:v libx265 -crf 22 -preset slow -c:a flac archive.mkv
# WebM para alojamiento de código abierto
ffmpeg -i "$INPUT" -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k web.webm
Conversión recursiva
# Buscar y convertir todos los archivos AVI de forma recursiva
find . -name "*.avi" -exec sh -c '
ffmpeg -i "$1" -c:v libx264 -crf 23 -c:a aac "${1%.avi}.mp4"
' _ {} \;
Optimización para la web — faststart
Para archivos MP4 servidos en la web, siempre agrega -movflags +faststart. Esto mueve los metadatos al inicio del archivo para que la reproducción pueda comenzar antes de que se complete la descarga:
ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac -movflags +faststart output.mp4
Recetas de conversión comunes
Aquí están los comandos listos para usar en las conversiones más frecuentes:
# MOV (iPhone) a MP4 para compartir
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4
# AVI a MP4 (recodificación)
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
# MP4 a WebM para incrustar en la web
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm
# MKV a MP4 (remux sin pérdida)
ffmpeg -i input.mkv -c copy -movflags +faststart output.mp4
# Cualquier formato a GIF (clip corto)
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" -t 5 output.gif
# MP4 a HLS para streaming
ffmpeg -i input.mp4 -c copy -hls_time 10 -hls_list_size 0 output.m3u8
Solución de problemas
Advertencias "Discarding packet" — El contenedor de origen tiene problemas de compatibilidad. Agrega -err_detect ignore_err para omitir paquetes corruptos.
Errores "Non-monotonous DTS" — Problemas de marca de tiempo en el origen. Corrígelos con:
ffmpeg -i input.mkv -fflags +genpts -c:v libx264 -crf 23 -c:a aac output.mp4
Códec no compatible con el contenedor — Estás intentando poner un códec incompatible en un contenedor (por ejemplo, VP9 en AVI). Cambia el contenedor o recodifica con un códec compatible.
El archivo de salida es más grande que el de entrada — Esto ocurre cuando se convierte de un códec más eficiente a uno menos eficiente, o cuando el origen estaba muy comprimido. Intenta reducir el valor CRF o usa un códec más eficiente.
Alternativa en la nube con FFHub
Convertir formatos de video localmente funciona bien para tareas puntuales, pero las conversiones por lotes pueden mantener tu máquina ocupada durante horas. FFHub te permite ejecutar comandos FFmpeg en la nube vía API — la misma sintaxis de FFmpeg, sin uso de CPU local.
Esto es especialmente útil cuando necesitas convertir grandes lotes de archivos, integrar la conversión de formatos en una aplicación web, o procesar videos en máquinas sin FFmpeg instalado.
Resumen
- Usa copia de flujo (
-c copy) cuando los códecs sean compatibles — es instantáneo - Elige H.264 + AAC en MP4 para máxima compatibilidad
- Elige VP9 + Opus en WebM para entrega web de código abierto
- Usa el modo CRF para codificación orientada a la calidad
- Agrega
-movflags +faststartpara archivos MP4 servidos en la web - Usa scripts por lotes para convertir directorios completos de una vez
Artículos relacionados
- Cómo comprimir video con FFmpeg - Reduce el tamaño del archivo con CRF, presets y escalado de resolución
- Cómo extraer audio de video con FFmpeg - Extrae pistas de audio de cualquier formato de video
- Mejores prácticas de compresión de video con FFmpeg - Estrategias de codificación avanzadas para calidad y tamaño óptimos