Autor Tema: Script para documentar jpegs mejorable  (Leído 14408 veces)

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Script para documentar jpegs mejorable
« on: 28 dic 2007, 14:03 pm »
Buenas,

como tengo que reconocer que el bash script no es lo mío a pesar de los esfuerzos de Redy, cuando necesito algo me pongo y en el momento que funciona lo dejo así.  :ejem:
Es el caso de éste que puede que si se le ve utilidad para más gente, y si merece la pena, pueda ser mejorado para su uso y disfrute.

Se trata básicamente de que en el proceso de transformación de una imagen generamos diferentes ficheros y entre otras cosas perdemos la información del exif. Yo he combinado el seguir una nomenclatura con las posibilidades de exiftool y bash y me ha salido esto:

Código: [Seleccionar]
for IMAGEN in $1*.jpg
do

  echo $IMAGEN
  exiftool -TagsFromFile ${IMAGEN:0:8}.cr2 $IMAGEN
  mv $IMAGEN $2-$IMAGEN

  mogrify -comment @$HOME/talleres/copyleft.txt $2-$IMAGEN

done

Partía de otro muy simple que usaba la línea del mogrify (ImageMagick) para poner un comentario con el texto del fichero copyleft.txt en el campo correspondiente del fichero jpg.
Va a trabajar sobre ficheros jpg existentes en el directorio. Está pensado para pasarle un nombre de fichero completo o parcial, lo que permite que procese por ejemplo los que comienzan por "img_".

Desde que tengo la 40D, parto de un fichero con nombre tipo img_xxxx.cr2 que es el raw. Cuando lo paso por el ufraw, genero un .tif que tiene la misma raíz en el nombre y a veces pongo información en este sobre posibles retoques realizados, como por ejemplo img_xxxx-100ev.tif (+1 diafragma) o img_xxxx--067ev.tif (-2/3). Luego el jpg resultante de procesar dicho fichero en el gimp puede tener en el nombre también algún añadido según los retoques que haya hecho y me parezcan significativos. Al menos, suele tener un -c0x que es un código mío para indicar diferentes versiones de un motivo o lugar.

Como esos nombres no son muy significativos, les suelo añadir un prefijo con algo que denote la procedencia de dónde están hechas las fotos. Por ejemplo "garganta-" para estas de Garganta de los Montes.

Con ello, la necesidades del script son
- copiar los datos exif del raw al jpg
- añadir el prefijo con la "denominación de origen"
- añadir el comentario con el texto del copyleft

El script admite dos parámetros de entrada. El comienzo del fichero o ficheros a tratar ($1)y el prefijo que daremos a las fotos tratadas con la mencionada denominación de origen ($2).

Ejemplo: [colegota@alforjas garganta]$ /home/colegota/talleres/poner_info img_ garganta

Lo importante de esto es identificar el raw a partir del jpg que queremos cambiar. Para ello, la búsqueda se hace solo en ficheros jpg, se cogen los ocho primeros caracteres del nombre del mismo y se le pone la extensión .cr2.

Código: [Seleccionar]
  exiftool -TagsFromFile ${IMAGEN:0:8}.cr2 $IMAGEN
Renombra el fichero poniéndole el origen delante.

Código: [Seleccionar]
  mv $IMAGEN $2-$IMAGEN
Y le pone el comentario con el copyleft.

Código: [Seleccionar]
  mogrify -comment @$HOME/talleres/copyleft.txt $2-$IMAGEN
Así que si os vale o el maestro quiere retocarlo y ponerlo fino, ahí lo tenéis. :)

Saludos,
Colegota
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Script para documentar jpegs mejorable
« Respuesta #1 on: 31 dic 2007, 07:24 am »
Código: [Seleccionar]
  mogrify -comment @$HOME/talleres/copyleft.txt $2-$IMAGEN

Pues con la venia se me ocurren al menos tres cambios:

¿Si estabas con exiftool porque no hacerlo todo con exiftool en lugar de poner el comentario con mogrify?

Código: [Seleccionar]
exiftool -comment="Comentario" fichero

Si lo quieres desde un fichero puedes hacer:

Código: [Seleccionar]
exiftool -comment="$(cat fichero_comentario.txt)" fichero


