Alternativas a GifCam en Linux

Gabolonte Blasfemus

A pesar de que como todo internauta (término que denota mi avanzada edad), geek (puaj! todavía alguien usa eso?) o millennial (nuevo término de moda para que las masas puedan etiquetar algo sin molestarse en comprenderlo) disfruto ampliamente del incesante flujo de gif animados presente en los últimos años. No soy generalmente de crear propios, salvo de vez en cuando para situaciones específicas. Por eso es que hace tiempo dejé enterradas en el olvido suites para trabajar con dicho formato de imagen, hasta que hace un tiempo me enteré de la existencia de GifCam, y me resultó tan divertido y potencialmente adictivo que lo que realmente me faltaba ahora eran buenas ideas para empezar a crear animaciones divertidas.

gifcam

Pero más allá de eso, y en mi eterna dualidad Windows/Linux donde uso uno u otro de acuerdo a cómo se me acomodan las bolillas en el marote, pretendo tener alternativas a todo lo que aprecie de uno en el otro, así que deseaba desde hace mucho un equivalente de GifCam que pudiera usar en mi actual distro, Linux Mint Qiana. Acá es donde podría leerse un lindo cartelito con el típico here be dragons, porque la realidad es que no existe nada ni remotamente parecido a esta joya de la simpleza hecha freeware portable. Lo más cercano es usar alguna herramienta para capturar en video el sector de la pantalla deseado, para luego usar otra que convierta el video grabado a gif, con resultados variables de acuerdo a lo que se utilice. Nada tan directo e intuitivo como GifCam.

Así andaba frustrado con ese tema, hasta que en uno de esos momentos alpedísticamente productivos (o no) volví a la carga sobre el mismo, topándome con este excelente post de Emezeta, en donde se toma el tiempo de mencionar desde los orígenes del formato hasta todas las herramientas disponibles que existen en cada plataforma para su creación y edición. Y una de las que menciona el groso de Manz es para Linux, y no había oído hablar de ella hasta ese momento: Byzanz.

byzanz

Captura animada de byzanz realizada gracias a sí mismo

Byzanz, con ese extraño nombre, es una aplicación muy potente y versátil que en un principio permite realizar en Linux la función más importante y buscada de GifCam: Grabar directamente desde un área del escritorio a un archivo gif. La diferencia con este, y el pequeño detalle/problema, es que como pasa con muchas herramientas poderosas en el mundo *nix, byzanz se utiliza enteramente desde la línea de comandos. Un ejemplo típico de utilización de byzanz sería el siguiente:

$ byzanz-record --duration=5 --x=550 --y=100 --width=350 --height=200 animacion.gif

Como ven, dentro de los argumentos hay que especificar parámetros como el tiempo de captura y el área a capturar, expresada por las coordenadas que ubican su comienzo y seguido de su ancho y alto en píxeles. No tiene nada de intuitivo, por cada captura tenemos que andar midiendo con una regla virtual la pantalla. Por más buena que sea la herramienta, muere por su complejidad de uso.

Pero la verdadera pena con byzanz es que es una aplicación excelente, y posiblemente la única opción en su clase para el escritorio Linux, por lo que algo tenía que poder hacerse para remediar este problemita de la facilidad de uso. Y algo hay.

TL;DR: A través de un script de bash podemos capturar áreas del escritorio a voluntad para grabarlas directamente a gif, usando byzanz y un par de herramientas más.

En una genial respuesta a una pregunta en Ask Ubuntu vamos a encontrar una serie de scripts que permiten usar byzanz de una forma fácil, sin tener que especificar coordenadas numéricas. Hay dos opciones, un script que permite capturar el área de la ventana en la que se clickea, y otro donde directamente es posible seleccionar con el mouse el espacio a ser grabado. También hay una segunda versión del primero, más interactiva y un poco más gráfica. Claramente la opción más interesante es la de poder simplemente seleccionar el área arrastrando el mouse, por lo que voy a enfocarme en esa función, con un script hecho por mí que básicamente es una simple adaptación de los últimos dos mencionados. Vamos paso a paso con todo lo que hace falta.

1. Lo primero y esencial es saber si podemos disponer sin mayores problemas de byzanz en nuestra distro favorita. Si estamos en un Ubuntu o Linux Mint recientes podemos instalarlo con un simple apt-get.

$ sudo apt-get install byzanz

