dic 17

Bueno, como lo prometido es deuda, estuve trasteando en un script para adaptar imágenes al ipod. El script en cuestión es muy sencillito. Lo único que hace es recorrer el directorio que le indiquemos de forma recursiva, y si encuentra una imagen más alta que ancha (es decir, una imagen vertical), la inclina 90 grados para que se vea mejor en la pantalla del ipod (estamos hablando de un ipod video, con pantalla 4:3).

No hice nada más de conversión de formatos ni tamaño, ni nada por el estilo, porque de eso ya se encarga el tripod, que es un programa muy listo, así que para demás tareas, a bajárselo tocan. En fin, aquí está la obra:

#!/bin/bash



#----------PARAMETROS DE EJECUCION----------
formatos='*.bmp *.BMP *.gif *.GIF *.jpeg *.JPEG *.jpg *.JPG *.png *.PNG'
#-------------------------------------------



#----------FORMATO DE CONVERSION------------
angulo_rotacion='90'
#-------------------------------------------



#-----------FUNCIONES------------------------
function recorrer_directorios {

    for i in $formatos ; do

	if [[ -a $i ]] ; then

	    tamanho=`identify "${i}"`
	
	    #Eliminamos el nombre del fichero de la salida del identify
	    tamanho=${tamanho/"${i}"/}
	    tamanho=`echo $tamanho | cut -d\  -f2`

	    tamanho_h=`echo $tamanho | cut -dx -f1`
	    tamanho_v=`echo $tamanho | cut -dx -f2`

	    if (( $tamanho_v > $tamanho_h )) ; then
		convert "${i}" -rotate $angulo_rotacion "${i}"
		echo "Convertido: $i"
	    else
		echo "No convertido: $i"
	    fi
	fi
	
    done
    
    for i in * ; do
	
	if [[ -d $i ]]  ; then #Si el elemento es un directorio
	    cd "${i}"
	    recorrer_directorios
	    cd ..
	fi  
    done 
}
#-------------------------------------------



echo 'Para poder ejecutar este script'
echo 'es imprescindible tener instalado'
echo 'el pograma de conversion imagemagick.'
echo
echo 'ATENCION: este script eliminara los ficheros'
echo 'originales tras la conversion.'
echo -n 'Desea continuar? (s/n): '

read orden

if [ "$orden" = "s"  ]; then
    echo -n 'Directorio: '
    read directorio

    if [[ -d "${directorio}" ]]  ; then #Si el elemento es un directorio
	cd "${directorio}"
	recorrer_directorios
    else
	echo "Directorio no valido"
    fi
fi

También le hice unos pequeños retoques al script para pasar videos a formato ipod, para evitar que sacara unos cuantos mensajes de error inútiles que no pintaban nada y demás. Aquí está la versión definitiva:

#!/bin/bash



#----------PARAMETROS DE EJECUCION----------
ejecutable='ffmpeg'

formatos='*.asf *.ASF *.asx *.ASX *.avi *.AVI *.flv *.FLV *.m1v *.M1V *.m4v *.M4V *.mov *.MOV *.mp2 *.MP2 *.mpg *.MPG *.mpeg *.MPEG *.mp4 *.MP4 *.ogm *.OGM *.qt *.QT *.ra *.RA *.ram *.RAM *.swf *.SWF *.wmv *.WMV'
#-------------------------------------------



#----------FORMATO DE COMPRESION------------
audio_codec='libfaac'
video_codec='mpeg4'
formato_forzado='mp4'
extension='mpg'

audio_sampling_rate='44100'
audio_bitrate='128kb'
video_bitrate='300kb'

tamanho_pantalla='320x240'
#-------------------------------------------



