jueves, 12 de enero de 2012 (Hace 280 dias)

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.

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…

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.

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 ?>.

Phpa

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-shell

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

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

jueves, 13 de octubre de 2011 (Hace 6 dias)

Desde hace ya muchas versiones atrás se puede establecer el icono de un álbum en Digikam simplemente arrastrando una imagen sobre una carpeta y seleccionando en el menú de opciones que aparece «Establecer como miniatura del álbum«.

AntesAntes

Si queréis iconizar muchos álbumes ó simplemente automatizar la creación de dicho icono podéis hacer en un terminal: basedatosDigikam "UPDATE albums SET icon=(SELECT id FROM images WHERE album=albums.id ORDER BY modificationDate DESC LIMIT 1) WHERE icon IS NULL"
Siendo basedatosDigikam el alias de
sqlite3 -list /ruta/a/mi/basedatos/digikam4.db

DespuésDespués

NOTA: La orden requiere (of course) sqlite3 y funciona sobre digikam4 (aunque debería hacerlo también sobre las últimas versiones de digikam3).
Esta orden modifica la base de datos. Para evitar sustos y error haz una copia de seguridad antes de jugar con ella. Basta con hacer algo como cp /ruta/a/mi/basedatos/digikam4.db /ruta/a/mi/basedatos/digikam4.db.bak

lunes, 10 de octubre de 2011 (Hace 9 dias)

Actualmente hay baneadas en este servidor web unas 3749 ips que en algún momento ha tratado de colar spam en el blog (si quereis ver la lista está aquí). La lista está preparada para insertar en un archivo de configuración Apache haciendo algo como:
Include /ruta/servidor/banbots.txtCon esto, cada una de las ips de la lista recibirá un Error 403 Forbiden (no autorizado) para cualquier tipo de acceso.
Consultando dicha lista podemos obtener desde que rangos de ip se recibe mayor cantidad de basura:
cat banbots.txt | cut -d " " -f3 | sed -r 's/([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})/\1\2/' | uniq -c | sort -nr | head -n 20
nos daría los 20 rangos de ips y el número de veces que se repite este en la lista anterior:
104 94.60.
40 173.234.
32 76.107.
28 69.162.
25 64.120.
23 94.63.
16 23.19.
15 91.121.
15 71.205.
14 109.230.
12 50.31.
12 108.62.
11 24.125.
11 173.208.
10 98.142.
10 68.68.
9 88.191.
9 72.8.
9 68.234.
9 38.109.
es decir hay 104 ips que empiezan por 94.60 (Rumania), 40 que empiezan por 173.234 (EEUU), etc…

Ahora podemos completar la linea anterior con cat banbots.txt | cut -d " " -f3 | sed -r 's/([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})/\1\2/' | uniq -c | sort -nr | head -n 20 | sed -r 's/ *([0-9]{1,3}) (.*)/-A INPUT -s \20.0\/16 -j DROP/' > archivo.txt; echo "COMMIT" >> archivo.txtQue produciría un archivo de texto con-A INPUT -s 94.60.0.0/16 -j DROP
-A INPUT -s 173.234.0.0/16 -j DROP
-A INPUT -s 76.107.0.0/16 -j DROP
-A INPUT -s 69.162.0.0/16 -j DROP
-A INPUT -s 64.120.0.0/16 -j DROP
-A INPUT -s 94.63.0.0/16 -j DROP
-A INPUT -s 23.19.0.0/16 -j DROP
-A INPUT -s 91.121.0.0/16 -j DROP
-A INPUT -s 71.205.0.0/16 -j DROP
-A INPUT -s 109.230.0.0/16 -j DROP
-A INPUT -s 50.31.0.0/16 -j DROP
-A INPUT -s 108.62.0.0/16 -j DROP
-A INPUT -s 24.125.0.0/16 -j DROP
-A INPUT -s 173.208.0.0/16 -j DROP
-A INPUT -s 98.142.0.0/16 -j DROP
-A INPUT -s 68.68.0.0/16 -j DROP
-A INPUT -s 88.191.0.0/16 -j DROP
-A INPUT -s 72.8.0.0/16 -j DROP
-A INPUT -s 68.234.0.0/16 -j DROP
-A INPUT -s 38.109.0.0/16 -j DROP
COMMIT
esta lista puedes insertarla rápidamente en el firewall con iptables-restore echo "*filter" | cat - archivo.txt | iptables-restore --noflush

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 ó de Google+

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