Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Script para procesar fotos

Tras varios apuntes sobre como trabajar con fotos, pongo aquí el script completo que yo utilizo:

#!/bin/bash
#
# procesa_fotos.sh
# Por Guimi 2009/08 - http://www.guimi.net
#
# Ult. modificacion 2013/03 - http://guimi.net
#
# REQUIERE exif y jhead

####################################
#### ERRORES
E_NOPARAM=64        # Bad number of params

##########################
# PARAMETROS
DIR="./procesadas"

mkdir $DIR

echo "Renombrando videos..."
# Los ficheros .mov son peliculas que tienen asociado
# un fichero .jpg con el mismo nombre
for x in `ls *.mov 2> /dev/null`
do
	# Primero tomamos el directorio, el nombre y la extension
	#directorio=$(dirname "$x")
	nombre_fichero=$(basename "$x")
	#extension="${nombre_fichero##*.}"
	nombre_fichero="${nombre_fichero%.*}"

	# Comprobamos si existe el mismo fichero con extension jpg
	# En algunas camaras se llama .thm pero NO tiene cabecera exif
	if [ -f $nombre_fichero.jpg ]
	then
		# Tomamos la fecha, hora, minuto y segundo de la cabecera exif
		momento=`exif -t 0x9003 -m $nombre_fichero.jpg`
		nuevo_nombre="${momento:0:4}${momento:5:2}${momento:8:2}-${momento:11:2}${momento:14:2}${momento:17:2}"

		# Renombramos el fichero mov
		cp $x $DIR/$nuevo_nombre.mov
	else
		# Copiamos el fichero mov
		cp $x $DIR
	fi
done

# Los ficheros .mov son peliculas que tienen asociado
# un fichero .jpg con el mismo nombre
for x in `ls *.MOV 2> /dev/null`
do
	# Primero tomamos el directorio, el nombre y la extension
	#directorio=$(dirname "$x")
	nombre_fichero=$(basename "$x")
	#extension="${nombre_fichero##*.}"
	nombre_fichero="${nombre_fichero%.*}"

	# Comprobamos si existe el mismo fichero con extension jpg
	# En algunas camaras se llama .thm pero NO tiene cabecera exif
	if [ -f $nombre_fichero.JPG ]
	then
		# Tomamos la fecha, hora, minuto y segundo de la cabecera exif
		momento=`exif -t 0x9003 -m $nombre_fichero.JPG`
		nuevo_nombre="${momento:0:4}${momento:5:2}${momento:8:2}-${momento:11:2}${momento:14:2}${momento:17:2}"

		# Renombramos el fichero mov
		cp $x $DIR/$nuevo_nombre.mov
	else
		# Copiamos el fichero mov
		cp $x $DIR
	fi
done

echo "Renombrando fotos..."
# Copiamos las fotos al directorio de trabajo
cp *.jpg $DIR
cp *.JPG $DIR
# Nos movemos al directorio de trabajo
cd $DIR
# Renombramos ficheros y los rotamos si es menester
jhead -autorot -n%Y%m%d-%H%M%S *.jpg > /dev/null
jhead -autorot -n%Y%m%d-%H%M%S *.JPG > /dev/null
#jhead -n%Y%m%d-%H%M%S *.jpg

Tuxguitar

Hoy he descubierto tuxguitar, software libre con todo lo que un guitarrista necesita… cuando funciona, claro.
Como es de esperar, un simple # aptitude install tuxguitar nos deja el programa instalado y funcionando… a medias. Lo normal es que el sonido no funcione, y claro, en un programa de música eso no es muy útil ;-).
El programa está realizado en Java y nos faltan unos módulos de sonido (algunos se instalan por defecto, otros no):

  • tuxguitar-alsa

  • tuxguitar-fluidsynth
  • tuxguitar-jsa
  • tuxguitar-oss

Y con eso… todavía no funciona en muchos casos. Porque como la salida del sonido es Midi necesitamos:
# aptitude install timidity
Una vez instalado timidity… no funciona, porque hay que configurarlo:
# vi /etc/default/timidity
# Enable MIDI sequencer (ALSA), default is disabled
TIM_ALSASEQ=true

