Contempo: Edición video/audio: MEncoder y MPlayer (Parte 1)

Edición video/audio: MEncoder y MPlayer (Parte 1)

MEncoder junto con MPlayer son las herramientas multimedia más potentes, versátiles y solidas que existen en Linux, y que también son utilizados en otras aplicaciones por terceros. Aunque también existen versiones para los sistemas operativos OS X, Windows y BSD, nos enfocaremos solo en Linux y su consola de comandos.

Nueva guía 2013: Encodear con FFmpeg

La idea de este artículo es aprender a utilizar como un profesional a MEncoder y MPlayer, y para ello necesitamos de una Terminal o consola de comandos para poner en practica todas las opciones y pasos explicativos que utilizaremos en el artículo.
Todo esto nace a fines del año pasado, cuando dediqué varios meses al estudio y practica del uso de estas dos grandes herramientas, y el resultado de todo ello lo veremos después de la introducción que leerán a continuación...

El Reproductor y el Codificador


MPlayer es un reproductor multimedia a base de línea de comandos, y que utiliza principalmente la librería de codecs Libavcodec para reproducir los variados codecs de video y audio.
Por su parte, MEncoder es un codificador (encoder) de línea de comandos para video y audio, y que también utiliza la librería de codecs Libavcodec para su cometido. Los dos (MPlayer/MEncoder), pueden también utilizar otras librerías de codecs por separado, como: Xvid, x246 (H.264), LAME (MP3), AAC, etc.

El desarrollo de MPlayer y MEncoder parte desde el año 2000 hasta la actualidad. El equipo de desarrollo de MPlayer todavía no ha liberado una versión 1.0 Final, ya que hasta el momento va en la versión 1.0-RC2 (Release Candidate 2). El desarrollo ha durado muchos años, y ha dejado cifras muy positivas en los test de calidad a la hora de codificar.

¿Que es Libavcodec?


Libavcodec es una librería que junta los codecs de video/audio más importantes o utilizados en la actualidad, y pueden ser usados en cualquier reproductor multimedia (como MPlayer) y codificador (como MEncoder) para el propósito que sea. Y además, es el pilar principal del proyecto de software libre FFmpeg, y cuyo proyecto junta variadas herramientas para el trabajo con multimedia en distintas plataformas. Pero no hablaremos de FFmpeg, si no que hablaremos de MPlayer/MEncoder.

Interfaz Gráfica


MPlayer/MEncoder utilizan todas sus opciones y configuraciones a base de línea de comandos. Eso es para beneficiar su mejor desempeño a la hora de no mantener una interfaz gráfica de usuario levantada y funcionando, y no se produzca una posible caída del programa a la hora de codificar.
Para los dos existen interfaces gráficas muy completas, como el reproductor SMPlayer y GNOME MPlayer, que es utilizado por usuarios novatos y/o avanzados. Y por la parte de la codificación, existe la interfaz gráfica: AcipRip. Pero abarca muy pocas opciones de configuración en comparación con las opciones que se prestan en la línea de comandos.

Manos a la obra


La bien explicativa introducción ya acabó, y ahora vamos a lo práctico.
Como MPlayer es solo un reproductor multimedia, ahora nos enfocaremos en su mayor parte a MEncoder. La mayoría de las opciones pre-configuradas que vienen por defecto en MEncoder son de por si excelentes, ya que el equipo de desarrollo de MEncoder siempre velará por la calidad final del medio encodeado, pero esas opciones siempre se pueden exprimir más, y sacar toda la calidad a relucir gracias a este codificador. Como por ejemplo...

Esta es una codificación simple en MEncoder, y dejaremos las opciones por defecto del codec utilizado:
  • La salida (-o) video_final.avi, es el resultado final del video.bla encodeado.
mencoder video.bla -o video_final.avi -oac mp3lame -lameopts cbr:br=192:mode=0 -ovc xvid -xvidencopts pass=1:bitrate=2050

(El video.bla es el video a encodear, el .bla es el contenedor del video que se va a encodear, como por ejemplo: .wmv, .avi, .mp4, etc.)

Para empezar tu primer video encodeado, primero copia y pega la linea de comandos de arriba (el cuadro celeste) en una terminal de Linux (y tener MEncoder instalado, obvio), y... (primero dejar en claro que se realizarán dos pasadas de codificación de datos al video para beneficiar el peso/calidad del video final) ...primero haremos la primera pasada, esto lo haremos dejando la opción "pass=1" en la linea de comandos, y luego apretar la tecla Enter.
Al finalizar el proceso de esa primera pasada (pass=1), se cambiará el 1 por un 2, o sea "pass=2". Y tecla Enter.
Con esto finalizaremos el encodeado simple (o sencillo) de tu primer video con MEncoder.

Eso fue algo muy básico, y de hecho, varios lo utilizan de esa manera.

