FFmpeg: Solución para convertir, grabar y stream A/V (I)

Hace unos días atras hice una entrada sobre el Conversor de Video: WinFF así que buscando no me percate que no habia echo una guia/tutorial sobre su padre FFmpeg. Así que de esto tratara este post.
Por cierto antes de comenzar, una noticia para el mundo linuxero en pleno, me entere hoy 4 de Julio, que luego de 4 años FFmpeg y otros proyectos de codigo abierto (Mplayer y rtmpdump) estan en busqueda de nuevo proveedor de hosting, ya que Arpi el actual proveedor ya no podra alojarlos.Solo necesitan 4 Tb de espacio en disco y al menos 4 Tb de ancho de banda por mes, para su lista de correos, trac, samples repo, svn y más.
Pueden comunicarse a la lista de correo ffmpeg-admins o vía irc.freenode.net canal #ffmpeg-devel ,a continuación el feed:
screenshot gracias a la utilidad scrot
Continuemos, den un [play] y a seguir aprendiendo.

//widgets.jamendo.com/v3/track/1235170?autoplay=0&layout=standard&manualWidth=400&width=400&theme=dark&highlight=6&tracklist=true&tracklist_n=3&embedCode=

FFmpeg es una colección de software que puede grabar, convertir y hacer streaming de audio y video(1) además incluye la biblioteca de codecs libavcodec, demás decir que esta presente en todos las distros GNU/Linux e inclusive se puede compilar en Win$, el proyecto esta liberado bajo las licencias LGPL v2.1+ y GPL v2+ .
La instalación es sencilla, pueden buscarlo en sus respectivos repositorios o recurrir a la web del proyecto, inclusive clonarlo desde git(2).
sudo pacman -S ffmpeg
sudo yum install ffmpeg
sudo apt-get install ffmpeg
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

El proyecto lo compone 4 herramientas: ffmpeg que convierte audio y video de un formato a otro, además puede capturar y codificar en tiempo real desde DirectShow, tarjeta Tv o cualquier otro device compatible.

La forma más sencilla de usarlo sería:

ffmpeg -i input.mp4 output.avi

Lo espectacular de ffmpeg es que es más completo y complejo que solo esto, ya que tiene una amplia posibilidad de opciones.

Poniendo un ejemplo, si queremos ajustar la tasa de bits de video del archivo salida a 64 kbit/s, lanzamos el comando:

ffmpeg -i ingreso.avi -b:v 64k -bufsize 64k salida.avi
Si queremos forzar la velocidad de los fotogramas a 24fps:
ffmpeg -i ingreso.avi -r 24 salida.avi
La forma en que trabaja ffmpeg se puede resumir de la siguiente manera, este llama a libavformat (demultiplexor ó demuxer) para leer archivos de entrada y obtener paquetes que contienen datos codificados. Cuando hay varios archivos de entrada, intenta mantenerlos sincronizados mediante el seguimiento de marca de tiempo más bajo en cualquier flujo de entrada activa. Paquetes codificados se pasan al decodificador, el cual produce marcos sin comprimir (vídeo en bruto, audio PCM, etcetera ) que puede ser procesada por el filtrado. Después de filtrar, las tramas se transmiten al codificador, que codifica los paquetes y salidas. Finalmente los pasa al muxer (multiplexor), que escribe los paquetes codificados al archivo de salida.
Diagrama de Flujos hecho en Día
Para que tengan una idea, de entre las muchas opciones usadas tenemos:
-i nombre_de_archivo »» archivo ingreso
-f fmt »» fuerza el formato del archivo de ingreso o salida
-t duration »» cuando se usa como opcion del archivo de ingreso, limita la duración de los datos leídos, cuando se usa como opción del archivo de salida (se escribe antes del mismo) dejara de escibir la salida despues del tiempo escrito.
-c[:stream-specifier] codec ó -codec[:stream_specifier] »» seleccionar un codificador (cuando se utiliza antes de un archivo de salida) o un decodificador (cuando se utiliza antes de un archivo de entrada). codec es el nombre de un decodificador / codificador o un valor especial [copy] (sólo salida) para indicar que no es para ser re-codificado.
-to position »» detiene la escritura de salida en la posición XX
-fs size_limit »» establece el tamaño limite del archivo , expresado en bytes.
-frames [: stream_specifier] frameCount (salida, stream) »» deja de escribir el stream después de X frames [frameCount].
Creo yo que para un usuario normal es dificil conocer todas las opciones ya que tiene una barbaridad, me canse de leer el man ffmpeg así que el resto se los dejo a ustedes para que investiguen. 🙂

Señale 4 herramientas, a ffmpeg, se le une, ffserver, ffplay y ffprobe; pero creo que extender más esta entrada sería cansado, así que le dedicare un segundo post proximamente.

Así que por ahora me despido, buenas vibras lectores.


(1) esta ultima funcionalidad la desconocia.
(2) claro deben tener git previamente instalado en su distro.
Anuncios

One comment

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s