Compresión Multimedia

desde la Consola de Linux

Jesús David Navarro

jEsuSdA 8)

Linux

Índice

Qué son los archivos multimedia

Archivos Multimedia

Qué son los archivos multimedia

Qué son los archivos multimedia

Esquema de un Archivo Multimedia

Qué son los archivos multimedia

Esquema de un Archivo Multimedia

Qué son los archivos multimedia

Qué son los archivos multimedia

* : Los códecs de compresión y descompresión no tienen por qué ser los mismos.

De hecho, algunos códecs para descomprimir son gratuitos, pero los que comprimen flujos multimedia en dicho formato son de pago.

Qué son los archivos multimedia

Ejemplo:
Esquema de un Archivo Multimedia

Qué son los archivos multimedia

Contenedores multimedia


Contenedor

Contenedores más comunes

Cosas importantes para elegir un contenedor

Contenedores más comunes

Tabla comparativa de contenedores multimedia

propiedades avi mov mpg mp4 ogg mkv asf webm
Propietario Microsoft Apple MPEG MPEG Xiph.org CoreCodec Microsoft Google
Flujos de Vídeo 1 + 1 + + + + + VP8
Flujos de Audio + + 1 + + + + + Vorbis
Subtítulos no si no si si si si no
Libre ? (popular) patentado patentado patentado libre libre patentado libre
Streaming no si si si si si si si

Más información:

El contenedor mov permite contener distintos tipos de flujos en cantidad variable sin necesidad de que éstos estén intercalados entre sí para que se sincronicen. Esto lo ha hecho especialmente popular como formato de contenedor para la EDICIÓN de vídeo.

Códecs de Audio


Códecs de Audio

Códecs de audio más comunes

Cosas importantes para elegir un códec de audio

El bitrate variable permite codificar un audio usando más o menos bits para cada momento en lugar de usar siempre los mismos. Este tipo de codificación permite que usemos más bits cuando necesitemos más calidad y menos cuando no, con lo que se consigue, generalmente, obtener una codificación de más calidad en el mismo o menos espacio de disco.

Códecs de audio más comunes

Tabla comparativa de códecs de audio

propiedades mp3 vorbis ac3 wma aac
compresión lossy lossy lossy lossy / lossless lossy / híbrido
canales 1 a 2 1 a 16 1 a 6 1 a 8 1 a 28
CBR si si si si si
VBR si si si si si
Libre patentado libre patentado patentado patentado
Calidad * aceptable buena buena deficiente buena

Más información:

Calidad se refiere a la calidad del sonido percibida por las personas al escuchar el audio. A mismas condiciones de codificación (mismo bitrate, frecuencia, bits, etc.) no se perciben los sonidos igual por el óido humano. Esta valoración está extraída de diversas pruebas documentadas. Obviamente los resultados son subjetivos y difícil de constatar, dado que son los propios usuarios empleados en los estudios los que calificaban la calidad de los sonidos tras escucharlos.

Códecs de Vídeo


Códecs de Vídeo

Códecs de vídeo más comunes

Cosas importantes para elegir un códec de vídeo

Códecs de vídeo más comunes

Tabla comparativa de códecs de vídeo

propiedades mpeg-1 mpeg-2 divx xvid theora vp8 h264 x264
Propietario MPEG MPEG DivX Inc. Xvid.org Xiph.org Google MPEG Videolan
Calidad * VHS DVD DVD DVD Bastante alta Bastante alta Muy alta Muy alta
Tamaño de archivo * muy grande muy grande grande grande medio reducido reducido reducido
Compatibilidad reproductores muy alta muy alta muy alta muy alta media muy reducida alta alta
Libre patentado patentado patentado libre libre libre patentado libre

Más información:

* Calidad en cuanto a la percepción de los usuarios. Tamaño en cuanto a la comparación del resultado de codificar el mismo vídeo con los diferentes códecs.

Herramientas

Herramientas de conversión multimedia en Linux

Herramientas Gráficas

Herramientas de consola

Por qué usar la consola

Scripts de Consola

scripts de conversión multimedia en desde consola

