Zoom con GoogleMaps

Miércoles, 11 de abril de 2012 (Hace 1 mes)

Partiendo del servicio de Google Static Maps que nos ofrece la posibilidad de linkar a imágenes estáticas de GoogleMaps hice un script para generar un vídeo de aproximación a una localización cualquiera del mapa mundi.

Descargamos las 20 imágenes que brinda GoogleMaps correspondientes a 20 niveles de zoom.

20 imágenes20 imágenes

for n in `seq 1 20`; do nombre=`printf %0.3d00 $n`;wget "http://maps.google.com/maps/api/staticmap?center=Calle,0,Ciudad,Pais&zoom=$n&size=640x480&maptype=satellite&sensor=true" -O "satelite_"$nombre".png"; done

Esto produciría una serie de 20 JPGs para cada una de las escalas que sirve GoogleMaps, (satelite_00100.jpg, satelite_00200.jpg, satelite_00300.jpg …satelite_02000.jpg). Ahora interpolamos generando mediante un zoom unas 14 imágenes (elección arbitraria) entre fotograma y fotograma. Sigue leyendo…

Descarga ordenada de las fotografías de cámara

Domingo, 25 de marzo de 2012 (Hace más de 1 mes)

Llevaba observando hace tiempo un comportamiento anómalo en Digikam pero que hasta el momento no había supuesto más problema que el de mera curiosidad, a saber: las fotografías se descargan de cámara sin respetar el orden en que fueron hechas. O mejor dicho: siguiendo otro orden al que fueron hechas.
Si descargamos una secuencia de fotografías numeradas desde la cámara con Digikam el programa descargaría dicha secuencia produciendo algo como: 2,1,3,5,4,7,6,9,8,11,10,12,14,13,16,15,18,17 (¿eres capaz de ver el patrón que sigue Digikam para desordenar las fotos?)

Hice un experimento para demostrar esto y publicarlo en KDEBugs.
Con imagemagick produje una secuencia de imágenes de números:
for n in $(seq 1 50); do \
convert -size 400x400 -background white -fill black -gravity center label:$n foto_$(printf %02d $n).jpg \
done

Esto produciría una secuencia de archivos foto_01.jpg foto_02.jpg foto_03.jpg … foto_50.jpg. Ahora los proyectamos en pantalla y los fotografiamos en orden.
mplayer -fps 1 mf://foto_*jpg
Ahora conecto la cámara y descargo las imágenes, lo que muestra Digikam para descargar es esto (nota que la secuencia empieza en el 2, no en el 1, estuve corto de reflejos)

Lectura desordenada de imágenesLectura desordenada de imágenes

Esto en condiciones normales apenas supondría un incordio, el problema surge si os ponéis a disparar timelapses, entonces el orden de los fotogramas es crítico y hay que recurrir a métodos de descarga alternativos.
Hay muchas maneras de descargar las imágenes respetando su orden. La más obvia (con ciertos límites*) es respetar el nombre del archivo con que lo generó la cámara. Para renombrar los archivos con la fecha de realización (y no verse limitado con la numeración máxima de 9999 de los cuatro dígitos) prefiero descargar las secuencias de fotografías con gphoto2:
gphoto2 -P --filename "/album/fotos/%Y%m%d/foto_%Y%m%H%M%S_%04n.jpg"

Protocolo Magnet para KDE 3 y 4

Viernes, 2 de marzo de 2012 (Hace más de 2 meses)

La criminalización del intercambio de archivos parece que va dando sus frutos, aunque no estoy seguro que sean las dulces manzanitas que alguno esperaría sino auténticos pepinillos del diablo, de esos que los tocas y te estallan en las narices.

El otro día Piratebay.org anunció que abandonaba el protocolo Torrent a favor del más reciente protocolo Magnet, que en cuanto a uso cotidiano viene siendo lo mismo que los archivos Torrent (de hecho la mayoría de los programas que estéis usando para descargar Torrents también trabajarán ya con Magnets) pero con la particularidad de que ahora la distribución de un documento no necesita un servidor que centralice las descargas.
Desde hace ya un par de semana que llevo descargando exclusivamente vía Magnet (usando Transmission bajo KDE) e ignoro si es por el efecto colateral de la caída de Megaupload, pero va echando leches y algo que antes era raro (películas de 1Gb en 3 horas) empieza a ser lo normal. Impresionante.