Bueno, después que expliqué lo básico, ahora lo haremos a mi manera, con las opciones que utilizo, y todas las variantes y opciones que existen en MEncoder/MPlayer para exprimir la calidad al máximo.

Video a XVID + MP3


Estas opciones son idénticas al encodeado simple de arriba, pero solo las opciones del audio, ya que como vemos, el codec Xvid tiene muchas más opciones para brindar una mejor calidad al video final:
mencoder video.bla -o video_final.avi -oac mp3lame -lameopts cbr:br=192:mode=0 -ovc xvid -xvidencopts pass=1:bitrate=2050:zones=0,w,1.00:cartoon:chroma_opt:vhq=4:min_iquant=1
:max_iquant=8:min_pquant=1:max_pquant=16:min_bquant=1:max_bquant=24
:max_key_interval=300:quant_type=mpeg:curve_compression_high=10:
curve_compression_low=5:profile=asp5

Ahora explicaré solamente las opciones que se pueden cambiar, todas las demás opciones que no se pueden cambiar (para beneficiar la calidad) se dejarán intactas.
  • El filtro "cartoon" solamente es útil para animaciones 2D, como Anime. Si se encodea un video con actores reales (Live Action) esta opción se tiene que remover.
  • La calidad del bitrate de audio puede diferir en si es constante, variable o medio, estos se pueden cambiar según tus requerimientos u oído: cbr (constante), vbr (variable), abr (medio).
  • Por defecto, los canales de audio (mode=) se seleccionarán automáticamente, pero igual se pueden cambiar: 0 (stereo), 1 (joint-stereo), 2 (dual-channel), 3 (mono).  

Xvid con Libavcodec

Arriba utilizamos el codec Xvid directamente para encodear, pero como mencioné al principio; Libavcodec es parte primordial de MEncoder, y haremos exactamente lo mismo de arriba pero con la librería de codecs Libavcodec:
mencoder video.bla -o video_final.avi -oac mp3lame -lameopts cbr:br=192:mode=0 -ffourcc XVID -ovc lavc -lavcopts vcodec=libxvid:vbitrate=2050:mpeg_quant

DivX con Libavcodec

También se puede utilizar DivX con Libavcodec, es lo mismo, solo se utiliza el codec de video DivX gracias a Libavcodec:
mencoder video.bla -o video_final.avi -oac mp3lame -lameopts cbr:br=192:mode=0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2050:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2
:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2
:qns=2

Video a H.264 + AAC


El codec de alta calidad H.264 (AVC) también se ha hecho muy popular este último tiempo, y es primordial en el uso de video Blu-ray (MPEG-4), ya que se utiliza para ripear (encodear) discos Blu-ray a videos de menor tamaño. Usualmente una película en Blu-ray se puede pasar a un video encodeado en H.264 con un peso de 4 GB a 720p (resolución de 1024x720), pero he visto casos de películas ripeadas con un peso de 2,2 GB en H.264 que se ven muy bien a 480p (720x480).

En este caso dejaremos el video en H.264 con el contenedor de video .MP4, y con el codec de audio AAC, dejando las mismas tasas de bits que el ejemplo usado arriba en Xvid:
mencoder video.bla -o video_final.mp4 -oac faac -faacopts br=192 -ovc x264 -x264encopts pass=1:bitrate=2050:bframes=2:direct_pred=spatial:weight_b:8x8dct:me=umh:
mixed_refs

Ahora explicaré solamente las opciones que se pueden cambiar, todas las demás opciones que no se pueden cambiar (para beneficiar la calidad) se dejarán intactas.
  • La predicción de movimiento "direct_pred=" tiene dos alternativas: spatial (Anime), temporal (imagen real Live Action).

H.264 y AAC con Libavcodec

Arriba utilizamos el codec H.264 y AAC directamente para encodear, ahora haremos exactamente lo mismo de arriba pero con la librería de codecs Libavcodec:
mencoder video.bla -o video_final.mp4 -oac lavc -lavcopts acodec=libfaac:abitrate=192 -ovc lavc -lavcopts vcodec=libx264:vbitrate=2050

Video a WMV + WMA


Los codecs de video y audio de Windows Media, también tienen cabida en MEncoder, y todo esto gracias a la librería de codecs Libavcodec. Pero hasta el momento, Libavcodec todavía no tiene soporte para encodear a WMV3 (WMV9), y solamente puede utilizar WMV2 (WMV8):

Utilizaremos el codec de video WMV2 con el contenedor de video .WMV, y con el codec de audio WMA2, dejando las mismas tasas de bits de los ejemplos de arriba:
mencoder video.bla -o video_final.wmv -oac lavc -lavcopts acodec=wmav2:abitrate=192 -ovc lavc -lavcopts vcodec=wmv2:vbitrate=2050

DVD a XVID (o H.264) + AC-3 (o MP3 o AAC)