Ejemplo básico de script

Convertir todos los archivos .avi de un directorio:

		
for i in *.avi  
do

	ffmpeg -i "$i" "$i".flv 

done

Ayuda:

man ffmpeg

man mencoder

Convertir vídeo a FLV

		
ffmpeg -i "$origen" -ab 56000 -ar 44100 -b 990000 -r 15 -f flv "$vidout".flv 

Convertir de FLV a AVI (divx + mp3)

ffmpeg -i "$origen" -b 900000 "$vidout"

mencoder "$origen" -o "$vidout" -ovc xvid -xvidencopts bitrate=3000
         -oac mp3lame -lameopts br=96:q=7:aq=9:cbr:mode=1

Extraer audio de un vídeo

		
ffmpeg -i "$origen" sonido.mp3 

Unir varios vídeos en uno

mencoder -oac copy -ovc copy -idx -o "$vid1" "$vid2" "$vid3"

avimerge -o "$vidout" -i video1.avi video2.avi  

Escalar un vídeo (filtros en mencoder)

mencoder "$origen" -o "$vidout" -ovc xvid -xvidencopts bitrate=1700 
        -oac mp3lame -lameopts preset=96 
        -vf scale=640:360,unsharp=l3x3:0.75:c3x3:0.75 

Escalar un vídeo (filtros en ffmpeg)

ffmpeg -i "$origen" -ab 56000 -ar 44100 -b 700000 -r 15 
     -f flv -s 640x360 "$vidout"

Convertir vídeo a DV

ffmpeg -i "$origen" -target pal-dv "$vidout"

Convertir vídeo a formato VCD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd 
     -vf scale=352:288,harddup -srate 44100 -af lavcresample=44100 
     -lavcopts vcodec=mpeg1video:keyint=15:vrc_buf_size=327
     :vrc_minrate=1152:vbitrate=1152:vrc_maxrate=1152
     :acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 -o "$vidout".mpg "$origen"

Convertir vídeo a formato SVCD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd 
     -vf scale=480:576,harddup -srate 44100 -af lavcresample=44100
     -lavcopts vcodec=mpeg2video:mbd=2:keyint=15:vrc_buf_size=917
     :vrc_minrate=600:vbitrate=2500:vrc_maxrate=2500
     :acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 -o "$vidout".mpg "$origen"

Convertir vídeo a formato DVD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf 
     -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 
     -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800
     :vbitrate=5000:keyint=15:vstrict=0
     :acodec=ac3:abitrate=192:aspect=16/9 -ofps 25 -o "$vidout".mpg "$origen"

Convertir vídeo a formato AVI (xvid+mp3)

ffmpeg  -i "$origen" 
     -vcodec libxvid -b 900000
     -acodec libmp3lame "$vidout"	

Convertir vídeo a MP4

mencoder -of lavf -lavfopts format=mp4 
     -oac lavc -lavcopts aglobal=1:vglobal=1:acodec=libfaac:abitrate=128
     -ovc lavc -lavcopts vcodec=mpeg4 -vf harddup,scale=320:-3 
     "$origen" -o "$vidout".mp4

Convertir vídeo a Theora

ffmpeg2theora -V 800 -v8 -K 250 -A 64 -c 2 -H 44100 --two-pass --optimize
     "$origen" -o "$vidout".ogm

tovid + ffmpeg2theora

En la mayoría de los casos un único paso con ffmpeg2theora suele ser suficiente. Pero si encontramos problemas con el audio, podemos hacer una primera conversión usando tovid.

Si el vídeo no es de mucha calidad, bastará con la opción -dvd-vcd. Si no, podemos usar -dvd.

tovid -dvd-vcd -pal -full -in original.avi -out destino

tovid -dvd -pal -full -in original.avi -out destino

Después, se pasa directamente el vídeo resultante destino.mpg a ffmpeg2theora. #$ ffmpeg2theora destino.mpg

Convertir vídeo a WebM

ffmpeg -i "$origen" -f webm -vcodec libvpx -b 800k -bt 800k 
     -acodec libvorbis -ar 44100 -ab 64k -ac 2 -threads 3 "$vidout".webm