Preferiría no suponer que todos los archivos tienen 8 caracteres en el nombre, para cortar la extensión jpg, ni que todas las extensiones son jpg (podría haber Jpg o JPEG o JPG). Con una expresión como
Código: [Seleccionar]
${VARIABLE%.*}
Cortas todo lo que hay a partir del último punto.


Y por último no me gusta poner expresiones como
Cita
for IMAGEN in $1*.jpg
Me limitan demasiado, si quiero procesar múltiples ficheros paso múltiples ficheros al script, así puedo poner el comodín que quiera y dónde quiera al invocarlo, o una expresión de llaves, o una lista o incluso el resultado de un find, o lo que se me ocurra.

Como en tu caso necesitas un parámetro extra para renombrar, ¿porque no pasas ése de primero y todo lo demás son ficheros?:

Código: [Seleccionar]
PREFIJO=$1 # El primer argumento es el prefijo para renombrar
shift # Descarto el primer argumento
while (($# > 0 )) # Mientras siga habiendo argumentos
do

  echo $1
  exiftool -overwrite_original -TagsFromFile ${1%.*}.cr2 $1
# Uso el -overwrite_original para evitar la molestia de tener que borrar luego las copias de seguridad que hace exiftool
  mv $1 $PREFIJO-$1

  exiftool -overwrite_original -comment "$(cat $HOME/talleres/copyleft.txt)" $PREFIJO-$1

  shift # Descarto el argumento que acabo de procesar y a por el siguiente
done

Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Script para documentar jpegs mejorable
« Respuesta #2 on: 31 dic 2007, 07:45 am »

Y por último no me gusta poner expresiones como
Cita
for IMAGEN in $1*.jpg
Me limitan demasiado, si quiero procesar múltiples ficheros paso múltiples ficheros al script, así puedo poner el comodín que quiera y dónde quiera al invocarlo, o una expresión de llaves, o una lista o incluso el resultado de un find, o lo que se me ocurra.

¡Ah! si quieres evitar que se procesen cosas que no sean ficheros .jpg, porque al dejar el comodín al usuario puede poner lo que quiera, siempre podrías poner un

Código: [Seleccionar]
PREFIJO=$1 # El primer argumento es el prefijo para renombrar
shift # Descarto el primer argumento
while (($# > 0 )) # Mientras siga habiendo argumentos
do
   if file -i $1 |grep -q "image/jpeg"
   then
         echo $1
         exiftool -overwrite_original -TagsFromFile ${1%.*}.cr2 $1
         # Uso el -overwrite_original para evitar la molestia de tener que borrar luego las copias de seguridad que hace exiftool
         mv $1 $PREFIJO-$1
         exiftool -overwrite_original -comment "$(cat $HOME/talleres/copyleft.txt)" $PREFIJO-$1
   else
         echo "Error $1 no es un fichero jpg" >&2
   fi
   shift # Descarto el argumento que acabo de procesar y a por el siguiente
done
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Script para documentar jpegs mejorable
« Respuesta #3 on: 31 dic 2007, 11:41 am »
Buenas,

sabía que lo mejorarías. ;)

Lo del mogrify es porque el original era lo único que hacía. Tenía el script solo para poner el comentario.

Lo de los ocho caracteres es porque en mi cámara va a capón. El resultado final es un directorio en el que se entremezclan los originales, que son los .cr2 que tienen el exif, los tif intermedios con los que no voy a hacer nada, los jpg finales pero que siguen comenzando con los ocho caracteres que pone la cámara y tal vez algunos ya procesados.
Por eso dejaba abierto el que me procesara todos los jpg del directorio o darle los nombres de cada uno por si ya había procesado algunos.
Y puede haber varias versiones que provengan de un mismo raw, pero como mantengo la raíz, de un img_0001.cr2 podría haber un img_0001.jpg y un img_0001--100ev.jpg (por ejemplo). Ambos tienen la misma raíz de ocho caracteres y ambos deben heredar el exif del mismo .cr2.

Como es normal, yo lo había hecho (chapuzas aparte) para mi situación particular, el nuevo puede valer para cualquiera.  :-)

Saludos y gracias,  :asias:
Colegota
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Script para documentar jpegs mejorable
« Respuesta #4 on: 31 ene 2008, 16:16 pm »
Buenas,

he tenido que hacer un cambio pero me sigue dando problemas.

El cambio es sobre lo que te comentaba respecto a los nombres de fichero. El original es img_xxxx.cr2 y los modificados son cosas como img_xxxx-c01.jpg o img_xxxx-c01-dm.jpg. Es decir que la base se mantiene, pero el nombre del jpg es más largo. Si tomas el nombre completo del jpg y le pones la terminación .cr2 no es el original. De ahí lo de coger los primeros ocho caracteres.

Código: [Seleccionar]
         exiftool -overwrite_original -TagsFromFile ${1:0:8}.cr2 $1
esa parte funciona, pero lo que no cuela es lo de pasarle el resultado del cat al -comment. Puede que sea una tontería de sintáxis, pero no acierto. El cat me lo hace a la salida tras dar los errores. Aquí un ejemplo directo desde la línea.

Código: [Seleccionar]
$ exiftool -overwrite_original -Comment "$(cat $HOME/talleres/copyleft.txt)" belena-de-sorbe-img_1760-c01-dm.jpg
Unsuccessful stat on filename containing newline at /usr/local/bin/exiftool line 631.
Unsuccessful stat on filename containing newline at /usr/local/bin/exiftool line 748.
File not found: Copyleft :) Colegota 2008.
Puedes copiar, distribuir, publicar y modificar esta fotografia bajo las condiciones expresadas en
 http://creativecommons.org/licenses/by-sa/2.5/es/
======== belena-de-sorbe-img_1760-c01-dm.jpg
Comment                         : Copyleft :) Colegota 2008..Puedes copiar, distribuir, publicar y modificar
 esta fotografia bajo las condiciones expresadas en http://creativecommons.org/licenses/by-sa/2.5/es/