Si byzanz no está disponible desde los repositorios de nuestra distro, bueno, ya arrancamos mal y la cosa se complica más. Ahí es momento de acciones extremas como bajarlo desde su repositorio GIT e intentar compilarlo satisfaciendo previamente todas sus dependencias, tema álgido en el que no pienso ahondar porque asumo que está fácilmente disponible en toda distro popular moderna, y principalmente porque me da una paja atómica y no tengo ganas de fijarme se haría todo mucho más complejo.

2. Ahora nos toca asegurarnos de que tenemos instaladas todas las dependencias que vamos a necesitar para que el script funcione. Para eso, en Debian, Ubuntu o derivados ingresamos:

$ sudo apt-get install automake libx11-dev gdialog notify-osd

3. Todos los paquetes anteriores tienen un sólo propósito: Son para compilar y poder usar el comando xrectsel, que es el que permite seleccionar un área del escritorio con el mouse y devolver esa información en coordenadas que luego le pasaremos a byzanz. Debemos descargar sus fuentes desde GitHub, descomprimirlos, y ejecutar en la carpeta que contiene los fuentes los siguientes comandos:

$ ./bootstrap
$ ./configure --prefix /usr
$ make
$ sudo make DESTDIR="$directory" install

Luego de esto ya deberíamos tener xrectsel andando, para probarlo sólo basta ejecutarlo desde la línea de comandos y nuestro cursor debería cambiar a una cruz con la que podremos seleccionar un área del escritorio, y dicha área la veremos traducida en coordenadas en la terminal.

4. Ahora viene el momento de armar el script. Simplemente creamos un archivo de texto vacío y copiamos y pegamos lo siguiente:

#!/bin/bash

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Delay before starting
DELAY=10

# Standard screencast folder
FOLDER="$HOME/Imágenes"

# Default recording duration
DEFDUR=10

# Sound notification to let one know when recording is about to start (and ends)
beep() {
paplay /usr/share/sounds/freedesktop/stereo/message-new-instant.oga &
}

# Custom recording duration as set by user
USERDUR=$(gdialog --title "Duration?" --inputbox "Please enter the screencast duration in seconds" 200 100 2>&1)

# Duration and output file
if [ $USERDUR -gt 0 ]; then
D=$USERDUR
else
D=$DEFDUR
fi

# Dependency: xrectsel ( https://github.com/lolilolicon/xrectsel ) from FFcast2 ( https://github.com/lolilolicon/FFcast2 ). Clone the repository and run make to get the executable.
# xrectsel from https://github.com/lolilolicon/FFcast2/blob/master/xrectsel.c
ARGUMENTS=$(xrectsel "--x=%x --y=%y --width=%w --height=%h") || exit -1
# Notify the user of recording time and delay
notify-send "GIFRecorder" "Recording duration set to $D seconds. Recording will start in $DELAY seconds."

#Actual recording
sleep $DELAY
beep
byzanz-record -c --verbose --delay=0 --duration=$D ${ARGUMENTS} "$FOLDER/GIFrecord_$TIME.gif"
beep

# Notify the user of end of recording.
notify-send "GIFRecorder" "Screencast saved to $FOLDER/GIFrecord_$TIME.gif"

Es importante editar el valor de la variable FOLDER a fin de estar seguros que las capturas serán guardadas en la carpeta que queremos y que por sobretodo sea una ruta válida, caso contrario no se guardará nada. En mi caso simplemente puse la ruta de la carpeta de imágenes por defecto del usuario actual para una instalación en lenguaje español. El archivo lo guardamos con el nombre que se nos antoje y extensión .sh, y le damos permiso de ejecución.

Luego de esto sólo falta aplicarle permisos de ejecución al script y la podremos utilizar, armando nuestro propio lanzador para, por ejemplo, tenerlo a mano desde el dock de Unity o en el panel de escritorios como Gnome, Mate o Cinnamon. Al ser ejecutado, el script pregunta por la duración que debe tener la captura, y luego arranca la misma tras una demora (ajustable editando el script) de 10 segundos. Por medio del sistema de notificaciones de la distro y sonidos se anuncian estos eventos, incluido el inicio y fin de la grabación, para saber exactamente cuándo arranca y cuándo termina. Es importante notar que mediante este artilugio no tendremos ninguna indicación visual del área que está siendo grabada, por lo que es mejor que de antemano estén todos los elementos donde deben estar a la hora de hacer la selección de pantalla. Luego simplemente arrancamos con lo que queremos mostrar luego de escuchar la indicación sonora.

A continuación les dejo otra captura realizada con este script y byzanz, donde se puede ver que algunos colores no salen del todo bien en la adaptación a la paleta de 256 que maneja el formato gif, pero aún así el resultado es muy bueno:

captura con byzanz


Comments are closed.