Programas para hacer screencasting en Linux hay muchos, algunos de ellos ya mencionados en este blog: Open BroadCaster Software Multiplatform, Kazam, RecordMyDesktop, Byzanz o FFmpeg.
Hoy vamos a añadir avconv a la familia. Poniéndolo en contexto, avconv pertenece a un proyecto más grande llamado libav que a su vez, nació como un fork de FFmpeg en 2011. Los desarrolladores de libav son más conservadores a la hora de incoporar cambios al código que los de FFMpeg. De hecho, esa distina concepción de cómo se tenía que llevar a cabo el desarrollo de la herramienta fue una de las principales de razones para que naciera el nuevo proyecto. A día de hoy, la filosofía que se sigue en ambos sigue siendo fiel a sus correspondientes orígenes, unos más conservadores y otros más innovadores. Razones para utilizar uno u otro hay muchas, así como debates sobre el futuro y viabilidad de cada proyecto, aunque no corresponde a este artículo discutirlas.
Al grano… Para utilizarlo tendremos que tirar de terminal aunque es muy sencillo de utilizar. La documentación es extensa pero aquí voy a ir al grano con algunos ejemplos prácticos y fragmentos de código listos para su uso.
Primero de todo instalamos las herramientas que vamos a necesitar:
apt-get install libav-tools pulseaudio
También como uno de los primeros requisitos tendremos que identificar el dispositivo de entrada de audio que utilizará avconv para la grabación. Podemos hacerlo con el comando pactl list sources
. Veremos que tenemos varias fuentes (Sources) a elegir como dispositivo de entrada. Puede resultar confuso, pero una manera muy sencilla de ver qué dispositivo de entrada es el activo que utiliza nuestro sistema consiste en reproducir un vídeo (por ejemplo en Youtube), hacer un listado con pactl list sources
, y comprobar cuál de los dispositivos está en IDLE o ACTIVE. Yo obtengo:
... Source #1 State: IDLE Name: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor Description: Monitor of Built-in Audio Analog Stereo ...
Bien, quédate con lo que sigue a Name, ése es el nombre de dispositivo de entrada que utilizaremos con avconv. En mi caso alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
A continuación algunos ejemplos de grabación en distintos formatos:
- Un sencillo snippet para grabar audio en formato ogg utilizando libvorbis:
avconv -f alsa \ -ac 2 \ -ar 48000 \ -f pulse \ -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \ -acodec libvorbis \ -aq 6 \ -y audio.ogg
- Snippet para grabar en formato MP3 utilizando libmp3lame:
avconv -f alsa \ -ac 2 \ -ar 48000 \ -f pulse \ -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \ -acodec libmp3lame \ -aq 0 \ -y audio.mp3
- Para vídeo MP4 la cosa se complica un poco. Tendremos que especificar además del dispositivo de entrada unos cuantos parámetros más: resolución, display, codec, rate… Para la resolución yo he puesto la nativa de mi monitor que estoy utilizando en este momento. Podéis ver la que tenéis con el comando
xrand
:Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 16384 x 16384 DVI-I-0 disconnected (normal left inverted right x axis y axis) DVI-I-1 disconnected (normal left inverted right x axis y axis) DP-0 disconnected (normal left inverted right x axis y axis) DP-1 disconnected (normal left inverted right x axis y axis) DP-2 disconnected (normal left inverted right x axis y axis) DP-3 disconnected (normal left inverted right x axis y axis) HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 521mm x 293mm 1920x1080 60.00*+ 59.94 50.00 60.00 50.04 1680x1050 59.95 1440x900 59.89 1280x1024 75.02 60.02 1280x960 60.00 1280x720 60.00 59.94 50.00 1152x864 75.00 1024x768 75.03 70.07 60.00 800x600 75.00 72.19 60.32 56.25 720x576 50.00 720x480 59.94 640x480 75.00 72.81 59.94 59.93 480x576 50.00 480x480 59.94 DP-4 disconnected (normal left inverted right x axis y axis) DP-5 disconnected (normal left inverted right x axis y axis)
La seleccionada aparece en current, además de más abajo con un asterisco junto a la frecuencia de refresco de pantalla. Una manera más limpia de obtener la resolución actual:
xrandr | awk -F "current" '{print $2}' | head -1 | cut -d "," -f1 | tr -d " "
Y aquí el snippet para grabar un MP4 utilizando libx264:
avconv -f pulse \ -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \ -f x11grab \ -r 30 \ -s 1920x1080 \ -i :0.0 \ -vcodec libx264 \ -preset ultrafast \ -threads 4 \ -strict experimental \ -y video.mp4
Avconv también se puede utilizar como herramienta de conversión entre formatos. Aquí un Gist con algunos tips y ejemplos:
Como decía al principio del artículo, algunos prefieren FFmpeg a avconv para estos menesteres. Aunque el primero tiene más actividad y desarrollo en la actualidad, avconv sigue siendo una alternativa viable teniendo en cuenta además su facilidad de uso.