FFmpeg tiene fama de ser intimidante. La sintaxis de los comandos es inusual, hay miles de opciones y los mensajes de error no siempre ayudan. Pero la verdad es que la mayoría de lo que la gente realmente necesita hacer con FFmpeg se reduce a una docena de comandos.
Esta guía cubre todo, desde operaciones básicas hasta técnicas avanzadas, con cada comando probado y listo para copiar y pegar.
Lo que aprenderás
- Cómo se estructuran los comandos de FFmpeg y cómo leer las opciones
- Conversión de video, extracción de audio, compresión, recorte y fusión
- Conversión a GIF, extracción de miniaturas y creación de video a partir de imágenes
- Marcas de agua, subtítulos, recorte de área y reducción de ruido
- Inspección detallada de archivos multimedia con ffprobe
Cómo se estructuran los comandos de FFmpeg
Cada comando de FFmpeg sigue este patrón:
ffmpeg [opciones de entrada] -i archivo_entrada [opciones de salida] archivo_salida
La posición de las opciones importa. Las opciones colocadas antes de -i se aplican a la entrada. Las opciones colocadas después de -i se aplican a la salida. Esto es diferente a la mayoría de las herramientas CLI y confunde a muchos principiantes.
Algunos ejemplos:
# El comando más simple posible — solo convierte el formato
ffmpeg -i input.mp4 output.avi
# Opción de entrada: buscar una posición específica antes de leer
ffmpeg -ss 00:01:00 -i input.mp4 output_trimmed.mp4
# Opción de salida: establecer el bitrate de la salida
ffmpeg -i input.mp4 -b:v 1M output.mp4
Referencia rápida de opciones comunes:
| Opción | Significado | Ejemplo |
|---|---|---|
-c:v | Códec de video | -c:v libx264 |
-c:a | Códec de audio | -c:a aac |
-b:v | Bitrate de video | -b:v 2M |
-b:a | Bitrate de audio | -b:a 192k |
-r | Tasa de fotogramas | -r 30 |
-s | Resolución | -s 1920x1080 |
-ss | Posición de inicio | -ss 00:01:30 |
-t | Duración en segundos | -t 60 |
-to | Marca de tiempo final | -to 00:05:00 |
-vn | Sin video | Para extracción solo de audio |
-an | Sin audio | Para salida de video sin sonido |
Convertir formatos de video
Convertir MP4 a AVI (o cualquier otro formato)
ffmpeg -i input.mp4 output.avi
FFmpeg lee las extensiones de archivo y elige automáticamente los códecs apropiados. Para cambios simples de formato, esto es todo lo que necesitas.
Cambiar el contenedor sin recodificar
ffmpeg -i input.mp4 -c copy output.mkv
-c copy le dice a FFmpeg que copie todos los flujos tal cual, sin recodificar. Esto es instantáneo y sin pérdida — solo cambia el formato del contenedor.
Convertir MOV de iPhone a MP4
ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4
Un caso de uso común al compartir videos del iPhone con personas que no usan dispositivos Apple.
Extraer y convertir audio
Extraer audio de un archivo de video
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
Qué hace cada opción:
-vn= sin video (omitir el flujo de video)-c:a libmp3lame= codificar audio como MP3-q:a 2= calidad de audio (0 es la mejor, 9 es la peor; 2 es excelente)
Para mayor calidad, usa AAC en su lugar:
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.m4a
Convertir entre formatos de audio
# WAV a MP3
ffmpeg -i input.wav -c:a libmp3lame -b:a 320k output.mp3
# MP3 a FLAC (sin pérdida)
ffmpeg -i input.mp3 -c:a flac output.flac
# Reducir el bitrate de audio (archivo más pequeño)
ffmpeg -i input.mp3 -b:a 128k output_compressed.mp3
Comprimir video
Reducir el tamaño del archivo preservando la calidad es probablemente el caso de uso más común de FFmpeg.
Si no estás seguro de qué códec usar, consulta Comparativa H.264 vs H.265 vs AV1 para un desglose detallado.
Comprimir con H.265 (HEVC)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac output.mp4
El valor -crf (Factor de Tasa Constante) controla el equilibrio calidad-compresión:
| Rango CRF | Calidad | Tamaño de archivo |
|---|---|---|
| Menor de 18 | Casi sin pérdida | Grande |
| 18–23 | Alta calidad (uso típico) | Mediano |
| 24–28 | Aceptable (entrega web) | Pequeño |
| Mayor de 28 | Degradación visible | Muy pequeño |
H.265 ofrece aproximadamente la misma calidad que H.264 con la mitad del tamaño de archivo. La contrapartida es un tiempo de codificación más largo.
Comprimir con H.264
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
H.264 tiene una compatibilidad de dispositivos mucho más amplia que H.265. La opción -preset te permite intercambiar velocidad por tamaño de archivo:
| Preset | Velocidad de codificación | Tamaño de archivo |
|---|---|---|
| ultrafast | Muy rápido | Más grande |
| fast | Rápido | Grande |
| medium | Equilibrado (predeterminado) | Mediano |
| slow | Lento | Más pequeño |
| veryslow | Más lento | El más pequeño |
# Prioridad de velocidad (procesando muchos videos)
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 output.mp4
# Prioridad de calidad (archivado)
ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 output.mp4
Para una inmersión más profunda en el ajuste de CRF y la selección de códec, consulta la Guía de Compresión de Video con FFmpeg. Para acelerar drásticamente la codificación con tu GPU, consulta la Guía de Codificación GPU con FFmpeg.
Recortar, cortar y fusionar
Cortar un rango de tiempo específico
# Extraer 3 minutos 30 segundos empezando en 1:30 (= 1:30 a 5:00)
ffmpeg -ss 00:01:30 -t 00:03:30 -i input.mp4 -c copy output_clip.mp4
-ss 00:01:30= iniciar en 1 minuto 30 segundos-t 00:03:30= extraer 3 minutos 30 segundos-c copy= sin recodificación (instantáneo, sin pérdida)
Colocar -ss antes de -i usa la búsqueda de entrada, que salta directamente a la posición sin decodificar todo lo anterior. Esto hace que el recorte sea casi instantáneo incluso para videos muy largos.
También puedes especificar -t en segundos:
# Extraer 60 segundos empezando en 1:30
ffmpeg -ss 00:01:30 -t 60 -i input.mp4 -c copy output_clip.mp4
Si prefieres especificar un tiempo final absoluto, coloca tanto -ss como -to después de -i:
# De 1:30 a 5:00 (-to usa marcas de tiempo absolutas de entrada)
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:05:00 -c copy output_clip.mp4
Esto es más lento que la búsqueda de entrada (FFmpeg decodifica desde el inicio) pero -to se refiere de forma fiable a la posición absoluta en el archivo de entrada.
Concatenar videos usando una lista de archivos
Para videos con el mismo códec y resolución, el método de lista de archivos es el más rápido.
Crea un archivo de texto listando todos los videos a unir (filelist.txt):
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
Luego ejecuta:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output_merged.mp4
Fusionar videos con diferentes formatos o resoluciones
Cuando combinas videos con propiedades diferentes, se requiere recodificación:
ffmpeg -i video1.mp4 -i video2.mp4 \
-filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output_merged.mp4
Cambiar resolución y tasa de fotogramas
Redimensionar video
# Redimensionar a 1920x1080
ffmpeg -i input.mp4 -s 1920x1080 output.mp4
# Redimensionar ancho a 1280px, mantener proporción
ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4
# Redimensionar alto a 720px, mantener proporción
ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4
Usar -2 para una dimensión le dice a FFmpeg que calcule esa dimensión automáticamente mientras preserva la relación de aspecto. El -2 asegura que el valor se redondee al número par más cercano, lo cual es requerido por la mayoría de los códecs.
Cambiar tasa de fotogramas
# Convertir a 30fps
ffmpeg -i input.mp4 -r 30 output.mp4
# Convertir a 60fps
ffmpeg -i input.mp4 -r 60 output.mp4
Reducir la tasa de fotogramas (por ejemplo, de 60fps a 30fps) reduce significativamente el tamaño del archivo con una pérdida de calidad mínima percibida para la mayoría del contenido.
Conversión a GIF, miniaturas e imágenes a video
Convertir video a GIF
Una conversión simple produce archivos grandes con mala calidad de color. La optimización de paleta mejora drásticamente ambos aspectos:
# Paso 1: Generar una paleta optimizada
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-2:flags=lanczos,palettegen" palette.png
# Paso 2: Convertir usando la paleta
ffmpeg -i input.mp4 -i palette.png \
-lavfi "fps=15,scale=480:-2:flags=lanczos[x];[x][1:v]paletteuse" output.gif
Qué hace cada parte:
fps=15= reducir a 15 fotogramas por segundo (suficiente para GIFs)scale=480:-2= redimensionar a 480px de anchoflags=lanczos= algoritmo de redimensionamiento de alta calidadpalettegen/paletteuse= generar y aplicar una paleta de colores optimizada
También puedes hacerlo en un solo comando:
ffmpeg -i input.mp4 \
-lavfi "fps=15,scale=480:-2:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
output.gif
Extraer miniaturas de un video
# Extraer un solo fotograma en la marca de 10 segundos
ffmpeg -ss 10 -i input.mp4 -frames:v 1 thumbnail.jpg
# Extraer fotogramas a intervalos regulares (cada 10 segundos)
ffmpeg -i input.mp4 -vf "fps=1/10" thumbnail_%03d.jpg
# Extraer solo los fotogramas clave (más rápido)
ffmpeg -skip_frame nokey -i input.mp4 -fps_mode vfr keyframe_%03d.jpg
-frames:v 1 significa "solo generar 1 fotograma de video." fps=1/10 significa "1 fotograma cada 10 segundos."
Crear video a partir de una secuencia de imágenes
# De image001.png, image002.png, image003.png...
ffmpeg -framerate 24 -i image%03d.png -c:v libx264 -pix_fmt yuv420p output.mp4
-framerate 24= 24 fotogramas por segundoimage%03d.png= secuencia con relleno de ceros de 3 dígitos (001, 002, 003...)-pix_fmt yuv420p= modo de compatibilidad para la mayoría de reproductores
Útil para videos time-lapse y secuencias animadas.
Crear un video en bucle a partir de una sola imagen
ffmpeg -loop 1 -i input.jpg -t 10 -c:v libx264 -pix_fmt yuv420p output.mp4
Útil para miniaturas de redes sociales y fondos de presentaciones.
Marcas de agua, subtítulos, recorte y reducción de ruido
Añadir una marca de agua (superposición de imagen)
# Colocar un logo en la esquina inferior derecha (margen de 10px)
ffmpeg -i input.mp4 -i logo.png \
-filter_complex "overlay=W-w-10:H-h-10" output.mp4
Las coordenadas del filtro overlay funcionan así:
W/H= ancho / alto del video de entradaw/h= ancho / alto de la imagen superpuestaW-w-10= posición desde el borde derecho menos el ancho del logo menos 10px
Patrones comunes de ubicación:
| Posición | Valor de overlay |
|---|---|
| Superior izquierda | overlay=10:10 |
| Superior derecha | overlay=W-w-10:10 |
| Inferior izquierda | overlay=10:H-h-10 |
| Inferior derecha | overlay=W-w-10:H-h-10 |
| Centro | overlay=(W-w)/2:(H-h)/2 |
Dibujar texto sobre el video
ffmpeg -i input.mp4 \
-vf "drawtext=text='Sample':fontsize=24:fontcolor=white:x=10:y=10" \
output.mp4
Subtítulos suaves (activables en el reproductor)
ffmpeg -i input.mp4 -i subtitle.srt -c:v copy -c:a copy -c:s mov_text output.mp4
Los datos de subtítulos se almacenan dentro del archivo MP4 pero no se graban en el video. Los reproductores que lo soportan permiten a los usuarios activar o desactivar los subtítulos.
Subtítulos grabados (incrustados en el video)
ffmpeg -i input.mp4 -vf subtitles=subtitle.srt output.mp4
Esto renderiza permanentemente los subtítulos sobre los fotogramas del video. Siempre serán visibles independientemente del reproductor, pero no se pueden eliminar después.
Para la generación automática de subtítulos con IA, consulta Generar Subtítulos Automáticamente con FFmpeg y Whisper.
Recortar (cortar una región)
# Recortar 640x480 desde el centro
ffmpeg -i input.mp4 -vf "crop=640:480" output.mp4
# Recortar desde la esquina superior izquierda
ffmpeg -i input.mp4 -vf "crop=640:480:0:0" output.mp4
# Detectar barras negras automáticamente
ffmpeg -i input.mp4 -vf "cropdetect" -f null - 2>&1 | grep cropdetect
La sintaxis del filtro crop es crop=ancho:alto:x:y. Omitir x e y recorta desde el centro.
Para eliminar barras negras, usa un proceso de dos pasos. Primero detecta los valores de recorte, luego aplícalos:
# Ejemplo de salida de cropdetect: crop=1920:800:0:140
ffmpeg -i input.mp4 -vf "crop=1920:800:0:140" output.mp4
Reducción de ruido
Para ruido de video, usa el filtro nlmeans (Medias No Locales):
ffmpeg -i input.mp4 -vf "nlmeans=s=3.5:p=7:r=15" output.mp4
s= intensidad de reducción de ruido (mayor = más fuerte; predeterminado 1.0)p= tamaño de parche (número impar; predeterminado 7)r= radio de búsqueda (número impar; predeterminado 15)
Para ruido de audio, usa el filtro arnndn (Red Neuronal Recurrente). El archivo del modelo debe descargarse por separado:
# Descargar el modelo (configuración única)
curl -LO https://github.com/richardpl/arnndn-models/raw/master/bd.rnnn
# Ejecutar la reducción de ruido
ffmpeg -i input.mp4 -af "arnndn=m=bd.rnnn" output.mp4
Los archivos de modelo están disponibles en el repositorio arnndn-models. bd.rnnn es un modelo de reducción de ruido de propósito general que funciona bien para el ruido de fondo en grabaciones de reuniones y podcasts.
Inspeccionar multimedia con ffprobe
ffprobe es una herramienta de análisis multimedia instalada junto con FFmpeg. Úsala para verificar códecs, resolución, bitrate y más antes de iniciar una conversión.
Mostrar información del archivo
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
-v quiet= suprimir el banner de FFmpeg-print_format json= salida en formato JSON-show_format= información del contenedor (formato, duración, bitrate)-show_streams= información de flujos (códec, resolución, fps)
Consultas comunes con ffprobe
# Mostrar solo la resolución
ffprobe -v error -select_streams v:0 \
-show_entries stream=width,height -of csv=p=0 input.mp4
# Mostrar solo la duración (segundos)
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
# Mostrar el nombre del códec
ffprobe -v error -select_streams v:0 \
-show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 input.mp4
Crear el hábito de verificar el archivo fuente antes de codificar te ayuda a evitar resultados de conversión inesperados.
Preguntas frecuentes
¿Cómo ajusto el volumen del audio?
# Duplicar el volumen
ffmpeg -i input.mp4 -af volume=2.0 output.mp4
# Reducir el volumen a la mitad
ffmpeg -i input.mp4 -af volume=0.5 output.mp4
¿Cómo roto un video?
# Rotar 90 grados en sentido horario
ffmpeg -i input.mp4 -vf transpose=1 output.mp4
# Rotar 180 grados
ffmpeg -i input.mp4 -vf "hflip,vflip" output.mp4
¿Cómo cambio la velocidad de reproducción?
# Velocidad 2x (video y audio)
ffmpeg -i input.mp4 -vf setpts=0.5*PTS -af atempo=2.0 output.mp4
# Velocidad 0.5x (cámara lenta)
ffmpeg -i input.mp4 -vf setpts=2.0*PTS -af atempo=0.5 output.mp4
¿Cómo fuerzo la sobreescritura de un archivo de salida existente?
ffmpeg -y -i input.mp4 output.mp4
La bandera -y omite la pregunta "el archivo ya existe, ¿sobreescribir?".
¿Qué hay del licenciamiento para proyectos comerciales?
Para detalles sobre GPL vs LGPL y qué incluir al redistribuir, consulta la Guía de Licencias Comerciales de FFmpeg.
Próximos pasos: Aprender FFmpeg
Una vez que hayas practicado con los comandos anteriores, así es como puedes profundizar.
Documentación oficial
Empieza aquí. Está en inglés y es muy completa.
- Documentación de FFmpeg: https://ffmpeg.org/documentation.html
- Wiki de FFmpeg: https://trac.ffmpeg.org/wiki — artículos prácticos de "cómo hacer"
- Páginas man: ejecuta
man ffmpegen Linux/Mac para la referencia completa de comandos
Ruta de aprendizaje recomendada
FFmpeg recompensa la práctica sobre la lectura pasiva. Una progresión estructurada:
- Comandos básicos (este artículo) — conversión de formatos, extracción de audio, recorte
- Filtros — empieza con
scaleycrop, luego avanza afilter_complex. La Guía de Compresión de Video cubre el ajuste de CRF en profundidad - Parámetros de codificación — CRF vs. control de bitrate, ajuste específico de códec (x264, x265, SVT-AV1). Consulta la Guía de Codificación GPU para aceleración por hardware
- Automatización — Integración con Python para procesamiento por lotes, servidor de codificación VPS para descarga remota
Recursos de la comunidad
- Stack Overflow — la etiqueta
[ffmpeg]tiene miles de preguntas respondidas - Reddit r/ffmpeg — discusión práctica, buena para preguntas sobre casos de uso específicos
- Lista de correo de FFmpeg (
ffmpeg-user@ffmpeg.org) — a veces los desarrolladores responden directamente
Conclusión
Aquí tienes una tabla de referencia rápida para las operaciones más comunes:
| Tarea | Opciones clave |
|---|---|
| Conversión de formato | ffmpeg -i input.mp4 output.avi |
| Remux sin pérdida | -c copy |
| Extracción de audio | -vn -c:a libmp3lame |
| Compresión H.265 | -c:v libx265 -crf 28 |
| Recortar un clip | -ss inicio -to fin -c copy |
| Fusionar clips | -f concat -i filelist.txt |
| Redimensionar | -vf scale=1280:-2 |
| Conversión a GIF | palettegen + paletteuse |
| Extracción de miniatura | -frames:v 1 |
| Marca de agua | -filter_complex overlay=... |
| Grabar subtítulos | -vf subtitles=subtitle.srt |
| Recortar área | -vf crop=ancho:alto:x:y |
| Reducción de ruido | -vf nlmeans / -af arnndn |
La mejor forma de aprender FFmpeg es empezar con una tarea concreta — por ejemplo, comprimir un video o extraer audio — y luego ir explorando gradualmente desde ahí.
Para automatizar tareas repetitivas, la integración con Python es el camino a seguir:
- Automatización de FFmpeg con Python: Scripts de Procesamiento por Lotes — Crea scripts para procesar archivos de video en masa