Linux.Multimedia.FFMpeg.

Ismael Royano Gómez
Enredando con Linux.
7 min readMay 6, 2016

FFmpeg. Es un instrucción que se usa bajo la consola, diseñado para la manipulación de audio, vídeo e imágenes. Vamos a ver algunos ejemplos de manipulación:

#De avi a mpeg. 
ffmpeg -i film.avi film.mpeg
#De mkv a m2v.
ffmpeg -i film.mkv film.m2v

Vamos a introducir algunos parámetros y voy explicando un poco.

ffmpeg -i film.avi -vcodec libxvid -b:v 900k -s 640x352 -r 25 -aspect 16:9 -acodec libmp3lame -b:a 128k -ac 2 -ar 48000 film2.avi
  • -i. Input. Archivo de entrada con el que vamos a trabajar.
  • -vcodec. Codec que vamos a emplear para comprimir el vídeo.
  • -b:v ó -b. Bitrate o calidad de vídeo a la que vamos a comprimir. Para que nos hagamos una idea, una calidad en condiciones es poner el bitrate por encima siempre de 900k, y la capacidad estará en el entorno de 1 gb con un vídeo de una hora y media. En ausencia de este parámetro la calidad por defecto son 200k, es decir, bastante mala.

La segunda opción la pongo porque se usa en versiones antiguas de FFmpeg, no se que distribución se va a utilizar así que lo pongo como información.

  • -s. Es la resolución del vídeo resultante.
  • -r. Frames rate. Imágenes por segundo, normalmente son 25.
  • -aspect. Es la relación de aspecto del vídeo, por ejemplo 16:9, 4:3…etc.
  • -acodec. Es el codec audio que vamos a emplear en el vídeo resultante. En ausencia de esta parámetro lo comprime en mp2.
  • -b:a ó -ab. El bitrate o calidad de compresión de audio.
  • -ac. Canales de audio que vamos a emplear. (1=mono, 2=estéreo y 6=envolvente).
  • -ar. Frecuencia del audio en hz. La mejor calidad suele ser 44100 o 48000 hz.

Nota. En el parámetro -s, existen resoluciones predefinadas que podemos utilizar:

-‘sqcif’ 128x96.
-‘qcif’ 176x144.
-‘cif’ 352x288.
-‘4cif’ 704x576.
-‘16cif’ 1408x1152.
-‘qqvga’ 160x120.
-‘qvga’ 320x240.
-‘vga’ 640x480.
-‘svga’ 800x600.
-‘xga’ 1024x768.
-‘uxga’ 1600x1200.
-‘qxga’ 2048x1536.
-‘sxga’ 1280x1024.
-‘qsxga’ 2560x2048.
-‘hsxga’ 5120x4096.
-‘wvga’ 852x480.
-‘wxga’ 1366x768.
-‘wsxga’ 1600x1024.
-‘wuxga’ 1920x1200.
-‘woxga’ 2560x1600.
-‘wqsxga’ 3200x2048.
-‘wquxga’ 3840x2400.
-‘whsxga’ 6400x4096.
-‘whuxga’ 7680x4800.
-‘cga’ 320x200.
-‘ega’ 640x350.
-‘hd480’ 852x480.
-‘hd720’ 1280x720.
-‘hd1080’ 1920x1080.

¿De donde has sacado los codecs para los parámetros -vcodec y -acodec?

ffmpeg -codecs #Muestra la lista de codecs de audio/vídeo que puede soportar.ffmpeg -formats #Muestra la lista de formatos de salida que podemos utilizar.

También podemos indicarle al comando que algunos parámetros de configuración sean automáticos, veamos un ejemplo;

ffmpeg -i “video de entrada”.mkv -target pal-dvd salida.mpeg
  • “video de entrada”. El uso de las comillas es necesario cuando queremos indicarles nombres de archivos de mas de una palabra, ya sea en la entrada como en la salida.
  • -target. Con este complemento le damos valores automáticos al archivo de salida para convertirlo en un DVD-PAL. Existen otro tipos como es por ejemplo; vcd, svcd, dvd, dv, dv50, añadiendo delante pal- ntsc- ó film-. Este parámetro le da valores automáticos a los complementos…bitrate, codec, buffer size.

Vamos a darle la calidad de otra manera al archivo de salida.

ffmpeg -i entrada.avi -ar 22050 -qscale 4 -s 380x284 -f flv salida.flv
  • -qscale. Con este parámetro le indicamos un tipo de calidad mas escalado, es decir, a menor número mejor calidad.
  • -f. Este complemento se usa para forzar un formato al archivo de salida.

Vamos a extraer parte de un vídeo concreto.

ffmpeg -i entrada.avi -t 120 -ss 60 -sameq vídeo_salida.avi
  • -t. Es el tiempo que vamos a extraer del vídeo, en este caso 120 segundos.
  • -ss. Es el tiempo de donde vamos a comenzar a cortar el vídeo, en este caso a partir de el segundo 60. En estos dos últimos parámetros también se puede utilizar el formato hh:mm:ss.
  • -sameq. Este se usa para que el vídeo resultante tenga la misma calidad que el vídeo de origen.

Grabar nuestro escritorio.

ffmpeg -f x11grab -s 800x600 -r 25 -i :0.0 -sameq grabacion.avi 

Este instrucción graba nuestro escritorio. Debemos tener en cuenta una cosa, la resolución de nuestro escritorio, en mi caso tengo 1366x768, es decir, si quiero grabar todo el escritorio debería usar dicha resolución, que no queremos todo el escritorio pues es ir probando las resoluciones para ver el espacio que abarca.

Si tenemos un micrófono, podemos grabar el escritorio con el sonido, como haciendo un vídeo explicativo. Sería de la siguiente manera:

ffmpeg -f alsa -i pulse -f x11grab -s 1366x768 -r 25 -i :0.0 -sameq grabacion.avi

La única diferencia es que añadimos “-f alsa -i pulse” para capturar el audio del micrófono.

Crear un archivo de vídeo a partir de archivos VOB de un dvd.

  • Primero Juntar todos los vob en una archivo.
cat VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB>salida.mpeg
  • Segundo paso, comprimir el vídeo a la calidad que nos guste.
ffmpeg -i salida.mpeg -vcodec libxvid -b:v 1200k -s 640x352 -r 25 -aspect 16:9 -acodec libmp3lame -b:a 128k -ac 2 -ar 48000 salida.avi 

Esta es la calidad que yo suelo usar para crear un mpeg4 exceptuando que yo no suelo usar los parámetros -aspect y -r, pero tenía que nombrarlos ya que lo he explicado en el blog.

Extraer un audio de un vídeo.

ffmpeg -i film.avi -vn audio.mp3
  • -vn. Video no, simplemente le indica que solo quiere trabajar con el audio.

Unir varios vídeos en uno solo:

  • Lo primero que tenemos que hacer es pasarlo a un formato común, por ejemplo mpeg, sería….
ffmpeg -i video1.avi -sameq video1.mpeg

esto lo haríamos tantas veces como vídeos queramos unir.

  • El segundo paso es juntar todos los videos, sería de la siguiente manera;
cat video1.mpeg video2.mpeg…. >todojunto.mpeg

Unir un vídeo y un audio.

ffmpeg -i video.avi -i audio.wav -acodec libmp3lame -b:a 128k todojunto.avi

Lo que estamos haciendo es unir un vídeo y un audio que está en wav, pero al mismo tiempo lo estamos comprimiendo para que ocupe menos espacio la unión de los dos elementos. También podemos indicarles parámetros con el vídeo por si queremos recomprimir. Como es lógico deben durar el mismo tiempo el audio y el vídeo, no podemos juntar dos elementos que no tienen nada que ver, sería un resultado que no estaría en ningún momento sincronizado.

Todos estas parámetros que hemos visto hasta ahora podemos aplicárselo también al audio. Veamos unos ejemplos.

ffmpeg -i audio.wav salida.wma #Convertimos de wav a wma.ffmpeg -i audio.wav -acodec wmav2 -b:a 192k -ar 48000 -ac 2 salida.wma #Convertimos de wav a wma con parámetros.ffmpeg -i audio.wav -acodec libmp3lame -b:a 192k -ar 48000 -ac 2 salida.mp3 #Convertimos de wav a mp3 con parámetros.ffmpeg -i entrada.mp3 -t 120 -ss 60 -sameq salida.mp3 #Extraer un fragmento de un audio.cat musica1.mp3 musica2. mp3 > juntos.mp3 #Unir varios audios.

Hay veces que nos dejan un vídeo, en el que están en varios idiomas, subtítulos…etc, vamos a ejecutar lo siguiente:

ffmpeg -i metallica.mkv #Nos saldrá toda información pertinente del vídeo

Vamos a explicar un poco lo que estamos viendo: Como se ve en la imagen, nos muestra la información de un vídeo llamado metallica.mkv, la duración, la calidad en bitrate, y está organizado en 12 capítulos (0–11). Un poco más abajo nos muestra un complemento que se llama stream.

  • Stream 0:0. El vídeo, con toda su información correspondiente, codec, resolución, proporción de aspecto, duración…etc.
  • Stream 0:1. Audio, con toda su información, formato, frecuencia, canales, calidad en bitrate. Si hubiese mas de un audio, nos encontraríamos más stream de audio, por ejemplo mas idiomas o diferentes canales.
  • Stream 0:2 y 0:3. Esto son los diferentes subtítulos que pueda llevar el video.

Vamos a fijarnos en este ejemplo;

ffmpeg -i metallica.mkv -t 60 -map 0:1 -f mp3 -b:a 128 -ac 2 audio2.mp3

Imaginemos que tiene mas de un audio, 0:1 español, 0:2 inglés, lo que estamos haciendo con esta instrucción es extraer 60 segundos del audio en español y lo vamos a recomprimir en mp3, a 128 kbps en dos canales y lo guardamos como audio2.mp3.

También podemos hacerlo de archivos VOB directamente:

ffmpeg -i VTS_01_1.VOB -map 0:4 -vn -acodec libmp3lame -ar 44100 -b:a 192k -ac 2 sonido.mp3

Vamos a hacer un ejemplo práctico, resulta que nos dejan un concierto de metállica que se llama metallica.mkv, en el cual tiene varios canales de audio y muy buena calidad, lo que queremos hacer es reducir un poco el espacio y la calidad porque ocupa mucho espacio el concierto.

ffmpeg -i metallica.mkv 

Para averiguar los posibles stream que pueda tener el archivo de video. Nos damos cuenta, que tiene 3 stream; 0:0 que es el video, 0:1, un audio en español, 0:3 un audio en inglés, 0:4 un audio en alemán. Respecto a la calidad de video tiene un bitrate 1612 kbps y una resolución de 710x576.

El comando quedaría de la siguiente manera;

ffmpeg -i metallica.mkv -map 0:0 -vcodec libxvid -b:v 900k -s 640x352 -r 25 -aspect 16:9 -map 0:1 -acodec libmp3lame -b:a 112k -ar 48000 -ac 2 metallica.avi
  • -map 0:0. El vídeo. Lo comprimimos en xvid, le bajamos la calidad de 1612 a 900 kbps, la resolución de 710x576 a 640x352.
  • -map 0:1. El audio. solo seleccionamos el español, en mp3 y vamos a darle un bitrate de 112 y dos canales.

Nota: Todas estas instrucciones podemos meterlas en un proceso por lotes para que realice mas de un proceso a la vez, por ejemplo, vamos a imaginarnos que nos llega un disco de 22 pistas en formato wma y queremos pasarlo a formato mp3. Haríamos lo siguiente;

  • Vamos a crear un archivo;
nano comprimir.sh

Dentro vamos a ir tecleando las instrucciones de cada pista en un renglón diferente.

ffmpeg -i pista1.wma -acodec libmp3lame -b:a 128k -ar 48000 -ac 2 pista1.mp3ffmpeg -i pista2.wma -acodec libmp3lame -b:a 128k -ar 48000 -ac 2 pista2.mp3 #, … y así sucesivamente hasta la pista 22.

A continuación le damos permisos de ejecución al archivo,, y seguidamente lo ejecutamos, , nos daremos cuenta que empezará a realizar las tareas que hemos descrito en el proceso por lotes, una tras otra de forma secuencial hasta finalizar todas las tareas.

chmod 744 #Permisos de ejecución.
./comprimir.sh #Ejecutar el scripts.

Continúa por Mencoder.

--

--

Ismael Royano Gómez
Enredando con Linux.

Técnico Informático curioso, lector activo de las nuevas tecnologías, amante de las series de televisión y usuario del respetable mundo del enredo.