Los enlaces a Magnet se escriben del modo magnet:// y para que funcione correctamente la descarga automáticamente la descarga desde el navegador es necesario definir en KDE (en mi caso tanto en KDE3 como KDE4) el protocolo Magnet para vincular este con el programa de descargas (en mi caso Transmission).
Crea un archivo de texto con el siguiente contenido:exec=transmission "%U"
protocol=magnet
input=none
output=none
helper=true
listing=false
reading=false
writing=false
makedir=false
deleting=false
Icon=magnet
Class=:internet
Reemplaza en la primera línea transmission por el programa que quieras usar y guárdalo como /opt/kde3/share/services/magnet.protocol para kde3 ó /usr/share/kde4/services/magnet.protocol para kde4.
Listo, ya teneis registrado el protocolo magnet y cualquier URL que empiece por magnet:// será pasada a Transmission automáticamente.

Nota: aunque esta vinculación se puede hacer directamente en Firefox asociando protocolo-programa es necesario registrar el protocolo en el escritorio para que los enlaces funcionen en G.Chrome ó Konqueror/Dolphin.

Crear un gif animado estabilizando una imagen

Lunes, 13 de febrero de 2012

Hay varias herramientas para crear GIF animados de un modo rápido y sencillo desde una consola. Probablemente la más simple y rápida sea Imagemagick, la herramienta estrella y más versátil para manipulación de imágenes desde un terminal.

Por ejemplo para hacer el GIF con el que el otro día os comentaba el origen del nombre de la boca de Dragón habría bastado con copias las imágenes a una carpeta y escribir en un terminal:convert secuenciaFotos*jpg -delay 10 resultado.gif

12 fotogramas del gif12 fotogramas del gif

El problema es que como la secuencia de fotografías la tomé sujetando la cámara con una mano (sin trípode) y la otra sujetando la flor, el movimiento, si bien no es muy perceptible en fotogramas fijos producía un tembleque muy antipático en el gif animado, así es que manipulé algo las imágenes antes de generar el gif buscando estabilizar algo es movimiento.

Sigue leyendo…

Porqué no uso Qiviewer y otros KDEBugs

Domingo, 29 de enero de 2012

Momento ceporro

Pues básicamente porque uso GQview, un visor de imágenes tan viejo como simple y tan eficaz como rápido.

Pero si tuviera que cambiar una de mis últimas opciones sería un visor de imágenes como Qiviewer que se piensa durante un segundo la orden de abrir la imagen para acto seguido mostrar semejante mensaje:
No puedo, abro ó aceptas?“. Manda cojones el diálogo y manda cojones que no pueda abrir un simple TIF, a estas alturas… momento Yepes-Nopes

No sé, me estaré haciendo viejo, pero cada vez soporto menos estas chorradas.
Hace cosa de un mes mandé también a KDEBug en forma de wishlist otra “joya” en este campo del diseño de interfaces.
Blending exposure es una herramienta perteneciente al paquete KipiPlugins y que acompaña a Digikam y cuya función principal es coger N número de fotografías y combinarlas fusionando sus exposiciones para obtener una imagen (algo así como un PseudoHDR). El problema es que para seleccionar las fotografías y mostrar un simple checkbox “Alinear imágenes” el paquete se marca nada más y nada menos que cinco ventanas de diálogo en las cuales básicamente tenemos que hacer “Siguiente >> Si >> Siguiente >> ok >> si”.

Mockup propuesto en KDEBugMockup propuesto en KDEBug

Señores desarrolladores: la función por antonomasia de un ordenador personal es realizar tareas tediosas y repetitivas para evitar que estas las hagan humanos y conseguir que estos dediquen su tiempo a oficios más espirituales y creativos que apretar-un-puto-botón-que-dirige-a-otro-botón.
Por favor!! no añadan diálogos del tipo “¿Que prefiere? Sí ó también?.“. Gracias

Vídeo mosaico con Melt (mlt)

Jueves, 12 de enero de 2012

