32blogby StudioMitsu

Comandos FFmpeg: Guía práctica de lo básico a lo avanzado

Referencia de comandos FFmpeg: conversión de video, compresión, recorte, GIF, marcas de agua, reducción de ruido y más. Listo para copiar y pegar.

15 min read
Contenido

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:

bash
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:

bash
# 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ónSignificadoEjemplo
-c:vCódec de video-c:v libx264
-c:aCódec de audio-c:a aac
-b:vBitrate de video-b:v 2M
-b:aBitrate de audio-b:a 192k
-rTasa de fotogramas-r 30
-sResolución-s 1920x1080
-ssPosición de inicio-ss 00:01:30
-tDuración en segundos-t 60
-toMarca de tiempo final-to 00:05:00
-vnSin videoPara extracción solo de audio
-anSin audioPara salida de video sin sonido

Convertir formatos de video

Convertir MP4 a AVI (o cualquier otro formato)

bash
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

bash
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

bash
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

bash
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:

bash
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.m4a

Convertir entre formatos de audio

bash
# 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)

bash
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 CRFCalidadTamaño de archivo
Menor de 18Casi sin pérdidaGrande
18–23Alta calidad (uso típico)Mediano
24–28Aceptable (entrega web)Pequeño
Mayor de 28Degradación visibleMuy 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

bash
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:

PresetVelocidad de codificaciónTamaño de archivo
ultrafastMuy rápidoMás grande
fastRápidoGrande
mediumEquilibrado (predeterminado)Mediano
slowLentoMás pequeño
veryslowMás lentoEl más pequeño
bash
# 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

bash
# 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:

bash
# 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:

bash
# 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):

text
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'

Luego ejecuta:

bash
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:

bash
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

bash
# 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

bash
# 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:

bash
# 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 ancho
  • flags=lanczos = algoritmo de redimensionamiento de alta calidad
  • palettegen / paletteuse = generar y aplicar una paleta de colores optimizada

También puedes hacerlo en un solo comando:

bash
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

bash
# 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

bash
# 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 segundo
  • image%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

bash
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)

bash
# 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 entrada
  • w / h = ancho / alto de la imagen superpuesta
  • W-w-10 = posición desde el borde derecho menos el ancho del logo menos 10px

Patrones comunes de ubicación:

PosiciónValor de overlay
Superior izquierdaoverlay=10:10
Superior derechaoverlay=W-w-10:10
Inferior izquierdaoverlay=10:H-h-10
Inferior derechaoverlay=W-w-10:H-h-10
Centrooverlay=(W-w)/2:(H-h)/2

Dibujar texto sobre el video

bash
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)

bash
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)

bash
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)

bash
# 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:

bash
# 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):

bash
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:

bash
# 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

bash
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

bash
# 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?

bash
# 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?

bash
# 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?

bash
# 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?

bash
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.

Ruta de aprendizaje recomendada

FFmpeg recompensa la práctica sobre la lectura pasiva. Una progresión estructurada:

  1. Comandos básicos (este artículo) — conversión de formatos, extracción de audio, recorte
  2. Filtros — empieza con scale y crop, luego avanza a filter_complex. La Guía de Compresión de Video cubre el ajuste de CRF en profundidad
  3. 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
  4. AutomatizaciónIntegració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:

TareaOpciones clave
Conversión de formatoffmpeg -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 GIFpalettegen + 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: