jueves, 24 de noviembre de 2016

Echando un vistazo al FFMPEG

Estoy muy orgulloso (y muy a gusto) de pertenecer a la subespecie de ‘usuarius habilis’, y no tengo el menor interés en promocionar a la, superior, de ‘usuarius sapiens’. Es más, hace un par de días no pude menos que comentar, en un Blog que suelo leer, que uniéndome al aplauso por la profesionalidad de una exposición ‘para novatos que quieran introducirse en Debian’, toda ella basada en comandos de consola, que si eso que se contaba lo leía un novato... se le iban a quitar las ganas de intentar usar Debian. Y que (el autor) me perdonase la sinceridad.
Y es que los comandos de consola siguen siendo, para mi, una herramienta conveniente (por lo cómoda) pero prescindible para empezar a funcionar con Debian. Es más, opino que Debian es, incluso, más fácil de instalar que Ubuntu, cuyo leit motiv de 'humanizar Linux' es famoso, e incluso más ‘friendly’… y no una distro para ‘frikis’.
Viene esto a cuenta porque uno de los comandos que tengo anotados para facilitarme la vida con un ‘copia y pega’ es el FFMPEG, y me apeteció echar un vistazo a sus ‘tripas’, y escribir aquí, más que nada para que me sirva de ‘recordatorio conceptual’, cuatro ideas básicas.

FFMPEG en una potentísima herramienta, en línea de comandos, que permite ‘manipular’ archivos de video y audio. Cuando digo manipular me refiero a que puede convertir, transcodificar, cortar, separar… (y también, incluso, hacer streaming, o grabar…). En realidad es la herramienta que usan, internamente, muchas aplicaciones multimedia. Y, además de ser multiplataforma, tiene la gran ventaja de que te instala muchos codecs de audio y video (como puede verse, por ejemplo, junto a más detalles, en la Wikipedia)

Pero vamos a meter las narices es este comando:  
Para empezar, la estructura de una orden con ffmpeg es siempre así:
ffmpeg [opciones globales] [opciones del archivo input] -i nombrearchivo_input [opciones definidas para el archivo output] nombrearchivo_output
Así que, en resumen, para dar una orden con FFMPEG (y para no liarte con las rutas), 
a) abres una consola en la ruta donde guardas el archivo ‘a manipular’, 
b) optativamente pones las opciones (globales o específicas) que quieras definir definir,
c) escribes -i (para indicar que se aplican al archivo de entrada), 
d) escribes el nombre de dicho archivo y, a partir de aquí, 
e) pones las opciones de quieras para la salida y le das un nombre a ese archivo de salida.

Por ejemplo, para convertir de un formato de video a otro, puedes poner esto (como se ve, las opciones del archivo de entrada las dejamos ‘por defecto, que es bastante normal)
ffmpeg -i nombrevideo.ogv -vcodec mpeg4 -q:v 0 -acodec libmp3lame output.avi
Donde...
-i: input (archivo de entrada que queremos convertir, o sea nombrevideo.ogv)
-vcodec mpeg4: indicamos los codecs a utilizar para el video. En este caso mpeg4 (avi).
-q:v 0 indicamos que el archivo de salida debe tener la misma calidad (en video) que el archivo de entrada. Para audio sería -q:a 0
-acodec libmp3lame: codec de audio que vamos a utilizar. En este caso, libmp3lame (MP3)
output.avi: nombre que le daremos al video convertido, y que se guardaría en la misma ruta que el original
Otro ejemplo: para extraer el audio de un video escribiríamos esto:
ffmpeg -ab 128 -i video.flv audio.mp3

Bien, pero… ¿cuales son las opciones más usuales?. Pues pueden ser…
-y: opción global, que indica que se sobreescriba el output, sin preguntar
-f … fuerza el formato. Por ejemplo, -f avi. Es opcional, normalmente
-r … estipula las imágenes por segundo (frames per second, (fps). Por ejemplo -r 24000
-ar ... idem los Hz de frecuencia de muestreo del sonido: Por ejemplo, -ar 44100 
-ac ... idem, los canales. Por ejemplo, -ac 2 
-filter:v (o -f:v): indica que se va a añadir algún filtro gráfico al video, por ejemplo... scale=w=640:h=480, o bien  -aspect 4:3
-vcodec … define el codec de video a emplear: Por ejemplo, - vcodec libxvid (codec Xvid)
-maxrate (o -minrate …) define el máximo (o mínimo) bitrate. 
-b:v … definiría el bitrate de video. Por ejemplo -b:v 1200k
-acodec… define el codec de audio. Hombre, normalmente se usaría -acodec libmp3lame para codificar en MP3
- ab (o -b:a)… define el bitrate de audio. Por ejemplo -ab: 128. (Por defecto la conversión de audio se realiza a una ratio de 64 kb/s, por lo que podemos, para mejorar la calidad, agregar el argumento (global) -ab 128)
Bueno, y un largo etcétera. En realidad, no es mi intención hacer aquí un manual de uso del ffmpeg, sino más bien desentrañar, genéricamente, sus tripas.

Por supuesto, hay mucha información en Google, y en el mandato, por consola,
man ffmpeg (o ffmpeg --help)… puede dar algunas ideas… aunque, desgraciadamente, por el momento están en inglés.

El caso es tener una ‘culturilla’ y si, por ejemplo, vemos esta orden para transcodificar un video…
ffmpeg -i video_inicial.avi -b 750000 -vcodec mpeg4 -s 640×360 -acodec libfaac -ac 2 -b 96000 video_final.mp4
entender, más o menos, de qué va el tema.

NOTA FINAL: los codecs que puedes usar en ffmpeg los puedes saber escribiendo, en consola...
ffmpeg -encoders 
Y, para recodificar un video reduciendo su tamaño sin grandes pérdidas de calidad (por ejemplo, para compartirlo por internet) se puede usar esta orden:
ffmpeg -i entrada.mpg -sameq salida.webm 

No hay comentarios:

Publicar un comentario