Bueno, realmente esta receta sirve para cualquier plataforma en la que funcionen Gnash y scrot (bonito nombre, LMAO! :-D).
El caso es que ayer me pasé toda la tarde buscando una solución decente para pasar SWFs (ShockWave Flash) a cualquier formato de imagen. Google está repleto de miles de programas cutre-shareware que no funcionan con Wine y la única orientación que veía en los foros de ayuda era usar las swftools, que son geniales, pero no hacen lo que necesitaba (renderizar una animación SWF y sacar un pantallazo de la misma).
Así que pensé: en UNIX se sigue el principio KISS (Keep It Simple, Stupid), cada aplicación pretende hacer pocas cosas y hacerlas bien. Tenemos una aplicación que reproduce SWF desde la línea de comandos y otra que saca pantallazos desde la línea de comandos. Las juntamos con un poco de pegamento shell script y arreglado 🙂
El resultado es un script que hace lo que promete, aunque tiene algunas limitaciones importantes:
- Tarda 1 segundo por animación SWF (no es muy lento, pero tampoco es que sea una maravilla).
- No te permite hacer nada más con el ordenador mientras se está utilizando (es un segundo por SWF, pero si son muchas… welcome back to the batch-world!!).
- Las imágenes generadas tienen la misma resolución que tu escritorio. Si las quieres en otra resolución, cambia la de tu escritorio 😀
Las limitaciones están causadas por el método troglodita para extraer el pantallazo. El script básicamente lanza la animación en pantalla completa, saca el pantallazo y mata el reproductor Flash. Ya sé que no es profesional, pero funciona O:-)
Aquí tenéis el código, quizá a alguien le sea de ayuda:
#!/bin/sh
GNASH="/usr/bin/gtk-gnash"
SCROT="/usr/bin/scrot"
OUTPUTFORMAT="jpg"
if [ $# -ne 1 ]
then
echo "error, usage: $(basename $0) file.swf"
exit 1
else
$GNASH --fullscreen $1 &
GNASHPID=$!
$SCROT -d 1 $1.$OUTPUTFORMAT
kill $GNASHPID
fi
Como podéis observar, es necesario indicar las rutas a Gnash y scrot para que funcione. Si queréis un SWF2PNG o similares, basta con cambiar el OUTPUTFORMAT.
Happy hacking 😉