Grabando vídeo de lo que hacemos en pantalla

IMPORTANTE:
Gracias a un comentario a este mini-tutorial he descubierto istanbul. Permite grabar directamente desde el panel de GNOME, sin ninguna complicación. Además, el vídeo generado está en formato ogg, con lo que más libre imposible.

He compilado el paquete y está disponible en el repositorio de LinEx 2006. Se puede instalar directamente desde LinEx 2006 haciendo un clic aquí. Gracias a skyhook por la información.

Evidentemente el tutorial sigue siendo válido, pero ahora no merece la pena hacer la grabación de esa manera, a no ser que se necesite exportar a formato avi. Teóricamente, eso se puede hacer con el archivo que istanbul genera mediante:

transcode -x ogg -i desktop-recording.ogg -o mivideo.avi -y xvid

pero me da siempre el error (extract_ogm.c) OGG stream 1 is of an unknown type (bad header?). Así que de momento, por si alguien necesita el avi, a continuación sigue el tutorial antiguo:


Cómo grabar vídeo de lo que hacemos en el ordenador en LinEx

Algunos amigos me han preguntado cuál es la mejor forma de grabar un archivo de vídeo de lo que se hace en el ordenador en LinEx. Sabemos que hay algunas aplicaciones que permiten hacerlo en formato flash, pero no me acaban de convencer tanto por ser aplicaciones propietarias como por estar muy limitadas las capacidades de edición. Si lo grabamos en vídeo podemos, desde incorporarlo a un DVD para verlo en la TV, como usar cualquiera de los editores de vídeo disponibles para retocarlo y añadir efectos.

Así que al grano. Los afortunados usuarios de LinEx 2006 sólo tendrán que hacer clic en los enlaces que están aquí para instalar la(s) aplicación(es) necesaria(s).

El truco consiste en montar un servidor de VNC, y usar la aplicación vncrec para grabarlo, con un formato especial, en nuestro ordenador. Después usaremos transcode para convertirlo a un archivo avi.

A continuación se exponen estos pasos detalladamente:


Primer paso: arrancar el servidor de VNC

Hay dos formas de hacerlo, una más sencilla si disponemos de dos ordenadores en red, y una algo más complicada si sólo disponemos de un ordenador. El resultado final es el mismo cualquiera de los métodos usados.

Con un solo ordenador:

  • Instala el paquete vncserver
  • Ejecuta en una consola:
    vncserver -depth 16 -geometry 800x600
    
    (las dos opciones que se han añadido a vncserver, 16 bits de color y resolución de 800x600, son para reducir el tamaño del archivo final, no son imprescindibles para realizar la grabación). Nos pedirá una contraseña: introduce la que quieras (por dos veces).

Con dos ordenadores (los siguientes pasos se ejecutan en uno de los dos):

  • Instala el paquete x11vnc
  • Averigua su dirección de red, por ejemplo ejecutando:
    /sbin/ifconfig
    
  • Ejecuta en una consola:
    x11vnc -passwd micontra
    
    donde micontra es la contraseña que quieras usar.

Segundo paso: Realizar la grabación en formato VNC

  • Instala el paquete vncrec. Si estás usando dos ordenadores lo haces en el ordenador distinto al del paso anterior.
  • Abre una consola y ejecuta:
    vncrec -record sesion1.vnc ordenador
    
    Donde ordenador es localhost:1 si estás usando un solo ordenador, o la dirección de red del primero, si estás usando dos ordenadores.
  • Nos pedirá la contraseña que hemos introducido en el paso 1. La tecleamos y pulsamos intro.
  • Aparecerá una ventana con un escritorio completo en el que podremos hacer lo que queramos grabar. Para terminar la grabación basta con cerrar esa ventana. El resultado será nuestra grabación disponible en el archivo sesion1.vnc.

Si queremos ver el resultado en formato VNC, basta con ejecutar:

vncrec -play sesion1.vnc

y veremos lo que hemos grabado.

Si antes de grabar queremos preparar el escritorio porque, por ejemplo, no queremos grabar mientras se abren los programas que vamos a usar, podemos ejecutar:

xvncviewer ordenador

realizar lo que necesitamos y cerrar la ventana, antes de ejecutar vncrec. Obviamente, para poder hacer eso, es necesario haber instalado el paquete xvncviewer.


Tercer paso: convertir a archivo de vídeo

El archivo sesion1.vnc resultante del paso anterior es ya un archivo de vídeo que se puede reproducir en cualquier ordenador usando vncrec. Ocupa poco espacio y tiene la máxima calidad posible. Sin embargo, ese no es un formato común de vídeo, por lo que muy probablemente querremos convertir nuestro vídeo a otros formatos más conocidos que puedan ser reproducidos por mplayer, totem, etc. o grabados en un DVD. Explicaré el paso a formato avi con compresión divx porque es uno de los que mejor ratio de compresión tienen y su uso está muy extendido.

Antes de empezar, es preciso aclarar que en el paso a otro formato se perderá calidad, y la conversión puede llevar mucho tiempo, especialmente si el vídeo es largo y se exporta a un tamaño grande, como los 800x600 píxeles a los que se hizo la captura en el paso 2.

Estos son los pasos necesarios:

  • Instala los paquetes transcode y libxvidcore4.
  • Ejecuta en una consola:
    transcode -x vnc --use_rgb -i sesion1.vnc -o mivideo.avi -y xvid -k -f 10 --dvd_access_delay 20
    
  • Si quieres que el archivo mivideo.avi tenga una resolución inferior a 800x600, añade a la línea anterior:
    -Z resolución
    
    donde resolución es uno de los siguientes valores: 640x480, 720x480, 480x260, 320x172 o 240x128. Con eso conseguirás un archivo de menor tamaño y en menos tiempo.

La conversión a formato avi puede llevar mucho tiempo, incluso varias horas, dependiendo de la potencia del ordenador y la duración y resolución del vídeo a generar.


Con eso acaba este mini-tutorial. Aunque haya quedado un poquito largo, es algo bastante sencillo. Sólo comentaría que sería bastante fácil de realizar en Python o Gambas una pequeña aplicación gráfica que usara los comandos anteriores, de forma que no hubiera que usar la consola para nada. Sería una buena herramienta para añadir a la sección de accesorios de LinEx en los colegios e institutos, por si alguien con algo de tiempo libre se anima.