Hace tiempo hice una aplicación muy simple que extraía imágenes de un video y armaba un gif animado pero sólo servía para linux y tampoco era muy cómoda. Ahora tengo mejores herramientas, así que hice una aplicación con interfaz gráfica y que se puede usar tanto en Windows como en Linux.
Es bastante simple, se elige el video, se pone el tiempo de inicio, la duración y el nombre del archivo de salida. El programa guardará el archivo en la misma carpeta en la que fue ejecutado.
El programa está en su etapa alpha, quedan cosas por hacer y su funcionamiento es muy simple, lo próximo que pienso hacer es poder elegir las dimensiones del gif resultante. Por ahora no acepta que se dejen campos vacíos.
Para hacerlo utilicé OpenCV y el programa images2gif.py de visvis.
Pueden descargar el programa de acá:
Está listo para descargar y utilizar, es probable que hay que instalar alguna dependencia en Linux pero no estoy seguro de cuales, iré averiguando cuando surjan problemas.
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
domingo, 19 de enero de 2014
lunes, 28 de enero de 2013
Nerd Programming - Crear gif a partir de video en linux
Actualización: Agregué un par de líneas de código que permiten que se agregue un cuarto argumento al comando para especificar el nombre del archivo de salida.
Crear gifs a partir de videos es cosa de todos los días, así que me imaginé que ya habría un software que se encargara de hacer eso, cuando busqué cómo hacerlo en Ubuntu lo primero que encontré fue cómo hacerlo usando mplayer y GIMP, enseguida dejé de buscar y se me ocurrió que podría escribir un script que se encargara de hacer todo el trabajo al escribir una simple línea en la terminal.
Así fue que creé este script que dándole los datos de la dirección del video, el momento en el que debe comenzar el gif y su duración en segundos, crea el gif automáticamente. 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. Lo siguiente es abrir la terminal y escribir
$ 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.
Para los que les interese, voy a explicar como funciona el 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.
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.
Crear gifs a partir de videos es cosa de todos los días, así que me imaginé que ya habría un software que se encargara de hacer eso, cuando busqué cómo hacerlo en Ubuntu lo primero que encontré fue cómo hacerlo usando mplayer y GIMP, enseguida dejé de buscar y se me ocurrió que podría escribir un script que se encargara de hacer todo el trabajo al escribir una simple línea en la terminal.
Así fue que creé este script que dándole los datos de la dirección del video, el momento en el que debe comenzar el gif y su duración en segundos, crea el gif automáticamente. 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. Lo siguiente es abrir la terminal y escribir
$ 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.
Para los que les interese, voy a explicar como funciona el 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.
viernes, 20 de julio de 2012
Cómo instalar PyDice
Pasándole el programa PyDice a un amigo que no sabe de programación ni de python en general me di cuenta de que instalar ese programa puede ser complicado si no se sabe lo que se está haciendo, además vi que el instalador que armé no está andando muy bien (tendré que revisarlo más tarde), así que decidí escribir una guía simple de cómo instalar el programa.Primero se descargan la última versión del programa: http://www.mediafire.com/?n7f70r4mphgn3a2 (siempre hay un link a la última versión en la barra lateral).
Ubuntu
En una PC con Ubuntu es muy simple, primero hay que asegurarse de tener instalados los paquetes python3 y python3-tk (el instalador debería fijarse si están instalados e instalarlos si no lo están, pero parece que no funciona eso). Si no los tienen, éstos se pueden instalar con un par de comandos en la terminal:
Lo siguiente es descomprimir el archivo zip de PyDice y correr el archivo install.sh en una terminal, al final debería estar funcionando y correr con el comando pydice.
Linux (todas las distros)
Para otras distros no basadas en Ubuntu hay que asegurarse de tener instalados los paquetes python3 y python3-tk, para instalarlos depende de la distro que estén usando, así que de eso se tendrán que ocupar ustedes.
Para instalar el PyDice hay distintas maneras de hacerlo, pero creo que la más simple es editar el archivo install.sh y cambiar todo su contenido por el siguiente:
Cuando corran el archivo install.sh, se encargará de guardar la carpeta pydice en su home y de agregar el comando pydice para que lo puedan correr desde una terminal.
Windows
Estuve buscando cómo correr el programa en Windows, pero sin Windows en mi PC no puedo probar, encontré una manera de crear un ejecutable, pero devuelta, preciso Windows para ello. Más adelante voy a buscar más información y buscar una manera de hacerlo lo más fácil posible.
Por ahora tengo una sugerencia pero no se si funcionará, primero hay que instalar python3 (este instalador debería instalarlo ya con todo lo necesario), después se abre una ventana de comandos (Ejecutar -> cmd) y ahí se corre el comando:
python c:/ruta/del/archivo/dados.py
Hay que cambiar c:/ruta/del/archivo/dados.py por la ruta al archivo dados.py. Esto debería correr el programa, si no se corre, puede ser porque python no está asociado a los "autoejecutables", acá dice cómo arreglar esto.
Ubuntu
En una PC con Ubuntu es muy simple, primero hay que asegurarse de tener instalados los paquetes python3 y python3-tk (el instalador debería fijarse si están instalados e instalarlos si no lo están, pero parece que no funciona eso). Si no los tienen, éstos se pueden instalar con un par de comandos en la terminal:
$ sudo apt-get install python3
$ sudo apt-get install python3-tk
Lo siguiente es descomprimir el archivo zip de PyDice y correr el archivo install.sh en una terminal, al final debería estar funcionando y correr con el comando pydice.
Linux (todas las distros)
Para otras distros no basadas en Ubuntu hay que asegurarse de tener instalados los paquetes python3 y python3-tk, para instalarlos depende de la distro que estén usando, así que de eso se tendrán que ocupar ustedes.
Para instalar el PyDice hay distintas maneras de hacerlo, pero creo que la más simple es editar el archivo install.sh y cambiar todo su contenido por el siguiente:
#!/bin/bash
MY_PATH="`dirname \"$0\"`"
cp -r $MY_PATH/pydice/ /home/$USER/
sudo cp $MY_PATH/pydice/pydice /usr/local/bin/
sudo chmod +x /usr/local/bin/pydice
chmod u+x /home/$USER/pydice/dados
rm /home/$USER/pydice/pydice
MY_PATH="`dirname \"$0\"`"
cp -r $MY_PATH/pydice/ /home/$USER/
sudo cp $MY_PATH/pydice/pydice /usr/local/bin/
sudo chmod +x /usr/local/bin/pydice
chmod u+x /home/$USER/pydice/dados
rm /home/$USER/pydice/pydice
Cuando corran el archivo install.sh, se encargará de guardar la carpeta pydice en su home y de agregar el comando pydice para que lo puedan correr desde una terminal.
Windows
Estuve buscando cómo correr el programa en Windows, pero sin Windows en mi PC no puedo probar, encontré una manera de crear un ejecutable, pero devuelta, preciso Windows para ello. Más adelante voy a buscar más información y buscar una manera de hacerlo lo más fácil posible.
Por ahora tengo una sugerencia pero no se si funcionará, primero hay que instalar python3 (este instalador debería instalarlo ya con todo lo necesario), después se abre una ventana de comandos (Ejecutar -> cmd) y ahí se corre el comando:
python c:/ruta/del/archivo/dados.py
Hay que cambiar c:/ruta/del/archivo/dados.py por la ruta al archivo dados.py. Esto debería correr el programa, si no se corre, puede ser porque python no está asociado a los "autoejecutables", acá dice cómo arreglar esto.
jueves, 19 de julio de 2012
IDE de flash en Linux
Ya que hace poco cambié a Ubuntu en la PC que usaba para programar en Actionscript3, me puse a averiguar cual era la mejor manera de armar una IDE (Entorno de Desarrollo Integrado) de Flash en Linux. Después de un rato de búsqueda encontré solamente artículos viejos que hablaban de métodos ya obsoletos. Así que se me ocurrió que en lugar de tener un programa que organice todo, podría tener un editor de texto con los códigos de colores de ActionScript y tener un simple comando para compilar el proyecto, voy a explicar cómo lo hice para quien quiera programar en Actionscript en Linux.
Primero se van bajando el Flex, yo lo descomprimí y lo guardé en la carpeta /.flex dentro de mi home pero se puede guardar en cualquier lugar.
Lo siguiente es instalar un editor de texto, yo recomiendo el Geany que ya tiene el código de colores para ActionScript y viene en los repositorios de Ubuntu, además tiene una consola integrada para correr más cómodamente los comandos en la terminal.
Para instalar en Ubuntu corren lo siguiente en una terminal:
$ sudo apt-get install geany
Si prefieren el Gedit, pueden instalar un archivo de lenguaje para el ActionScript. Para ello descargan este archivo y lo guardan en la carpeta /usr/share/gtksourceview-1.0/language-specs. Traducido de esta página: http://www.williambrownstreet.net/wordpress/?p=84
Yo estoy usando firefox para ver el archivo compilado (más adelante explico cómo hice para que abra el archivo automáticamente al compilar), así que hay que fijarse de tener el plugin de flash al día, por suerte hay una página que nos muestra sencillamente si es necesario actualizar. Si es necesario actualizar, hay un tutorial de cómo hacerlo en la página de apoyo de mozilla.
Lo último es hacer que sea fácil compilar el proyecto y que se corra automáticamente en firefox para mayor comodidad. Primero se crea un programa que hará la compilación de forma genérica, para eso se crea un archivo (yo lo llamé compflash) con el siguiente contenido:
#!/bin/bash
#Primer argumento: dirección de entrada
#Segundo argumento: dirección de salida
/home/freakrho/.flex/bin/mxmlc $1 -static-link-runtime-shared-libraries
mv "${1%.*}.swf" $2
firefox $2
Tienen que cambiar /home/freakrho/.flex por la ruta a donde copiaron el Flex. Este programa lo que hará es compilar el archivo que se ponga como primer argumento y guardarlo en el que se ponga como segundo. Suponiendo que el programa compflash se encuentre en el home y el archivo main.as también, una manera de compilarlo sería el siguiente comando:
$ ./compflash main.as main.swf
Ahora que está hecho el programa, lo primero es colocarlo en la carpeta /bin para poder correrlo como cualquier otro programa, y darle permisos de ejecución para poder correrlo. Eso se hace simplemente con el siguiente comando (suponiendo que ya se está ubicado en la carpeta donde esté el programa):
$ sudo mv compflash /bin/compflash; sudo chmod u+x /bin/compflash
Le pueden dar el nombre que quieran (compflash no es tan lindo), solo tómenlo en cuenta para la siguiente parte.
Ahora tenemos un comando que compila el programa, pero no es tan simple, así que para simplificar las cosas vamos a hacer un programa para el proyecto en particular en el que estemos trabajando, así que cada vez que empecemos un proyecto hay que crear uno de estos, pero es muy simple. Se crea un archivo (yo lo llamé play) en un lugar que recuerden (por ejemplo, la carpeta principal del proyecto) con el siguiente contenido:
#!/bin/bash
compflash /home/freakrho/workspace/test/src/Main.as /home/freakrho/workspace/test/bin/colour.swf
Es bastante simple, tienen que cambiar compflash por el nombre del programa que hayan elejido, /home/freakrho/workspace/test/src/Main.as por la ruta al archivo main del proyecto y /home/freakrho/workspace/test/bin/colour.swf por la ruta del archivo swf resultante. Yo nombré a ese archivo play, así que para compilar mi proyecto solo tengo que escribir en la terminal (ubicado en la carpeta del proyecto):
Actualización: No me di cuenta en el momento pero Geany se puede configurar para que ese archivo se corra al presionar F5. Tienen que ir a Construir -> Establecer comandos de construcción y escribir la ruta al archivo play en la opción "Ejecutar".
Y listo, el programa compila el proyecto y automáticamente lo abre en firefox para poder probarlo, ya probé esto con un juego simple hecho con FlashPunk y funciona perfecto.
Espero que esto ayude a otros novatos en el tema como yo, lo hice porque no encontré ningún tutorial al día para tener una IDE de flash en Linux.
Primero se van bajando el Flex, yo lo descomprimí y lo guardé en la carpeta /.flex dentro de mi home pero se puede guardar en cualquier lugar.
Lo siguiente es instalar un editor de texto, yo recomiendo el Geany que ya tiene el código de colores para ActionScript y viene en los repositorios de Ubuntu, además tiene una consola integrada para correr más cómodamente los comandos en la terminal.
Para instalar en Ubuntu corren lo siguiente en una terminal:
$ sudo apt-get install geany
Si prefieren el Gedit, pueden instalar un archivo de lenguaje para el ActionScript. Para ello descargan este archivo y lo guardan en la carpeta /usr/share/gtksourceview-1.0/language-specs. Traducido de esta página: http://www.williambrownstreet.net/wordpress/?p=84
Yo estoy usando firefox para ver el archivo compilado (más adelante explico cómo hice para que abra el archivo automáticamente al compilar), así que hay que fijarse de tener el plugin de flash al día, por suerte hay una página que nos muestra sencillamente si es necesario actualizar. Si es necesario actualizar, hay un tutorial de cómo hacerlo en la página de apoyo de mozilla.
Lo último es hacer que sea fácil compilar el proyecto y que se corra automáticamente en firefox para mayor comodidad. Primero se crea un programa que hará la compilación de forma genérica, para eso se crea un archivo (yo lo llamé compflash) con el siguiente contenido:
#!/bin/bash
#Primer argumento: dirección de entrada
#Segundo argumento: dirección de salida
/home/freakrho/.flex/bin/mxmlc $1 -static-link-runtime-shared-libraries
mv "${1%.*}.swf" $2
firefox $2
Tienen que cambiar /home/freakrho/.flex por la ruta a donde copiaron el Flex. Este programa lo que hará es compilar el archivo que se ponga como primer argumento y guardarlo en el que se ponga como segundo. Suponiendo que el programa compflash se encuentre en el home y el archivo main.as también, una manera de compilarlo sería el siguiente comando:
$ ./compflash main.as main.swf
Ahora que está hecho el programa, lo primero es colocarlo en la carpeta /bin para poder correrlo como cualquier otro programa, y darle permisos de ejecución para poder correrlo. Eso se hace simplemente con el siguiente comando (suponiendo que ya se está ubicado en la carpeta donde esté el programa):
$ sudo mv compflash /bin/compflash; sudo chmod u+x /bin/compflash
Le pueden dar el nombre que quieran (compflash no es tan lindo), solo tómenlo en cuenta para la siguiente parte.
Ahora tenemos un comando que compila el programa, pero no es tan simple, así que para simplificar las cosas vamos a hacer un programa para el proyecto en particular en el que estemos trabajando, así que cada vez que empecemos un proyecto hay que crear uno de estos, pero es muy simple. Se crea un archivo (yo lo llamé play) en un lugar que recuerden (por ejemplo, la carpeta principal del proyecto) con el siguiente contenido:
#!/bin/bash
compflash /home/freakrho/workspace/test/src/Main.as /home/freakrho/workspace/test/bin/colour.swf
Es bastante simple, tienen que cambiar compflash por el nombre del programa que hayan elejido, /home/freakrho/workspace/test/src/Main.as por la ruta al archivo main del proyecto y /home/freakrho/workspace/test/bin/colour.swf por la ruta del archivo swf resultante. Yo nombré a ese archivo play, así que para compilar mi proyecto solo tengo que escribir en la terminal (ubicado en la carpeta del proyecto):
$ ./play
Actualización: No me di cuenta en el momento pero Geany se puede configurar para que ese archivo se corra al presionar F5. Tienen que ir a Construir -> Establecer comandos de construcción y escribir la ruta al archivo play en la opción "Ejecutar".
Y listo, el programa compila el proyecto y automáticamente lo abre en firefox para poder probarlo, ya probé esto con un juego simple hecho con FlashPunk y funciona perfecto.
Espero que esto ayude a otros novatos en el tema como yo, lo hice porque no encontré ningún tutorial al día para tener una IDE de flash en Linux.
Suscribirse a:
Entradas (Atom)
