Usar FFmpeg para la codificación de videos en Linux

¿Cansado de que tus amigos te pasen esa película tan especial, pero que pesa 3 GB y que la calidad sea peor que la pantalla de tu lavadora? En este artículo encontraste la solución a todos tus problemas al codificar videos, gracias a el espectacular programa FFmpeg. Convertir video de AVI a AVI con MPEG-4, convertir video de AVI a MP4, convertir video de AVI a OGG, convertir video de AVI a RM, etc. También are una pequeña comparativa poco fundamentada pero útil para saber elegir que formato elegir para sus diferentes usos.

Un pequeño resumen de lo que es FFmpeg (según Wikipedia)

FFmpeg es una colección de software libre que puede grabar, convertir y hace streaming de audio y vídeo. Incluye libavcodec, una biblioteca de códecs. FFmpeg está desarrollado en GNU/Linux, pero puede ser compilado en la mayoría de los sistemas operativos, incluyendo Windows.

Ahora vamos aprender a usar este fabuloso programa con una interfaz gráfica de la mas modernas. (linea de commandos)

Terminal Linux

El uso que le vamos a dar a FFmpeg en este mini artículo es el de Convertir videos a diferentes formatos con FFmpeg.

¡Al grano! Los usos mas simples y útiles son los siguientes:

Si nuestro problema es el peso de los archivos de video, que consideramos como excesivo para una calidad no tan espectacular y si quieres que el archivo conserve la calidad (sin perdidas), o simplemente quieres que pese menos. La mejor opción sin usar códecs privativos es (creo) usar el códec de video H264 o también conocido como MPEG-4 parte 10.

Lo veremos en el siguiente ejemplo, uso algunos argumentos:

-i  Indico el video que quiero convertir, o también se puede decir la entrada (in)

-ab Indico la taza de bits. En el siguiente ejemplo le indique 128k que es la misma que tiene el viedeo por codificar. ¿Y por que hice esto? por que predeterminadamente el programa elige una taza de bits de 64k . Lo que empeoraría la calidad del sonido, se nota un poco.

-vcodec Indico el códec de video, en el siguiente ejemplo elegí el códec H264 o MPEG-4 part 10 . Para saber que otros códec usar puedes usar el argumento -codecs , saldrán todos los códecs de audio y video que puedes usar o no, según los paquetes que tengas instalados en tu distribución Linux. En Windows deben venir los que hay predeterminadamente. El nombre ‘libx264’ (que es el códec h264) sale ahí.

¡Importante! El nombre de entrada tiene que ser diferente al nombre de salida, si el nombre especificado con el argumento -i es igual al de salida, el programa intentara remplazar el mismo archivo que estas codificando y por lo tanto se perderá.

¡Repositorios! si no tienes instalado lo repositorios adecuados para codificar, probablemente el programa lance un mensaje diciendo que no tienes los repositorios adecuados. Necesitas los repositorios de H264/AVC Encoder, H.264/MPEG-4 Encoder. Yo en OpenSuse 11.4 tengo h264enc, libx264-115, x264 .

ffmpeg -i 'in_miPelicula.avi'-ab 128k -vcodec libx264 'out_miPelicula.avi'

.

Si nuestro problema sigue siendo el peso del archivo pero esta vez quieres comprometer la calidad del archivo para compensar un tamaño mas reducido aún. Una buena opción es codificar tu video al formato ‘MP4’. Pero

-acodec Indico el códec de audio, esta vez le dejo el mismo códec de audio que venía en el video original. Voy a usear la palabra ‘copy‘ para indicar que copio el mismo códec que venía en el video. (a veces el códec cambia un poco). En mi caso cambió de ‘mp3’ a ‘libmp3lame’. Al usar la palabra ‘copy‘ de forma predeterminada se elige la misma taza de bits que tenía el audio del video a codificar. Si necesitas cambiar la taza de bits puedes usar el argumento -ab . A veces pasa que no se pueden usar algunos argumentos como copy, puede que sea los códecs, la versión, etc. Los programadores de FFMpeg actualmente son muy activos y están siempre resolviendo bugs, añadiendo funcionalidades y reparando algunas cosas. Para asegurarse que no va a haber ningún error al empezar la codificación, es mejor saber la taza de bits y indicarlo, con -ab .

¡Repositorios! creo que solo es el de ffmpeg, pero si se necesita otro, por favor, pueden avisar en los comentarios.

ffmpeg -i 'in_miPelicula.avi' -acodec copy 'out_miPelicula.mp4'

Convertir video de AVI a OGG.

ffmpeg -i 'in_miPelicula.avi' 'out_miPelicula.ogg'

Convertir video de AVI a RM.
Solo le indico la taza de bits -ab para que conserve la calidad de sonido.

ffmpeg -i 'in_miPelicula.avi' -ab 128k 'out_miPelicula.rm'

Creo que las primeras dos formas de codificar los videos son buenas. Si están obsesionados con el peso de los archivos, y cual es mejor. Les dejo una imagen que muestra, la forma en que fueron codificados esos archivos y el peso.


Habría mucho mas que decir, todo esto de la codificación de videos, los contenedores (avi, mp3, ogg, mp4) y los códecs de audio o video, son un tema muy amplio. Es todo un universo. Al aprender un poco de esto me di cuenta que un video o audio no es una simple matriz de variable. Sino que todo esto tiene una gran complejidad y me asombra lo desapercibido que pasa el funcionamiento interno de los videos.