FFMPEG es un rápido sistema de conversión de vídeo y audio, que además de permitir la conversión entre muchos de los formatos conocidos como MP4, MPEG para vídeo y mp3 o amr para audio, entre otros.
FFServer nos permite transmitir vídeo y audio que haya sido previamente convertido a alguno de los formatos soportados por FFMPEG además de hacerlo también en tiempo real combinándolo con FFMPEG, mediante flujos FFM.
FFPlay es un reproductor de medios muy sencillo que utiliza las librerías de FFMPEG y SDL. Normalmente, se utiliza como sistema de testeo cuando se trabaja con FFMPEG.
Ahora que ya conocemos las distintas herramientas que vamos a utilizar, podemos empezar a analizarlas con un poco más de profundidad.
Herramientas de conversión FFMPEG
Funcionamiento
FFMPEG, funciona por línea de comandos. La forma general de invocar a FFMPEG es la siguiente:
ffmpeg [[Opciones para el fichero de entrada][-i Fichero de entrada]]…{[Opciones para el fichero de salida] Fichero de salida}.
Mediante esta estructura general tan sencilla, FFMPEG no sólo nos permite convertir ficheros que se encuentren en nuestro PC, sino que podemos capturar el vídeo o el audio, en función de lo que nos interese, desde cualquier fuente, ya sea una tarjeta capturadora de vídeo o una dirección IP de una máquina local o remota en la que se encuentre el fichero de audio o vídeo a convertir.
A continuación veremos las opciones de FFMPEG más importantes y que se suelen usar con más frecuencia.
Opciones Principales
-h
Nos muestra la ayuda del programa, es decir, nos muestra cuales son las diferentes opciones que FFMPEG acepta como argumento.
-formats
Nos muestra una lista de los formatos que soporta el programa tanto de entrada como de salida. Los campos que preceden al nombre del formato nos dicen si ese formato es aceptado como parámetro de entrada o como parámetro de salida.
‘D’ (Decoding Available). Si el nombre de un formato viene precedido de este campo, nos dice que es posible decodificar dicho formato, es decir, que FFMPEG lo puede recibir como parámetro de entrada.
‘E’ (Encoding available). Este campo por su parte, no informa sobre la posibilidad de codificar este formato, lo que nos indica que se puede utilizar como parámetro de salida de FFMPEG.
-codecs
Esta opción nos permite saber cuales de los codecs (codificadores, decodificadores o ambos) están disponibles en el programa. Los campos que preceden al nombre de del códec, nos dicen si el codificador o el decodificador están disponibles y si lo están para audio o vídeo.
‘D’ (Decoding Available). Nos indica si el decodificador está disponible para ese códec.
‘E’ (Encoding Available). Si este campo está presente, nos dice que el codificador está disponible para el códec a cuyo nombre precede.
V/A/S. Nos indica si el códec está disponible para audio, vídeo o subtítulos.
‘S’. Es lo que nos indica si el códec soporta cortes.
‘D’. El códec soporta renderizado directo.
‘T’. El códec es capaz de manejar vídeos a la entrada que estén truncados aleatoriamente en lugar de en los límites de en los frames únicamente.
-f formato
La opción ‘-f ’, nos permite especificar el formato que tiene nuestro vídeo de entrada y el que tendrá el vídeo a la salida.
-i
Esta opción es la que nos permite especificar la fuente de la que se extraerá el vídeo, ya sea local o remota.
Si la fuente es local, tendremos sentencias como esta: ffmpeg –i video.yuv.
Si por el contrario, la fuente es remota podremos encontrarnos con sentencias como esta: ffmpeg –i tcp://192.168.3.25:5432.
-target type
Transforma el fichero de la entrada al formato que se indica en el campo ‘type’, ajustando automáticamente opciones como el bitrate, el códec, o el tamaño del buffer.
Opciones de Video
-b ‘bitrate’
Nos permite modificar el ratio de bits (en Kbps) que se usará para nuestro video tanto a la entrada como a la salida.
-r ‘fps’
Nos permite modificar el número de imágenes por segundo que se mostrarán en nuestro video.
-s ‘size’
Con esta opción podemos establecer la resolución, ya sea manualmente introduciendo los valores de la forma ‘WxH’, donde ‘W’ es el ancho y ’H’ la altura, o bien usando alguna de las abreviaturas que reconoce el programa para establecer alguna resolución estándar como por ejemplo HD a 1080p que se puede especificar como ‘ ffmpg –i video.avi –s hd1080 videohd.mpeg’.
-aspect ‘aspect’
Incluyendo esta opción, podremos especificar el formato de pantalla en el que se va a visualizar el video, y por tanto lo adaptaremos a dicho formato de pantalla. Los más conocidos son el formato ‘4 : 3’ y el formato ‘16 : 9’ (pantalla panorámica).
-vcodec ‘codec’
Nos permite establecer un códec determinado para realizar la conversión de vídeo.
Opciones de Audio
-ar ‘freq’
Con esta opción podemos seleccionar la frecuencia de muestreo para nuestro fichero de audio.
-ab ‘bitrate’
Esto nos permite seleccionar el número de bits por segundo en el fichero de audio en Kilobits por segundo, donde sus valores más frecuentes son 64 Kbps, 128 Kbps o 192 Kbps.
-ac ‘chanels’
Nos permite decidir a qué tipo de sonido se adaptará nuestro fichero de audio, mono (opción ‘1’) o estéreo (opción ‘2’).
Además de las citadas en este documento, FFMPEG, ofrece una amplia gama de opciones que nos permiten realizar múltiples cambios en los ficheros a la entrada y a la salida, ya sean de audio o de vídeo, e independiente mente, de si su fuente es un fichero propiamente dicho o una tarjeta capturadora de televisión o una dispositivo externo de vídeo digital como por ejemplo una cámara que grabe en formato dv1.
Para tener una visión más completa sobre el funcionamiento de FFMPEG, conviene revisar la documentación oficial del proyecto que se puede encontrar en www.ffmpeg.org o bien, si ya tenemos instalado FFMPEG en el equipo, usar el comando ‘man’ para acceder a la ayuda del mismo.
Algunos Ejemplos de Aplicación
Ahora que ya hemos visto algunas de las opciones más importantes de FFMPEG de cara al proyecto, para una mejor comprensión nos valdremos de algunos ejemplos que servirán para tener una idea gráfica de lo que hacen las opciones y de cómo se pueden combinar.
Por ejemplo podemos convertir un fichero YUV420P a un .avi con la siguiente sentencia:
ffmpeg -i /home/prueba.yuv /home/salida.avi.
También podemos realizar el proceso contrario, obteniendo como resultado un fichero de video puro (YUV420P).
ffmpeg –i /home/video.avi videoPuro.yuv.
También podemos establecer más de un fichero a la entrada cuando queremos que estos se conviertan a un mismo formato de esta forma.
ffmpeg –i /tmp/a.wav –s 640x480 –i /tmp/a.yuv /tmp/a.mpg.
De esta forma convertiremos los dos ficheros tanto el de vídeo como el de audio a mpeg. Tendremos dos ficheros nombrados exactamente igual, pero en el uno habrá audio y en el otro vídeo.
Si se necesitan más ejemplos se puede acudir a www.ffmpeg.org y consultar la sección de documentación para tener todos los ejemplos de conversión entre formatos, ya sean de audio o de vídeo.
Streaming de vídeo y audio con FFSERVER
FFServer es un sistema que nos permite transmitir ficheros de audio o vídeo en tiempo real o con ficheros previamente convertidos. Este programa funciona mediante un fichero de configuración denominado ffserver.conf, situado en /etc.
Se puede ejecutar de forma individual utilizando la siguiente sintaxis:
ffserver [Opciones].
También podemos arrancarlo cuando ejecutamos FFMPEG solicitándole una fuente o un destino remoto.
A continuación veremos las principales opciones que FFServer nos proporciona para su ejecución por línea de comandos.
Opciones
-L
Nos muestra la licencia del programa.
-version
Nos indica la versión que tenemos instalada en nuestro equipo.
-formats
Nos muestra una lista de los formatos, codecs y protocolos que soporta FFServer, entre otros.
-f ‘Fichero de Configuración.
Nos permite especificar un fichero de configuración alternativo al existente en /etc/ffserver.conf.
-n
Esta opción anula todas las directivas de ejecución que permiten al programa ejecutar FFMPEG de forma automática. De este modo, el usuario tendrá que ejecutar FFMPEG de forma manual.
Comentarios