Script para añadir datos Exif

Ejemplo datos Exif en FlickrUna de las grandes ventajas de la fotografía digital son los metadados que incluyen los archivos, los famosos datos Exif (Exchangeable image file format), donde se recogen todos los datos de la toma: cámara usada, lente, distancia focal, valores de exposición… es muy útil tener a mano estos valores para estudiar las fotografías y así aprender y mejorar. Obviamente, en fotografía química la cámara no puede escribir estos datos en la película.

Hoy en día muchos escaneamos nuestros negativos para tener una copia digital de las fotos, y una opción es escribir estos datos Exif a mano en cada foto escaneada con alguna de las aplicaciones que hay para esta tarea en cualquier sistema operativo. Sin embargo esto puede ser muy repetitivo, o muy pesado según el software usado porque algunos son muy poco intuitivos. Por eso, me hice hace poco un pequeño script bash, para Linux, para añadir de una tacada todos los datos Exif a mis tomas escaneadas.

El script

Es un script para bash, lo he probado en Linux pero podría funcionar también en OS X con muy pocos cambios. Como dependencias, sólo necesita tener instalado exiftool, el resto de dependencias suelen estar instaladas en cualquier Linux. El script comprueba que esta herramienta está disponible, lee un archivo de configuración y aplica los datos Exif a la imagen pasada como parámetro.

#!/bin/bash

function usagemsg {
        echo -e "Uso: addexif.sh <imagen> [datos exif]\n"
         echo -e "Es necesario pasar como parámetro un archivo de imagen.\n"
        echo -e "El archivo de datos exif por defecto es './exifdata.txt'"
        echo -e
}

echo "[`date`]" > ./exifdata.log

command -v exiftool >/dev/null 2>&1 || { echo >&2 "Es necesario tener instalado exiftool"; exit 1; }

bashversion=`echo $BASH_VERSINFO`

if [ $bashversion -lt 4 ]; then
    echo -e "Error: es necesario Bash 4.x o superior\n"
     exit 1
fi

if [ $# -lt 1 ]; then
    echo -e "Error: Debes indicar un archivo\n"
    usagemsg
    exit 1
fi

if [ ! -f "$1" ]; then
    echo -e "Error: No existe $1\n"
     usagemsg
    exit 1
fi

if [ $# -lt 2 ]; then
    datafile="exifdata.txt"
else
    datafile="$2"
fi

if [ ! -f $datafile ]; then
    echo -e "Error: No existe $datafile\n"
     usagemsg
    exit 1
fi

declare -A exifdata

while read line
do
        key=`echo $line | awk -F"=" '{print $1}'`
        val=`echo $line | awk -F"=" '{print $2}'`

        exifdata[$key]="$val"

done < $datafile

for data in "${!exifdata[@]}"; do
       exiftool -overwrite_original_in_place -preserve -$data="${exifdata["$data"]}" $1 >>./exifdata.log 2>&1
        if [ $? -eq 0 ]; then
           echo -e "Actualizado $data en $1 (${exifdata["$data"]})"
       fi
done

 

El archivo de configuración

El script utiliza un fichero de configuración para leer los datos Exif que se deben añadir. Este fichero se puede pasar como parámetro al script, o se puede usar el archivo por defecto ./exifdata.txt. Este no es más que  un archivo de texto plano, con una línea por cada dato Exif que quiera añadir a la foto de la forma dato=valor. Un ejemplo de archivo de configuración:

Make=Yashica
Model=Yashica MG-1
DateTimeOriginal=2013:07:11 11:05:00
Description=Film Kodak Tmax 100 Developed with Rodinal R09 One Shot 1+25 for 5:30 minutes, continuous agitation for the first minute, and then tilt 10 seconds every minute
ISO=100
FocalLength=45mm
LensManufacturer=Yashica
LensModel=Yashinon 45mm 1/2.8
Lens=Yashica Yashinon 45mm 1/2.8

Sintaxis

El uso es muy simple: addexif.sh <imagen> [datos exif]. Es obligatorio indicar la imagen a modificar, y opcionalmente se puede indicar qué archivo de datos de configuración utilizar. Por ejemplo:

addexif.sh 176899.jpg datos_ayer.txt

Si se ejecuta el script sin parámetros se muestra una pequeña ayuda indicando la sintaxis correcta.

Uso en bucle y acumulativo

La ventaja de este script es el poder añadir muchos datos iguales a un conjunto de fotos de una sola vez. Por ejemplo, si hemos disparado un rollo en un día concreto, podemos añadir a todas las fotos de ese rollo los datos de fecha, revelado, ISO, cámara, lentes, etc… es decir, todos los datos comunes a todas las tomas. Para ello basta con ejecutar el script en un simple bucle, por ejemplo:

$ for i in `ls ./*.jpg`; do ~/scripts/addexif.sh $i ./datos_toma.txt; done

Este comando recorrerá todas las fotos JPEG del directorio actual, y para cada una ejecutará el script (situado en el directorio scripts del home del usuario) añadiendo los datos contenidos en el archivo datos_toma.txt que se encuentra en el mismo directorio que las fotos.

Además, es posible que se quiera añadir algún dato concreto a alguna foto, por ejemplo, si una de las fotos fue tomada en otra fecha, o si hemos anotado los datos de exposición de alguna toma, podemos añadir o cambiar uno de los datos después de añadidos los generales, ya que son acumulativos. Por ejemplo, si ya hemos añadido los datos generales anteriores (cámara, fecha, lentes, revelado, ISO…) podemos añadir los datos específicos de una foto a un nuevo archivo de configuración y luego ejecutar el script:

DateTimeOriginal=2013:07:11 11:20:00
ApertureValue=8
ExposureTime=1/60
~/scripts/addexif.sh DSC_128169.jpg ./datos_128169.txt

Al ser acumulativo, en esta foto nos quedarían los datos Exif genéricos añadidos anteriormente y además los datos nuevos. Si algún dato ya existía, como la fecha, al volver a añadirlo se actualiza.

Conclusión

Al añadir los datos Exif a nuestras copias digitales de negativos tendremos siempre identificado con qué cámara y objetivo hicimos una toma, en qué fecha, o cómo fue revelada, incluso si perdemos la organización de nuestras fotos o las anotaciones que tuviésemos hechas. Además, estos datos Exif pueden verse en cualquier visor, y se muestran al colgar una foto en las redes sociales de fotografía, como se puede ver en mis álbumes de fotografía química en Flickr.

Estuvimos hablando hace un tiempo acerca de este script en Manualens.

Artículo escrito por

Soy Álvaro Remesal, un aficionado a la fotografía, muy novato y con muchas ganas de aprender y divertirme en el camino. En este blog escribo mi día a día con la fotografía química: mis progresos, mis errores, mis descubrimientos... Lo que escribo tiene una intención de divulgación, pero también es una suerte de diario propio de mis avances y de lo que voy probando y aprendiendo.

Por favor, comenta con tu nombre real y con buenas maneras.

Dejar una respuesta