Jugando con Melt (mlt) el framework y engine de vídeo utilizado por Kdenlive y que ya ha salido por aquí en otras ocasiones.
Ahora que se va a cumplir un año en que llevo generando timelapses con la camara instalada en la terraza me puse a componer una mega-composición del año como ya hicieron con la correspondiente a los seis meses en dos minutos solo que en lugar de descomponer los vídeos en fotogramas y recomponerlos en un nuevo vídeo gigante los paso directamente a Melt para que escalandolos a 25% los situe en un mosaico de 4×4 = 16 vídeos y puesto que cada vídeo contiene 6 vídeos diarios el resultado es un mosaico con 96 videos correspondientes a los timelapse de Septiembre, Octubre, Noviembre y Diciembre (faltan algunos días y todos los domingos).

Para hacer un poco más ameno he acelerado un poquillo el resultado final.


Carga retrasada de youtube


Para hacer la composición necesitais tener instalada la última versión de Melt (estoy usando mlt 0.7.6), entrar en el directorio donde tengais los vídeos a componer y hacer algo como lo siguiente: Sigue leyendo…

Resumir un vídeo largo, script

Jueves, 29 de diciembre de 2011

Me han pasado unos amigos unos “encargitos al más puro estilo 100% Pringao Extreme. El más engorroso de todos es tratar de aprovechar unos vídeos antiguos para colgar en la web.

El problema es que son unos vídeos extremadamente largos (+1 hora) y con muy mala calidad (fueron grabados a principios de los 80 en super8 y digitalizados vaya usted a saber como/donde) y con un interés digamos que bajo-muy bajo para quien no sale en ellos, (especialmente si la duración del vídeo se prolongo muchos minutos).
Como no tenía ganas de comerme (gratis) la edición de vídeo extralarga que supondría seleccionar, cortar, mover, montar, editar… etc.. he tomado una decisión salomónica: que lo decida el azar.

Así es que me hice un script rapidito que mediante mencoder trocea un vídeo a intervalos y genera otro vídeo que vendría a ser un resumen del original con partes escogidas al azar.
Como no hay recodificación de vídeo/audio el proceso dura un instante (de un vídeo de 1Gb obtenemos un resumen de 35Mg en unos 15 segundos). Por si alguien le interesa, el script:
#!/bin/bash
echo "Cambiar a $(pwd)"
cd "$(pwd)"

if [ -f "$1" ]; then
nombre=$(basename "$1")
nombreUnico=$(echo "$nombre" | md5sum | cut -d " " -f1)
prefijo=${nombre/.*/}
sufijo=${nombre/*./}
identificacion=$(mplayer -identify "$1" -vo none -ao none)
clear
echo "La identificación dice que:"
duracion=$(echo "$identificacion" | grep "ID_LENGTH" | cut -d "=" -f2); duracion=${duracion/.*/}
while [ "$yn" != "s" ]; do
echo "Video dura $duracion segundos"
echo "---------------------------------"
read -p "Indica la duración de los fragmentos que se van a extraer (en segundos): " duracionFragmento
read -p "Indica el número de fragmentos de $duracionFragmento segudos que quieres obtener: " numeroFragmentos
echo
echo -n "Obtendriamos un vídeo de $numeroFragmentos fragmentos x $duracionFragmento segundos = "; longitudResumen=$(echo "scale=0; $duracionFragmento * $numeroFragmentos" | bc) ; echo " $longitudResumen segundos en total"
echo "scale=0; ($duracion - $longitudResumen)/($numeroFragmentos-1)"
longitudIgnora=$(echo "scale=0; ($duracion - $longitudResumen)/($numeroFragmentos-1)" | bc )
echo "Se ignoraría fragmentos de $longitudIgnora segundos"

read -p "Es esto lo que quieres? [sn]" yn
done
reinicioSalto=$(expr $duracionFragmento + $longitudIgnora)
contador=0
for inicio in $(seq 1 $reinicioSalto $duracion); do
echo "Obtener $duracionFragmento segundos a partir del segundo $inicio"
let contador++
indice=$(printf "%02d" $contador)

