Comandos útiles para hacer casi cualquier cosa con ffmpeg

  • 30 Nov 2019
  • ffmpeg

FFmpeg es un potente programa capaz de editar audio y video desde la línea de comando. Este artículo no pretende más que reunir una solución a aquellas operaciones que se realizan más a menudo.

Convertir todos los archivos flac en mp3 de 192k

Crear un script bash con el siguiente contenido en el directorio que contenga los archivos que queremos convertir y ejecutarlo:

for i in *.flac ; do
  ffmpeg -i "$i" -b:a 192k "$(basename "${i/.flac}")".mp3;
  sleep 3;
done

Transcodificar un solo flujo de audio de un video (en este caso, a AAC)

ffmpeg -i input.eng.ita.mp4 \
-map 0:0 -map 0:1 -map 0:2 \
-c:v copy \
-c:a:0 copy \
-c:a:1 aac \
-metadata:s:a:0 language=eng \
-metadata:s:a:1  language=ita \
output.mp4
  • -map 0:0 seleccionar del primer archivo, el primer flujo
  • -c:a:0 copy el codec del flujo de audio de indice cero (el primero) quiero que lo copies
  • -metadata:s:a:0 language=eng el metadato del stream de audio de índice cero, idioma es inglés

Extraer un flujo de audio

ffmpeg -i input.mp4 -map 0:1 -c:a copy output.aac

Convertir audio 5.1 en stereo

ffmpeg -i input.mp4 -map 0:a:0 -c:a aac -af "pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR" output-stereo.aac

Extraer un flujo de audio a partir del segundo 10

ffmpeg -i input.mp4 -ss 00:00:10 -map 0:1 -c:a copy output.aac

Sincronizar audio

Muy útil cuando agregamos un flujo de audio a una película que no encaja perfectamente. En este caso se agrega el audio en italiano a partir del segundo 56.850 de input.mp4

ffmpeg -i input.mp4 \
-itsoffset 00:56.850 \
-i italiano.aac \
-map 0:0 \
-map 0:1 \
-map 1:0 \
-codec copy -async 1 \
output.mp4
  • -itsoffset 00:56.850 -i italiano.aac arrancá desde el segundo 56.850 del input anterior el segundo 0 (el inicio) del siguiente input

Agregar metadatos para el flujo de audio.

Los metadato de idioma de un canal de audio puede resultar muy útil cuando por ejemplo el video será cargado dentro Plex. De este modo, se podrá aprovechar el filtro por idioma en la librería de Plex.

-metadata:s:a:0 language=eng -metadata:s:a:1 language=ita

Concatenar o unir dos archivos de audio

Puede ocurrir que para crear un flujo de audio necesitemos unir dos o más archivos. Lo primero que hay que hacer, es crear un archivo de texto (en este caso lo llamaremos concat.txt) con la ruta de los archivos de audio a unir:

file 'start.m4a'
file 'italiano-end.m4a'

Luego, ejecutamos el siguiente comando:

ffmpeg -f concat -i concat.txt  -c copy italiano-unido.m4a

Eliminar capítulos y metadatos

ffmpeg -i italiano.m4a -map_metadata -1 -map_chapters -1 -acodec copy italiano-limpio.m4a

Copiar subtítulos

Si estamos trabajando con un video que incluye los subtitulos y en medio de una transcodificación no quieren perderse, tendremos que, primero mapearlo.

-map 0:s

y luego, indicar el codec

-scodec mov_text 

Extraer subtítulos

Si en cambio, se prefiere extraer el subtítulo (subrip) y guardarlo como srt:

ffmpeg -i imput.mkv -map 0:s:0 output.eng.srt

Comprimi video con una calidad semejante a [YTS] [YIFY]

En este caso también cambiamos el codec el audio a AAC y conservamos los streams de subtítulos. Para los que tienen la suerte de tener una gráfica NVIDIA cambiar el codec de video de libx264 a h264_nvenc.

ffmpeg -i "input.mkv" \
-map 0:0 \
-map 0:a \
-map 0:s \
-c:v libx264 -crf 27 -x264-params cabac=1:ref=5:analyse=0x133:me=umh:subme=9:chroma-me=1:deadzone-inter=21:deadzone-intra=11:b-adapt=2:rc-lookahead=60:vbv-maxrate=10000:vbv-bufsize=10000:qpmax=69:bframes=5:b-adapt=2:direct=auto:crf-max=51:weightp=2:merange=24:chroma-qp-offset=-1:sync-lookahead=2:psy-rd=1.00,0.15:trellis=2:min-keyint=23:partitions=all \
-c:a aac \
-c:s mov_text \
-movflags +faststart -threads 0 -movflags use_metadata_tags \
"output.mp4"

Si el flujo de audio del video original es en formato 5.1 tendremos que indicar el número de canales luego de haber especificado el codec

-c:a aac -ac 6 \

Un ejemplo con 3 flujos de audio: el primero mono, el segundo stereo y el tercero 5.1:

-c:a:0 aac -ac:0 1 -c:a:1 aac -ac:1 2 -c:a:2 aac -ac:2 6 \

Modificar resolución o escala

Para modificar la resolución del flujo de video aplicamos el siguiente filtro:

-vf scale=320:240

El primer valor es el ancho y el segundo el alto. También puede especificarse un valor determinado en uno de ellos y -1 al otro para que sea calculado automáticamente sin modificar la relación de aspecto del original, por ejemplo, para convertir un flujo de video full HD (1080p) en HD (720p):

-vf scale=-1080:-1

Comprimir uno de 4K (2160p) con encoder Nvidia

ffmpeg -i input_video.mp4 -c:v hevc_nvenc -rc vbr_hq -cq 24 -c:a aac -b:a 192k output_video.mp4