0 = 1cpu, 1 = 2cpu's y así sucesivamente.

Convertir vídeo a H264 (x264)

mencoder -ovc x264 -x264encopts  
     subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b 
     -oac mp3lame -lameopts br=128:q=7:aq=9:cbr:mode=1
     "$origen" -o "$vidout".avi

Convertir vídeo a H264 2 pasadas (x264)

ffmpeg -i "$origen" -an -pass 1 
     -vcodec libx264 
     -b 900k -bt 900k -threads 0 "$vidout".mp4

ffmpeg -i "$origen" -acodec libmp3lame -ar 44100 -ab 128k -ac 2 -pass 2 
     -vcodec libx264 -b 900k -bt 900k -threads 0  -y "$vidout".mp4

En las versiones antiguas de ffmpeg, se podía usar el parámetro -vpre para usar "presets" específicos en cada pasada:

ffmpeg -i "$origen" -an -pass 1 
     -vcodec libx264 -vpre slow_firstpass 
     -b 900k -bt 900k -threads 0 "$vidout".mp4

ffmpeg -i "$origen" -acodec libmp3lame -ar 44100 -ab 128k -ac 2 -pass 2 
     -vcodec libx264 -vpre slow -b 900k -bt 900k -threads 0  -y "$vidout".mp4

Convertir MKV a AVI (xvid+mp3)

mencoder "$origen" -o "$vidout" -ovc xvid -xvidencopts bitrate=1700
     -oac mp3lame -lameopts br=96:q=7:aq=9:cbr:mode=1
     -vf scale=640:360,unsharp=l3x3:0.75:c3x3:0.75

mkvextract tracks "$origen" 3:"$vidout".srt

Crear un Thumbnail de un vídeo

ffmpeg -i  "$origen" -y -f image2 -ss 8 -sameq -t 0.001
     -s 320*240 "$vidout".jpg		

Crear una serie de imágenes de un vídeo

ffmpeg -i "$origen" -f image2 -vcodec mjpeg imagenes%d.jpg

Crear un GIF animado de un vídeo

ffmpeg -i "$origen" -s 200x200 -r 30 -pix_fmt rgb24 imagen.gif

Screencast con ffmpeg

script para hacer screencast

Screencast con ffmpeg - paso 1 - sonido

sox -t alsa "hw:0,0"  -t ogg -A -2 -c1 audio.ogg rate 44100
     gain +16 dither -s > /dev/null &
     
soxpid=`ps -A | grep sox | awk '{print $1}'`

Screencast con ffmpeg - paso 2 - vídeo

ffmpeg -f x11grab -r 25 -s 1024x768 -r 25 -i :0.0 -sameq video.avi

Screencast con ffmpeg - paso 3 - unir y salir

mencoder video.avi -ovc copy -oac mp3lame -audiofile audio.ogg -o "$vidoutput"
rm audio.ogg video.avi
kill $soxpid 2> /dev/null

Screencast con ffmpeg y MULTIMONITOR

ffmpeg -f x11grab -r 25 -s 1400x1050 -r 25 -i :0.0+1280,0 -sameq video.avi

Screencast con ffmpeg y MULTIMONITOR

Calculo de parámetros para ffmpeg en dual head

Screencast con ffmpeg y MULTIMONITOR

Calculo de parámetros para ffmpeg en dual head

Algunos consejos

ayuda tux

Algunos consejos

Algunos consejos

A codificar!!!


¡¡¡Las CPU's van a echar Chispas!!!

Para terminar...

Creative Commons Reconocimiento-No comercial-Compartir igual

Licenciado bajo Creative Commons

Reconocimiento - No Comercial - Compartir igual

Puedes:

  • Copiar, reproducir, mostrar públicamente y modificarlo, siempre y cuando cites al autor (o sea, yo),
  • no lo uses para fines comerciales,
  • y las obras derivadas se mantengan bajo esta misma licencia.

Para terminar...

¿Preguntas?

Monstruitos!

¡Muchas gracias!