Por fin llegamos al punto en que muchos se interesan, el ripeo, encodeo, o codificación de un DVD a Xvid, aunque también se puede utilizar H.264 si uno quiere, solamente se modifica la salida del codec de video "-ovc" hacia adelante. Lo mismo va para el audio y su salida del codec de audio "-oac" hacia adelante.

Lo primero es ver en que pista se encuentra el DVD, eso lo vemos con MPlayer:
mplayer dvd://

Ese simple comando empezaría con la reproducción del DVD, si no lo encuentra o tienes más unidades lectoras de DVD, prueba cambiando las pistas "dvd://2" ó la pista 3, ó 4, 5, etc.
También podría funcionar esto, si es que tienes más unidades lectoras:
dvd://1 -dvd-device /dev/dvd1

Primero explicaré algunas curiosidades sobre los DVDs. Los DVDs a veces vienen con unas lineas negras pequeñas que aparecen en los costados de la imagen (derecha, izquierda, arriba y abajo) (¡Ojo!: no confundir con las lineas widescreen (pantalla ancha) que traen algunos DVDs por defecto, no son esas lineas), todo eso de las lineas pequeñas negras, es debido a que los televisores convencionales (conocidos como CRT) se comen un poco la imagen del video, por eso es que las empresas que desarrollan el DVD les dejan esas líneas de los costados.
Pero esas líneas se pueden recortar, o hacer un cropping al video, con la opción "crop". 

También dejar en claro que en la Parte II de la continuación de este artículo, explico varias opciones como recortar imagen del video, cortar (dividir) un video, unir un video, cambiar resolución y aspecto, copiar audio y encodear solo el video y viceversa, extraer audio o video, y pegar subtitulos (Fansub).

Las opciones de Xvid son identicas a las que hemos visto, y de hecho; se pueden cambiar por las de H.264 (como expliqué un poco más arriba). Lo mismo va para las opciones de audio, ya que se puede encodear a MP3 o AAC, pero en este caso dejaremos el audio AC-3 que venga en el DVD:
mencoder dvd://1 -chapter 1-1 -o video.avi -vf filmdint,eq=3:-2,crop=708:480:7:0,scale=704:396,dsize=16/9 -fps 30000/1001 -ofps 24000/1001 -aid 129 -oac copy -ovc xvid -xvidencopts pass=1:bitrate=2050:zones=0,w,1.00:chroma_opt:vhq=4:min_iquant=1
:max_iquant=8:min_pquant=1:max_pquant=16:min_bquant=1:max_bquant=24
:max_key_interval=300:quant_type=mpeg:curve_compression_high=10:
curve_compression_low=5:profile=asp5

Opciones encodeado del DVD

Ahora explicaré algunas opciones de la línea de comandos:
  • La opción "-chapter 1-1" está seleccionando que solo encodeé la pista 1 del DVD, si fuera el DVD de un concierto o serie, serviría mucho si queremos solo extraer esa pista, pero si queremos que encodée otra pista, como por ejemplo la pista o track 4, lo dejarán de esta forma: "-chapter 4-4". Si quisieramos encodear una película o un concierto completo, tendremos que remover la opción "-chapter", y por supuesto también remover el número que tenga al lado de esa opción.
  • La opción "-vf", son los filtros de video que se utilizarán para mejorar la imagen del video final:  "filmdint" (telecine inverso, o desentrelazado), "pullup,softskip" (también se puede utilizar como telecine inverso o desentrelazado, y utilizar con la opción softskip), "yadif" (desentrelazado solo para DVDs PAL de 25 fps), "eq" (Brillo y Contraste de -100 a 100), "crop" (recortar imagen. En la Parte II de la continuación del artículo lo explico detalladamente), "scale" (escalando la resolución del video. Lo explico en la Parte II), "dsize" (aspecto proporcional del video).
  • Las opciones "-fps" y "-ofps" son la entradas de los frames del video y salida del mismo. En NTSC se utiliza como entrada 30000/1001 (29.97) y como salida 24000/1001 (23.976).
  • La opción "-aid" selecciona la pista 129 de audio, que es comunmente usada por AC-3 (aunque eso se puede ver fácilmente en la reproducción del DVD con MPlayer) para que sea copiada directamente sin encodear con la opción: "-oac copy".

En el sitio de MPlayer hay mucha documentación sobre todas las opciones que se pueden emplear, todo disponible en inglés y español. O también se puede ver el manual que viene incluido con MEncoder/MPlayer en Linux, ahí vienen todas las opciones para echarle un ojo. Solo tipear lo siguiente en una Terminal (las dos te llevaran al mismo manual):
man mplayer 
man mencoder

La extensión de este artículo sobre MEncoder y MPlayer continua en la Parte 2, y ahí hablo y doy ejemplos sobre como recortar imagen del video, cortar (dividir) un video, unir un video, cambiar resolución y aspecto, copiar audio y encodear solo el video y viceversa, extraer audio o video, pegar subtitulos (Fansub), y etc...