#-----------FUNCIONES------------------------
function recorrer_directorios {

    mkdir procesados
    mkdir salida
    echo ' '

    for i in $formatos ; do

	if [[ -a $i ]] ; then

	    #Comprimimos el fichero de video pasandolo a un fichero temporal sin extension de video para no alterar el funcionamiento del bucle
	    $ejecutable -i "${i}" -acodec $audio_codec -ar $audio_sampling_rate -ab $audio_bitrate -vcodec $video_codec -b $video_bitrate -s $tamanho_pantalla -f $formato_forzado "${i}".tmp
	
	    #Si el tamanho de la salida es 0 por culpa del audio, recomprimimos
	    tamanhotemp=`ls -l $directorio/"${i}".tmp`
	    tamanho=`echo $tamanhotemp | cut -d\  -f5`

	    if [ "$tamanho" = "0" ] ; then

		rm "${i}".tmp
		$ejecutable -i "${i}" -vcodec $video_codec -b $video_bitrate -s $tamanho_pantalla -f $formato_forzado "${i}".tmp
	    fi

	    #Pasamos el fichero a comprimir al directorio de procesados y el fichero comprimido al directorio de salida, con la extension definitiva
	    mv "${i}" procesados
	    mv "${i}".tmp salida/"${i}".$extension
	fi
    done
    
    #Eliminamos los directorios temporales para no alterar el bucle
    mv salida/* .
    rm -fr salida
    rm -fr procesados
    
    for i in * ; do
	
	if [[ -d $i ]]  ; then #Si el elemento es un directorio
	    cd "${i}"
	    recorrer_directorios
	    cd ..
	fi  
    done 
}
#-------------------------------------------



echo 'Para poder ejecutar este script'
echo 'es imprescindible tener instalado'
echo 'el pograma de conversion ffmpeg.'
echo 'Se recomienda comprobar su correcto'
echo 'funcionamiento con el comando:'
echo 'ffmpeg -i fichero -acodec libfaac -ar 44100 -ab 128kb -vcodec mpeg4 -b 300kb -s 320x240 -f mp4 fichero_salida'
echo 'En caso de error, es imprescindible'
echo 'ajustar los parametros adecuados del ffmpeg'
echo 'en el script.'
echo
echo 'ATENCION: este script eliminara los ficheros'
echo 'originales tras la conversion.'
echo -n 'Desea continuar? (s/n): '

read orden

if [ "$orden" = "s"  ]; then
    echo -n 'Directorio: '
    read directorio

    if [[ -d "${directorio}" ]]  ; then #Si el elemento es un directorio
	cd "${directorio}"
	recorrer_directorios
    else
	echo "Directorio no valido"
    fi
fi

Ahora lo que más molaría sería que alguien además de yo mismo los usase xD. Si encontráis algún error, o alguna cosilla que se pudiese mejorar, no dudéis en decírmelo, y se hará lo que se pueda.

jun 05

Con respecto al post que puse sobre la lucha contra la expropiación y el parque industrial/empresarial, para que quede constancia de la cantidad de cosas por las que luchamos, además de nuestras casas y terrenos, intentamos salvar cosas como ésta:

may 25

Lugar: La Brea, Marín
Fecha: 18-V-2008
Cámara: Kodak DX6490
Tiempo de exposición: 1/179
Apertura: f/2.8
Distancia focal: 6.3mm
Flash: no
Balance de blancos: luz diurna

may 12

Me encontré hace unos días con una página la mar de curiosa y que a más de uno puede que os guste. Por poner un símil, la página es muy parecida a Filmaffinity. Nos van saliendo fotografías de flickr (bastante buenas todas, parece que sólo seleccionan ciertos autores bastante decentes) y podemos elegir si la foto nos gusta o no. En función de una base de datos que va creando con nuestras preferencias, encuentra autores que nos gusten, encuentra otros usuarios con gustos parecidos y nos permite ver las fotografías que les gustan a ellos… Una página bastante interesante, vaya.

Hay fotografías de todo tipo (incluídas algunas de desnudos, que podemos ignorar seleccionando una casilla), e insisto, son todas bastante buenas. Os recomiendo que la probéis.

Photoree

abr 08

Los que me conocéis informáticamente hablando, sabéis que, como dice Elrohir, soy un linux terminal cowboy, o lo que es lo mismo, un oscuro adorador de la línea de comandos. Si puedo hacer algo por línea de comandos, por norma general lo prefiero antes que hacerlo a golpe de ratón, porque es mucho más rápido, más eficiente y, para mí, más cómodo. Ya demostré muchas veces ante amigos que este método nos facilita mucho la vida si tenemos que hacer tareas repetitivas, y una vez más volví a demostrarlo. Al turrón.

Después de unos cuantos años me di cuenta de que el método que uso para nombrar los vídeos y fotos que grabo no es el más adecuado a la hora de almacenarlos en el ordenador. Hasta ahora usaba nombres del tipo lugarexacto, lugargeneral, dd-mm-aaaa (tema).jpg, poniendo el mes en números romanos. Por ejemplo, Restaurante Candilejas, Vigo, 9-II-2005 (Pepito de los palotes y su prima).jpg. Este nombre tiene varios problemas. El primero es que si sacamos una foto el día 23 en el mismo sitio, esa foto saldrá antes, ya que el 2 va alfabéticamente antes que el 9. Además, si sacamos una foto el 8 de cualquier mes o cualquier año, seguirá yendo antes que ese 9 de febrero. Otro inconveniente es que al poner el mes en números romanos, septiembre (IX para los no duchos xD) irá antes que mayo (V). Para solucionarlo, la mejor forma sería poner los nombres con el formato lugarexacto, lugargeneral, aaaa-mm-dd (tema).jpg, con el mes en decimal. Pero claro, es muy fácil decirlo, pero agobia un poco más si tenemos en cuenta que entre vídeos y fotos tenía almacenados unos 3500, y eso son muchos nombres de dios para cambiar.

¿Qué hacemos? ¿Nos pegamos un tiro porque no podemos cambiar todo ésto ni en 2 años? Nada más lejos de la realidad. En 4 minutos me curré un script que cambió todos esos nombres por mi, y en sólo unos minutos ya tenía todo con los nombres con el formato que quería. Es una de las ventajas de ser un linux terminal cowboy, estas cosas están a la orden del día ;) . Aquí os dejo el script, que aunque no vayáis a hacer esto en concreto, seguro que podéis retocarlo para algo que necesitéis (Por supuesto, es mejorable, pero lo único que quería era acabar cuanto antes xD).


#!/bin/bash

mkdir procesados
mkdir salida

for i in [ *.jpg *.JPG *.jpeg *.JPEG *.bmp *.BMP *.gif *.GIF *.avi *.AVI ] ; do

#Nos hacemos con el nombre del fichero y de ahi, con la parte de la fecha
nombre1=$i
fecha1=`echo $nombre1 | cut -d ',' -f3`
fecha1=`echo $fecha1 | cut -d ' ' -f1`

#Separamos la fecha en 3 variables: dia, mes y año
dia=`echo ${fecha1} | cut -d '-' -f1`
mes=`echo ${fecha1} | cut -d '-' -f2`
anho=`echo ${fecha1} | cut -d '-' -f3`

#Pasamos los días de la forma d a dd
if [ $dia = "1" ]; then dia="01" ; fi
if [ $dia = "2" ]; then dia="02" ; fi
if [ $dia = "3" ]; then dia="03" ; fi
if [ $dia = "4" ]; then dia="04" ; fi
if [ $dia = "5" ]; then dia="05" ; fi
if [ $dia = "6" ]; then dia="06" ; fi
if [ $dia = "7" ]; then dia="07" ; fi
if [ $dia = "8" ]; then dia="08" ; fi
if [ $dia = "9" ]; then dia="09" ; fi

#Pasamos los meses en números romanos a decimal
if [ $mes = "I" ]; then mes="01" ; fi
if [ $mes = "II" ]; then mes="02" ; fi
if [ $mes = "III" ]; then mes="03" ; fi
if [ $mes = "IV" ]; then mes="04" ; fi
if [ $mes = "V" ]; then mes="05" ; fi
if [ $mes = "VI" ]; then mes="06" ; fi
if [ $mes = "VII" ]; then mes="07" ; fi
if [ $mes = "VIII" ]; then mes="08" ; fi
if [ $mes = "IX" ]; then mes="09" ; fi
if [ $mes = "X" ]; then mes="10" ; fi
if [ $mes = "XI" ]; then mes="11" ; fi
if [ $mes = "XII" ]; then mes="12" ; fi

#Reordenamos el formato de la fecha en una variable de la forma aaaa-mm-dd
fecha2=`echo ${anho}"-"${mes}"-"${dia}`

#Separamos en campos el resto del nombre del fichero
nombre21=`echo $nombre1 | cut -d ',' -f1` #Lugar generico
nombre22=`echo $nombre1 | cut -d ',' -f2` #Lugar preciso
nombre23=`echo $nombre1 | cut -d '-' -f3` #Tema
nombre23=`echo $nombre23 | cut -d '(' -f2` #Tema

#Reescribimos el nombre del fichero con el nuevo formato
nombre2=`echo ${nombre21}","${nombre22}", "${fecha2}" ("${nombre23}`

echo $nombre1
echo $nombre2
echo "--------------------------------"

#Enviamos los ficheros a las carpetas de destino
cp "$nombre1" salida/"$nombre2"
mv "$nombre1" procesados
done

mv salida/* .
rm -fr salida

Si os preguntáis por qué copio los ficheros en lugar de directamente renombrarlos, tiene una explicación muy sencilla. Si por casualidad alguno de esos ficheros no tuviese el formato de fecha deseado, podríamos perder datos que tenemos en ese nombre y que no querríamos perder por nada del mundo. De esta forma siempre tenemos los ficheros originales con su nombre y demás.

dic 09

Lugar: La Brea, Marín
Fecha: 9-XI-2007
Cámara: Kodak DX6490
Tiempo de exposición: 0.125 (1/8)
Apertura: f/2.8
Distancia focal: 6.3mm
Flash: no
Balance de blancos: luz diurna


Recuerda: mañana es el día

jun 08

¿Qué es eso que hay ahí?

jul 28

Lugar: La Brea, Marín
Fecha: 5-XI-2005 (18:47)
Cámara: Kodak DX6490
Tiempo de exposición: 0.033 (1/30)
Apertura: f/2.8
Distancia focal: 6.3mm
Flash: no

jul 22

Lugar: La Brea, Marín (Pontevedra)
Fecha: 12-X-2005 (18:53)
Cámara: Kodak DX6490
Tiempo de exposición: 0.05 (1/20)
Apertura: f/2.8
Distancia focal: 6.3mm
Flash: no

nov 27

Lugar: La Brea, Marín (Pontevedra)
Fecha: 5-XI-2005
Cámara: Kodak DX6490
Exposición: 0.011
Apertura: f/3.2
Distancia focal: 8.0