Creargif

Este script se encarga de crear un gif a partir de un video indicándole el tiempo de comienzo y su duración.
Para utilizar este script es necesario tener el mplayer e imagemagick.

El script en cuestión:


Para instalar el script tienen que crear un archivo nuevo y llamarlo como quieran (yo lo llamé creargif y lo coloqué en mi carpeta personal, así que en los ejemplos voy a usar esos datos), copian el código y lo guardan, o lo pueden descargar de acá: http://www.mediafire.com/?va4vw35cbhp3bat. Lo siguiente es abrir la terminal y escribir ('creargif' hay que cambiarlo por la dirección completa al archivo).

$ sudo cp creargif /usr/bin/creargif
$ sudo chmod a+x /usr/bin/creargif

Ahora podrán crear gifs usando la siguiente sintaxis:

$ creargif <dirección del video> <comienzo del gif> <duración en segundos> <nombre de gif>

(El último argumento es opcional)
Ejemplos:

$ creargif video.avi 0:10:00 5

$ creargif video.avi 0:10:00 5 animacion.gif

En ese ejemplo se crea un gif extraído de video.avi que comienza en 0:10:00 y dura 5 segundos.

Cuando corren el programa, primero les va a mostrar esa sección del video en una nueva ventana en un bucle para que vean si quieren crear el gif, cuando cierren la ventana les va a preguntar si quieren crear el gif, si ingresan "y" se creará el gif en un archivo llamado animation.gif (si no lo modifican será sobrescrito la próxima vez que creen un gif) a menos que hayan especificado otro nombre.

Explicación del script línea por línea


Comenzando por la línea 9, simplemente se fija si hay por lo menos 3 argumentos, si no hay lo único que hará es mostrar la línea "Faltan uno o más argumentos", en caso contrario el script continúa.

La siguiente línea es mplayer -ao null -loop 0 -ss $2 -endpos $3 "$1" esto lo que hace es mostrar el fragmento del video en bucle en una nueva ventana, la opción -ao null quita el sonido, -loop 0 hace que quede en un bucle infinito, -ss $2 indica donde comenzar el video ($2 es la variable que contiene el segundo argumento), -endpos $3 indica la duración en segundos y finalmente "$1" es la dirección del video.

El siguiente fragmento se encarga de asegurarse que la carpeta que se creará temporalmente no exista ya que al final será borrada y si ya hubiera una carpeta con el mismo nombre no solo sería borrada sino que también podría usar cualquier imagen que ya estuviera en la carpeta para el gif.
        dir="gif"
        while [ -d $dir ]
        do
                dir="gif$RANDOM"
        done
Lo que hace es revisar que no exista una carpeta llamada gif y en el caso de que exista cambia el nombre aleatoriamente hasta que no exista una carpeta con ese nombre. dir="gif$RANDOM" asigna el nombre gif con cuatro números aleatorios al final a la variable dir.

En la línea 21 simplemente se muestra la pregunta de si se quiere crear el gif y en la 22 se obtiene la opción que se ingrese y se guarda en la variable opt.

La siguiente parte se fija si hay un cuarto argumento, en el caso de que lo haya lo guarda en la variable anim, en el caso contrario guarda el nombre por defecto animation.gif.

El siguiente if revisa que la opción ingresada sea una y o Y. Dentro del if la primera línea es muy parecida a la línea que muestra el video solo que en este caso el bucle infinito no se encuentra y se agrega la opción -vo jpeg:outdir=$dir que guarda todas las imágenes del fragmento en la carpeta $dir cuyo nombre fue establecido al principio del código.

Las siguientes dos líneas son para averiguar el tiempo que debe transcurrir entre dos imágenes de la animación, para eso en la primera línea se guarda en la variable am la cantidad de archivos en la carpeta $dir y en la siguiente se calcula el tiempo dividiendo el tiempo en segundos que se había ingresado entre mil para pasarlo a milisegundos y después entre la cantidad de archivos am.

La siguiente línea es la que crea la animación en cuestión usando una de las herramientas de imagemagick
convert -delay $delay -coalesce  -layers OptimizeFrame -loop 0 $dir/*.jpg $anim
La opción -delay $delay asigna el tiempo entre las imágenes que fue calculado anteriormente, -loop 0 indica que debe estar en un bucle infinito, -coalesce  -layers OptimizeFrame se encarga de optimizar la animación y las siguientes dos opciones indican las imágenes de entrada ($dir/*.jpg) y la de salida $anim que depende de si se ingresó un cuarto argumento.
Lo último es borrar la carpeta $dir y el script está terminado.

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...