Saludos,
Colegota
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Script para documentar jpegs mejorable
« Respuesta #5 on: 31 ene 2008, 17:16 pm »
Código: [Seleccionar]
$ exiftool -overwrite_original -Comment "$(cat $HOME/talleres/copyleft.txt)" belena-de-sorbe-img_1760-c01-dm.jpg

Ooops! Ahí falta un signo igual

Código: [Seleccionar]
$ exiftool -overwrite_original -Comment="$(cat $HOME/talleres/copyleft.txt)" belena-de-sorbe-img_1760-c01-dm.jpg
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Script para documentar jpegs mejorable
« Respuesta #6 on: 31 ene 2008, 17:45 pm »
Buenas,

mira que he estado leyendo la documentación de exiftool y ni me había fijado en el detallito.  :shss: Bueno, ya funciona. Pego la versión definitiva por si a alguno le interesa. En ese caso que cambie "cr2" por la extensión de sus raw, y por supuesto, el texto del copyleft.

Código: [Seleccionar]
PREFIJO=$1 # El primer argumento es el prefijo para renombrar
shift # Descarto el primer argumento
while (($# > 0 )) # Mientras siga habiendo argumentos
do
   if file -i $1 |grep -q "image/jpeg"
   then
         echo $1
         exiftool -overwrite_original -TagsFromFile ${1:0:8}.cr2 $1
         # Uso el -overwrite_original para evitar la molestia de tener que borrar luego las copias de seguridad que hace exiftool
         mv $1 $PREFIJO-$1
         exiftool -overwrite_original -comment="$(cat $HOME/talleres/copyleft.txt)" $PREFIJO-$1
   else
         echo "Error $1 no es un fichero jpg" >&2
   fi
   shift # Descarto el argumento que acabo de procesar y a por el siguiente
done

Saludos,
Colegota
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

invisible

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 8097
    • INVItARTE
Re: Script para documentar jpegs mejorable
« Respuesta #7 on: 28 feb 2008, 14:05 pm »
Salud a tod@s:
Estoy reorganizando mi catálogo fotográfico de forma que, básicamente, quede estructurado en tres grandes carpetas:
- RAW's
- jpeg's extraídos directamente de los raw's para visualizar y etiquetar.
- Imágens finales (jpeg's para web, para copias en papel, tiff's, etc.).
La idea era, en primer lugar, renombrar los RAW's con la estructura AAMMDD_Título_Nºorden.ext (me refiero a hacerlo con carpetas, no foto a foto...), después de esto, extraer los jpeg's, que deben llevar el mismo nombre que el RAW si no me equivoco (para esto no tengo pega al hacerlo con dcraw). He estado revisando el script de este hilo para ver si lo podía adaptar a la idea que tengo, he estado mirando y remirando el manual de exiftool, otros scripts que he encontrado por internet... pero nada, no me entero de nada  :torpe:, y seguro que la solución está ahí... :ejem:
Si podéis iluminarme... algún día me pondré con tu curso de bash, redy, creo que estoy empezando a ver la posible utilidad del mismo. :sonroja2:
« Última Modificación: 28 feb 2008, 15:51 pm por hombre_invisible »
"Si quieres ver lo invisible, observa con atención lo visible."
                                                     Manuel Álvarez Bravo (1902-2002)

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Script para documentar jpegs mejorable
« Respuesta #8 on: 29 feb 2008, 14:20 pm »
Buenas,

La idea era, en primer lugar, renombrar los RAW's con la estructura AAMMDD_Título_Nºorden.ext (me refiero a hacerlo con carpetas, no foto a foto...), después de esto, extraer los jpeg's, que deben llevar el mismo nombre que el RAW si no me equivoco (para esto no tengo pega al hacerlo con dcraw). He estado revisando el script de este hilo para ver si lo podía adaptar a la idea que tengo, he estado mirando y remirando el manual de exiftool, otros scripts que he encontrado por internet... pero nada, no me entero de nada  :torpe:, y seguro que la solución está ahí... :ejem:

lo que pasa es que he releído el mensaje varias veces y no se lo que quieres hacer. :?

El planteamiento de este script es mantener la base del nombre del fichero para poder identificarlo en las diferentes operaciones. Así de un img_0001.cr2, dcraw genera un img_0001.thumb.jpg que sigue llevando la información exif. Con ufraw grabo un img_0001.tif o a veces img_0001-modificaciones.tif. El sufijo -modificaciones son códigos que añado para saber lo que he hecho con él, como compensar la exposición o similares.
En gimp, leo el .tif, lo modifico y lo guardo como img_0001-mas-modificaciones.jpg. Cuando he currado capas y me interesa conservarlas, guardo también el .xcf.

Como los ficheros suelen viajar entre "carpetas", les pongo un prefijo identificativo de la foto. Referencia al lugar donde están tomadas o a lo que son (nombres de retratad@s, etc.). Además, en la web, es preferible que las "palabras de búsqueda" de la imagen figuren en el nombre del archivo para que los buscadores puedan identificarlas si no se encuentran en una página temática sobre ello. Esto es aplicable sobre todo a las fotos de viaje.

Pero vamos, sobre lo que mencionas, el que el script generase el jpeg del raw sería añadirle un dcraw -e ${1:0:8}.cr2 (o su extensión de fichero correspondiente). Y con el resto es que no se qué quieres hacer. :?

Saludos,
Colegota
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

invisible

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 8097
    • INVItARTE
Re: Script para documentar jpegs mejorable
« Respuesta #9 on: 29 feb 2008, 18:57 pm »
Vamos a ver si soy capaz de explicarme...
Supongamos que, después de una salida fotográfica por la playa, descargo mi tarjeta llena de fotos... ¿hasta ahí, todo claro?  :P Mi cámara suele denominar las fotos con algo como _239485.ORF, como eso a mí no me dice nada, yo quería cambiarlo por AAMMDD_Descripción_Autonúmerico.ORF, es decir, busco un script que me permita coger la carpeta donde he descargado mis fotos y me renombre con la estructura que he puesto, y pasen a llamarse algo así como 080229_FotosPlaya_001.ORF.
De esas extraeré el jpeg embebido, que ya lo estoy haciendo con
Código: [Seleccionar]
dcraw -v -e *.ORFDe esta forma, lo que pretendo es lograr un archivo compuesto por tres grandes catálogos: uno con los jpg extraídos solo para visualizar y etiquetar, otro con los raw renombrados, a los que solo recurriré para editar, y un tercero con imágenes finales, en los que iré guardando los jpg para web, las imagenes preparadas para copiar en papel, tiff, xcf, etc... Al final tendré una carpeta 080229_FotosPlaya en cada uno de los tres catálogos (jpegs para visualizar, raws y editados). q:)
"Si quieres ver lo invisible, observa con atención lo visible."
                                                     Manuel Álvarez Bravo (1902-2002)

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Script para documentar jpegs mejorable
« Respuesta #10 on: 29 feb 2008, 20:27 pm »
Buenas,

La idea era, en primer lugar, renombrar los RAW's con la estructura AAMMDD_Título_Nºorden.ext (me refiero a hacerlo con carpetas, no foto a foto...)

yo quería cambiarlo por AAMMDD_Descripción_Autonúmerico.ORF, es decir, busco un script que me permita coger la carpeta donde he descargado mis fotos y me renombre con la estructura que he puesto, y pasen a llamarse algo así como 080229_FotosPlaya_001.ORF.

¿no lo entiendo o has cambiado de opinión?  :ejem:

Entiendo que quieres darle a los archivos el nombre de la carpeta más un secuencial ¿no? Seguro que Redy con tiempo te lo hace, pero mi opinión es que no merece la pena el trabajo y que el nombre de la carpeta lo puedes pasar como argumento al script. Vamos, lo que hace el actual. Yo lo que pasa es que luego muevo a mano los ficheros a mis "catálogos". aunque en realidad solo tengo dos. El de trabajo (labo) y el de resultados finales (fototk). Los jpeg extraídos del raw los uso para "repartir a los impacientes" o para ilustrar (por ejemplo para subir pruebas aquí) pero en la práctica no tienen más valor que el de fotos que no quiero dedicarle tiempo en revelar. La vista de la foto me la hace el gqview desde el raw.
La documentación me basta en los ficheros finales.

Veo tu sistema un poco complejo, pero si sigues con la idea, procura enumerar en forma de lista las cosas que debería hacer el script y lo intentamos. Pero en forma de receta de cocina, no de novela.  :-b

Saludos,
Colegota
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

invisible

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 8097
    • INVItARTE
Re: Script para documentar jpegs mejorable
« Respuesta #11 on: 29 feb 2008, 21:07 pm »
Buenas,

La idea era, en primer lugar, renombrar los RAW's con la estructura AAMMDD_Título_Nºorden.ext (me refiero a hacerlo con carpetas, no foto a foto...)

yo quería cambiarlo por AAMMDD_Descripción_Autonúmerico.ORF, es decir, busco un script que me permita coger la carpeta donde he descargado mis fotos y me renombre con la estructura que he puesto, y pasen a llamarse algo así como 080229_FotosPlaya_001.ORF.

¿no lo entiendo o has cambiado de opinión?  :ejem:
Pues no, no he cambiado de opinión...
Lo único que busco es un script al que yo le diga: "¡Quillo!, coge todas estas imágenes y les cambias el nombre, donde ponía _123456.ORF, me pones 080229_FotosPlaya_xxx.ORF". No busco que me lea el nombre de la carpeta, ni busque la fecha en los datos EXIF, ni nada de eso, simplemente que renombre las fotos con lo que yo le dé y, como normalmente serán más de una, pues que les dé un número de orden (xxx).
"Si quieres ver lo invisible, observa con atención lo visible."
                                                     Manuel Álvarez Bravo (1902-2002)

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Script para documentar jpegs mejorable
« Respuesta #12 on: 29 feb 2008, 22:25 pm »
Buenas,

entonces puede que te valga esto:
http://www.hachemuda.com/2008/01/18/pyrenamer-renombrar-archivos-masivamente/
que por lo que veo incluso te deja usar datos del exif para generar los nuevos nombres.

Si no, nos metemos con el script o buscamos otra cosa, pero es que me tendría que poner a estudiar bash para ver lo de rellenar con ceros los secuenciales y alguna cosa más y tengo otra pila de cosas pendientes...  :ejem: salvo que no tengas prisa.

Saludos,
Colegota
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

invisible

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 8097
    • INVItARTE
Re: Script para documentar jpegs mejorable
« Respuesta #13 on: 01 mar 2008, 05:49 am »
Pero qué merluzo que soy... si eso creo que hasta lo he tenido instalado. Lo miraré... :-)
Gracias de nuevo y, para estudiar tú, me pongo yo. q:)
"Si quieres ver lo invisible, observa con atención lo visible."
                                                     Manuel Álvarez Bravo (1902-2002)

invisible

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 8097
    • INVItARTE
Re: Script para documentar jpegs mejorable
« Respuesta #14 on: 01 mar 2008, 10:22 am »
Salud a tod@s:
Visto y comprobado; era lo que buscaba... y me he quedado corto con lo de merluzo...  :torpe:
"Si quieres ver lo invisible, observa con atención lo visible."
                                                     Manuel Álvarez Bravo (1902-2002)