Ya casi estamos. Solo falta abrir tuxguitar e ir a Herramientas -> Preferencias -> Sonido y elegir un puerto midi de Timidity.

Ahora sí ¡a disfrutar!

Resumen de instalación:
# aptitude install tuxguitar tuxguitar-alsa tuxguitar-fluidsynth tuxguitar-jsa tuxguitar-oss timidity
# vi /etc/default/timidity

tuxguitar, musica, tab, chords, guitarra, multimedia

Recuperar fotos borradas – Undelete FAT

Me ha ocurrido ya un par de veces que algún amigo me llama diciendo “he borrado sin querer las fotos de mi cámara ¿puedes hacer algo?”.
Y como la respuesta es sí, aquí dejo los pasos básicos para recuperar ficheros de particiones FAT (undelete fat).

Lo primero es no tocar más la partición donde se han borrado los archivos, en este caso la tarjeta donde se han borrado las fotos. No probar a hacer nuevas fotos, por ejemplo.
Después conectamos la tarjeta o lápiz en nuestro lector. Si tenemos en marcha un sistema gráfico lo normal es que automáticamente lo monte y nos ofrezca ver/importar fotos o algo así.
Averiguamos el dispositivo asignado a la tarjeta:
$ mount

[...]
/dev/sdg1 on /media/SAMSUNG type vfat (rw,nosuid,nodev,uhelper=hal,shortname=lower,uid=1000)

Otra opción es:
$ dmesg | tail

Instalamos testdisk, una magnífica herramienta de recuperación de datos:
# aptitude install testdisk
Lo más cómodo es ir al directorio en el que queremos que se recuperen las fotos (en un dispositivo diferente a aquel del que queremos recuperar fotos. Por ejemplo vamos al directorio $HOME de un usuario, como /home/guimi. Con el dispositivo montado lanzamos ‘photorec’ como superusuario:
# photorec

Este programa nos lleva paso a paso a recuperar fotos, vídeos y demás.
- primero pregunta por el dispositivo desde el que recuperar fotos, en el ejemplo /dev/sdg.

- después pregunta el tipo de tabla de particiones: para las tarjetas de memoria o lápices USB normales “Intel”

- después elegimos la partición (generalmente solo hay una) en el ejemplo “1″

- Opcionalmente en esta misma pantalla podemos elegir los tipos de archivo a recuperar, por ejemplo solo jpg.

- después pregunta por el tipo de partición que había cuando borramos: generalmente “Other”

- después pregunta si deseamos buscar por toda la partición o solo por el espacio libre: yo recomiendo “Whole”

- por último pregunta en qué directorio queremos recuperar las fotos (NO debe estar en el mismo dispositivo del que estamos recuperando archivos)

con eso photorec empieza a recuperar archivos.

Dependiendo de la capacidad de la tarjeta y de los archivos a recuperar puede invertir más o menos tiempo, pero lo bueno es que va indicando el progreso de trabajo para poder ir viendo cómo va y cuánto le queda.

Aviso: Si recuperas de un disco externo muy grande, se puede llenar fácilmente el disco dónde estás guardando los archivos recuperados.

undelete, recuperar archivos borrados, photorec, testdisk, FAT, FAT32

Posterazor

Tengo algunas fotos que me gustan mucho y de las cuales quería hacer un poster mayor que un A4. Pero mi impresora no imprime nada más grande que un A4.
La solución: Posterazor.
Este programa te guía en un breve y sencillo asistente para poder imprimir la imágen repartida en tantos papeles como quieras, generando un PDF que puedes imprimir de manera sencilla en cualquier impresora.
Posterazor
Utiliza el sorprendente FLTK, por lo que el paquete que descargas de la web es directamente ejecutable, sin instalaciones, con un solo fichero.
Y funciona bien y a la primera en Debian Lenny.

Solo una cosa: es mejor no poner márgenes para obtener los mejores resultados a la hora de cortar.

posterazor, poster, split image

Ordenar archivos en sistemas de ficheros FAT

El sistema de ficheros FAT es uno de lo más antiguos todavía en uso. Su actual popularidad se debe a que la mayoría de teléfonos móviles, lectores de MP3, cámaras de fotos, radios, etc. solo reconocen este sistema, por lo que las memorias USB, las tarjetas SD, MMC, etc. vienen formateadas con FAT.

El problema es que estos dispositivos no suelen ordenar los ficheros y directorios que encuentran, sino que muesrtan los archivos tal y como están grabados. Esto hace que muchas veces, tras pasar varias horas ordenando tu colección de música, molestándote en ponerles nombres tipo “01-titulo-artista.mp3″ y demás, te encuentras con que el reproductor lista las canciones aleatoriamente.

Para evitar esto basta con “ordenar” los ficheros en el sistema FAT. En GNU/Linux, como es habitual, es muy sencillo hacerlo (el dispositivo debe estar desmontado):
sudo fatsort (dispositivo)

Para que esto funcione bien, primero hay que instalar fatsort, lo que a su vez tambien es muy sencillo:
sudo aptitude install fatsort
Se puede obtener información sobre la patición con:
sudo fatsort -i (dispositivo)

FAT, sort, fatsort, ordenar ficheros, sort files
 

Retocar videos

Para pasar vídeos en formato 3gp, habitual en algunos teléfonos móviles, al más estándar avi podemos hacer:
$ ffmpeg -i videoIn.3gp -f avi -vcodec xvid -acodec mp3 -ar 22050 videoOut.avi

Y al contrario para pasar vídeos a formato 3gp, por ejemplo desde flv, típico de internet:
$ ffmpeg -i videoIn.flv -vcodec libx264 -acodec libfaac videoOut.3gp

También nos puede interesar pasar archivos flv a avi:
$ ffmpeg -i input.flv -vcodec libxvid -acodec copy output.avi

Para rotar vídeos que hemos grabado con cámaras de fotos en modo vertical, en vez de horizontal, podemos hacer:
$ mencoder -vf rotate=1 videoIn.avi -oac mp3lame -ovc lavc -o videoOut.avi
o bien:
$ mencoder -vf rotate=1,hqdn3d,eq=25:50 -oac pcm -ovc lavc videoIn.avi -o videoOut.avi
Si además queremos añadir bandas negras a los lados para que el vídeo resultante mantenga las proporciones de imagen de los vídeos horizontales podemos hacer:
$ mencoder -vf rotate=2,expand=-176:0:88:0 -oac pcm -ovc lavc videoIn.mov -o videoOut.avi

video, mencoder, ffmpeg

Firmar imágenes

Para firmar imágenes automáticamente podemos usar ImageMagick. Llamo firmar una imagen a incorporarle un marco con el autor y la licencia de la misma. Ejemplo de imagen firmada:
delfines

Primero generamos una imagen de firma, por ejemplo:
firma

Después utilizamos el siguiente comando (el tamaño de bordes que muestro es el que utilizo para imágenes de 2448×3264):
$ convert imagen.jpg firma.png -background black -gravity South -bordercolor black -border 10 -append -border 10 -splice 0×10 imagen_firmada.jpg.

Si además queremos conservar la información de la cabecera exif podemos utilizar el comando jhead:
$ jhead -te imagen.jpg imagen_firmada.jpg.
Otro uso muy práctico de jhead lo vimos en el post “Renombrar fotos en base a la fecha de la cabecera Exif“.

Para agilizar la firma podemos hacer dos cosas básicas, una es crear un script como este (que nos firma todas las imágenes del directorio en que nos encontramos):

#!/bin/bash
#
# firma_imagenes.sh
# Por Guimi 2009/08 - http://www.guimi.net
#

##########################
# ERRORES
E_NOPARAM=64        # Numero de parametros incorrecto

##########################
# PARAMETROS
FIRMA="../cc-by-sa-guimi-70.png"
DIR="./firmadas"
TMP="tmp.$$"

if [ $# -gt 1 ]; 
then
	echo "Use firma_imagenes [imagen_firma]"
	exit $E_NOPARAM
else
	if [ $# -eq 1 ]; 
	then
		FIRMA="$1"
	fi
fi

mkdir $DIR

echo -n "Firmando fotos..."
for x in `ls *.jpg`
do
	echo -n "."
	convert $x $FIRMA -background black -gravity South -bordercolor black -border 10 -append -border 10 -splice 0x10 $TMP
	jhead -te $x $TMP > /dev/null
	mv $TMP $DIR/$x
done
echo ""

 
Otra opción muy comoda es configurar gThumb (el visor que recomiendo para gnome) para que permita firmar imágenes.
Para ello nos vamos a “Editar->Preferencias->Teclas rápidas” y en una de las casillas libres (la primera suele ser el 6) escribimos:
convert %f ~/firma.png -background black -gravity South -bordercolor black -border 10 -append -border 10 -splice 0×10 %n-firmada%e; jhead -te %f %n-cc-by-sa%e

A partir de ese momento mientras estamos viendo una imagen si pulsamos el 6 del teclado numérico nos generará una copia firmada.

Podemos ver otros usos de ImageMagick en un post llamado trabajar con imágenes desde el prompt.

Si tienes curiosidad por ver algunas de mis fotos puedes ver mi perfil en flickr o en mi perfil en picasa (me gusta más el servicio de flickr pero da más espacio picasa).

ImageMagick, Marco, firmar imagen, crear marco, gthumb

Renombrar fotos en base a la fecha de la cabecera Exif

Para renombrar fotos poniéndoles la fecha en que se realizaron podemos usar el siguiente comando:
$ jhead -n%Y%m%d-%H%M%S *.jpg

p1020288.jpg --> 20090628-155508.jpg
p1020289.jpg --> 20090628-155558.jpg

Podemos, mejorar el comando con:
$ jhead -autorot -n%Y%m%d-%H%M%S *.jpg

p1020288.jpg --> 20090628-155508.jpg
p1020289.jpg --> 20090628-155558.jpg

La opción -autorot rota automáticamente las fotos para que se vean todas correctamente.

Otro más sencillo para consultar las cabeceras exif es “exif“, “jhead” sirve principalmente para modificar las cabeceras.
 

exif, jhead, prompt, fotos, jpg, imágenes

Uso de mencoder

mencoder es una herramienta muy potente que viene en el paquete mplayer y permite trabajar con archivos de audio y video.
mencoder genera ficheros en formato AVI a no ser que se le indique lo contrario.

Se utiliza:
mencoder {videos de entrada} [opciones] [-o archivo de salida]

Consultar codecs disponibles:
mencoder -ovc help

Obtener información de un archivo de vídeo:
mencoder -identify archivo

Puede utilizarse para encadenar varios archivos de video:
mencoder video1.avi video2.avi -o video_unido.avi

Algunas de las opciones más utiles son:

  • oac (output audio codec) {copy,pcm,mp3lame,lavc}
    libavc utiliza un codec de la libreria libavcodec

  • ovc (output video codec) {copy,divx4,raw,libavc}
  • vf (video filter)
    • flip (Voltear arriba-abajo)

    • mirror (Voltear derecha-izquierda)
    • rotate[=...] (Girar)
    • scale[=...] (Escalar)
    • crop[=...] (Recortar)
    • denoise3d[=...] (intenta eliminar el ruido)
    • hqdn3d[=...] (intenta eliminar el ruido con mayor calidad)
    • eq[=brillo:contraste] (Modifica los colores)
    • eq2[=...] (Modifica los colores)

    Opciones que más utilizo:

    Salida como mpeg -of mpeg
    Copiar el video -ovc copy -oac copy
    Recodificar el video -ovc lavc -lavcopts vcodec=xvid:mbd=2:trell:autoaspect
    -ovc lavc -lavcopts vcodec=mpeg4
    Indicar frames per second (fps) -fps 25
    Indicar inicio y fin de la codifiación -ss 0:10 -endpos 01:15:23
    Incluir subtitulos -sub subtitulos.srt
    Rotar video -vf rotate=1 (90º en sentido horario)
    -vf rotate=2 (90º en sentido anti-horario)
    Escalar video -vf scale=320:240
    Usar sonido externo -audiofile audio.mp3
    Des/Codificar archivos de imagen -mf type=png:fps=25 (con mf -multifiles)
    Negativo -vf eq2=1.0:-0.8
    Añadir información -info name=titulo,artist=guimi

    Ejemplos:

    • Reproducción rápida de DVD

      • mplayer dvd://1
    • Codificar videos como mpeg
      • mencoder video1.avi video2.avi -of mpeg -o videoFinal.mpg
    • Rotar un video, quitarle el ruido y darle más luz
      • mencoder -vf rotate=1,hqdn3d,eq=75:100 -oac pcm -ovc lavc videoIn.avi -o videoOut.avi
    • Convertir parte de un video a AVI con codec Xvid
      • mencoder videoIn.ogg -ss 10 -endpos 01:42:55.5 -oac pcm -ovc lavc -lavcopts vcodec=xvid:mbd=2:trell:autoaspect -o videoOut.avi
    • Codificar los capítulos 10-15 del título 2 de un DVD, redimensionando
      • mencoder dvd://2 -chapter 10-15 -vf scale=640:480 -o titulo2.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4
    • Igual pero con libavcodec
      • mencoder dvd://2 -o titulo2.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=1800 -oac copy
    • Codificación de archivos jpg
      • mencoder “mf://*.jpg” -mf fps=25 -o salida.avi -ovc lavc -lavcopts vcodec=mpeg4
    • Codificar video con un fichero de audio externo
      • mencoder videoIn.avi -o videoOut.avi -ovc copy -oac mp3lame -audiofile audio.wav
    • Incluir subtítulos en un vídeo
      • mencoder -ovc lavc -oac mp3lame pelicula.avi -o pelicula_con_subtitulos.avi -sub subtitulos.xxx
    • Reescalar un vídeo
      • mencoder -i grabacion.mov -s 720×480 -b 4000k -ab 160k grabacion.avi

    Referencias y ejemplos del manual de mencoder, de Hache Muda y propios.

    Uso de mencoder, comando mencoder en Linux

Trabajar con imágenes desde el prompt

Veremos varios ejemplos, pero primero instalamos ImageMagick:
# aptitude install imagemagick

Convertimos de pdf a imagenes y viceversa:
$ convert -density 150 archivo1.pdf img_%04d.tiff
$ convert *.png archivo2.pdf

Rotamos las imagenes 180 grados:
$ mogrify -rotate 180 *tiff

Cambiamos el formato de las imagenes:
$ mogrify -format png *tiff
$ convert imagen.jpg imagen.png

Cambiamos la profundidad de color:
$ mogrify -colors 16 *png

Cambiamos el tamaño de las imagenes:
$ mogrify -resize 50% *png
$ mogrify -resize 1024×768 *.png
$ mogrify -quality 75-type optimize -resize 1024×768 *.png

Obtenemos informacion sobre una imagen:
$ identify imagen.jpg

Cambiar imagenes a bn:
$ convert imagen_color.jpg -monochrome imagen_bn.jpg

Añadir un texto a una imagen:
$ convert -font courier -fill yellow -pointsize 25 -draw ‘text 100,250 guimi’ imagen.jpg imagen_con_txt.jpg

Incluimos una imagen “firma” -con fondo transparente- en la esquina inferior derecha de otra imagen:
$ combine -gravity SouthEast -compose Over imagen_original.jpg firma.png imagen_firmada.jpg
$ convert -draw ‘image Over 100,100 225,225 firma.png’ imagen_original.jpg
Podemos ver más ejemplos de cómo firmar imágenes en otro post de este blog llamado firmar imágenes.

Crear un índice gráfico con miniaturas:
$ convert “vid:*jpg” indice.png
Crear un índice gráfico con miniaturas (utiliza GUI para mostrar el resultado):
$ display “vid:*.jpg”

Crear un gif animado con varios jpg:
$ convert -delay 20 *.jpg imagen_animada.gif
$ convert -delay 200 -quality 20 -size 200 -loop 0 *.jpg imagen_animada.gif
Extraer los fotogramas de una imagen animada:
$ convert imagen_animada.gif -adjoin imagen.jpg

También podemos renombrar fotos en base a la fecha de la cabecera Exif o utilizar un script para procesar fotos o para firmar imágenes.

Trabajar con imágenes desde el prompt, editar y modificar imágenes desde la línea de comandos