Capturar tu escritorio para hacer videos demostrativos con Linux

Primero que todo, deberé indicar que todo lo que escribo lo he ejecutado en mi Fedora 12, pero estoy seguro que casi cualquier Linux actual deberá soportar la tecnología descrita…

Dado que me he dado a la tarea de preparar unos cursos de PHP, decidí introducir unos videos demostrativos de algunas tareas que describan de forma más didáctica y directa ciertas actividades del curso. Con la ayuda del yum no tardé mucho tiempo en recordar el nombre del paquete que mi socio Ernesto Pérez me comentó hace tiempo usaba para estos menesteres: recordmydesktop… que es una herramienta en línea de comandos (CLI) justamente para eso y que trae una interface gráfica al mismo llamada gtk-recordmydesktop (Creo que él lo corría sobre CentOS 5 en aquel tiempo). La herramienta es muy buena y sencilla de manejar, graba video y audio (el audio es opcional) y tiene opciones para modificar la calidad de grabación de ambos. Repito, muuuy bueno y simple!!! …

Luego de grabar un par de pruebas me percaté de que genera los archivos en formato de video ogg .ogv, lo cual no es un defecto ni nada, de hecho es uno de los códecs más eficientes y de mejor calidad que he visto, pero no es muy popular, lo que quiere decir que para publicarlo en web deberé tomar en cuenta a toda esa gente que usa sistemas del «lado oscuro» y que no incluyen este códec por defecto. Complicarles con descargas/inclusiones de códecs a los usuarios finales no es muy buena idea.

En busca de una solución acudí al ffmpeg que he usado profusamente desde hace tiempo para codificación/conversión de audio y video, para probar transformar el video de ogv a flv encontrándome con la imposibilidad del ffmpeg (o ignorancia mía al correrlo) de leer el ogv como códec de entrada para la transformación. Siguiente paso, como siempre, leer la documentación del ffmpeg para buscar la salida …

En eso que leía y leía, me topé con una pequeña sección titulada «X11 grabbing» (Captura de X11) que me llamó la atención. Pues resulta que el ffmpeg no sólo es capaz de recibir un archivo y/o un flujo como entrada para la codificación/recodificación, sino que también es capaz de tomar como entrada una pantalla del sistema… Wow!!! dije y enseguida a probar… El comando resultante en mi caso fue:

ffmpeg -f x11grab -s svga -r 3 -i :0.0 -vcodec flv -y Videos/PHP_MySQL/primerPHPcli.flv

Parece más complejo de lo que realmente es, paso a describirlo:

  • -f x11grab: indica que se tome la interface gráfica (X11) como entrada
  • -s svga: indica el tamaño de la captura, se puede especificar como 800×600 por ejemplo, o con alguna de las definiciones pre-existentes como svga.
  • -r 3: indica que se capturen 3 cuadros por segundo
  • -i :0.0: indica que se tome la interface gráfica de la pantalla :0.0 que típicamente corresponde con el valor de la variable global DISPLAY
  • -vcodec flv: indica que deseo generar un archivo flv como resultado de la captura
  • -y: que sobre-escriba archivos preexistentes con el mismo nombre
  • Videos/PHP_MySQL/primerPHPcli.flv: es el archivo en el cual quiero que se grabe el video

El comando se queda corriendo en una consola mientras se graba el video… para detener basta presionar la tecla «q» en dicha consola.

Desventajas:

  • No graba el video con audio, así que sólo podemos hacer cine mudo. En mi caso no era inconveniente.
  • El archivo FLV generado, si bien es compatible con el web (es el formato que usa YouTube) los archivos son bastante más grandes que el OGV.

Igual y con todo es lo que estoy usando y me está ayudando a lograr mi cometido, aunque seguiré buscando una salida viable para los OGV que sí contienen audio y que son bastante más pequeños.