mencoder "$1" -ss $inicio -endpos $duracionFragmento -ovc copy -oac copy -o "$nombreUnico""-parte_$indice.""$sufijo"
done
mencoder $nombreUnico*".$sufijo" -oac copy -ovc copy -o "$prefijo""_resumen.""$sufijo"
find . -type f -name "$nombreUnico*$sufijo" -delete

else
echo "El primer argumento debe ser un archivo de vídeo válido"
echo "\"$1\" no cumple ese requisito"
exit
fi

Si se copia esto un archivo (videopartes.sh) y se ejecuta:

  • Obtienen la duración en seg del vídeo pasado como primer argumento
  • Solicita duración S (en segundos) deseada de los fragmentos F
  • Solicita Numero de fragmentos F deseados
  • Solicita confirmación y con esos datos obtiene del vídeo original fragmentos F de videos de duración S distribuidos a intervalos regulares
  • A continuación ensambla esos fragmentos en un nuevo vídeo con idéntica codificación video/audio
  • Se eliminan los fragmentos
  • No hay transiciones, ni fades, ni efecto ninguno. El vídeo original no es alterado

Ejemplo: Un vídeo dado de 2000 segundos. Obtener 25 fragmentos de 6 segundos.
Resultado: vídeo de 150 segundos tomando 6 segundos de imagen cada 74 segundos de vídeo

Otro día os enseño el resultado de esta edición-extra-rápida y algún fragmento de estos vídeos que son auténtica arqueología moderna de la espeleología Murciana.

Editores interactivos de PHP

Jueves, 15 de diciembre de 2011

Dos editores interactivos de PHP para ejecutar código php directamente en una consola. Muy útiles para depurar funciones, probar expresiones regulares, etc… sin tener que andar probando la ejecución de archivos ó servidores web.

El más sencillo, Phpa es un editor interactivo de Php desde la linea de comandos. Simplemente abrir un terminal, ejecutar phpa y comenzar escribir php sin necesidad de incluir las etiquetas de apertura <?php y cierre ?>.

PhpaPhpa

El código php se ejecuta a cada salto de línea y dispone de navegacion por el historial de la sesión y autocompletado con TAB. Para instalarlo simplemente descarga este archivo de texto phpa.txt, muevelo a /usr/bin/phpa y hazlo ejecutable (chmod +x /usr/bin/phpa)

Php-shell es básicamente idéntico pero incopora algunas mejoras como tolerancia a errores fatales, sistema de ayuda sobre las funciones y personalización de la interfaz. Incorpora un lanzador BAT para Windows.

Php-shellPhp-shell

Para instalar php-shell descarga PHP_Shell-0.3.1.tgz e instala haciendo pear install PHP_Shell-0.3.1.tgz.

Unsort

Miércoles, 26 de octubre de 2011

Para ordenar una lista de elementos en un terminal bash disponemos de sort, la cual ordena la lista que le pasemos. Podemos ordenar alfabéticamente los archivos de un directorio o una lista devuelta por otro programa con#> echo -e "boro\nzirconio\nnitrogeno\nhelio\nplomo" | sort
boro
helio
nitrogeno
plomo
zirconio

Pero ¿y para desordenar una lista ?
Copia la siguiente línea en el archivo ~/.alias de tu máquina

alias unsort='while read linea; do echo "$RANDOM::$linea"; done | sort -n|sed "s/[0-9]*:://"'Que viene a decir: a cada línea recibida le anteponemos un número al azar, ordenamos las líneas según ese número y devuelve esa lista después de quitarle dicho número.

A continuación puedes hacer#> echo -e "boro\nzirconio\nnitrogeno\nhelio\nplomo" | sort | unsort
nitrogeno
zirconio
boro
helio
plomo

O por ejemplo escoger 5 archivos al azar en un directorio conls -1 | unsort | head -n5

Cuaderno de campo es un blog desarrollado y mantenido por Trebol-a y en el que escriben Trebol-a, Miguel, Merche y Mónica
Si quieres saber algo más sobre los autores acude a la página acerca-de, si quieres contactar con alguno de nosotros hazlo a través de contactar

Creative Commons: Todo el contenido de la web (imágenes, textos, vídeos, a excepción de aquellas obras de otros autores enlazados por Cuaderno de Campo) se acoge a los términos expresados en la licencia Creative Commons