Ordenar y renombrar imágenes por fecha en información EXIF

Ordenar y renombrar imágenes por fecha en información EXIF

Tengo un lío en mi carpeta de fotos; Quiero ordenarlos según la fecha en la información EXIF ​​y cambiarles el nombre según la fecha (como 001.jpg, 002.jpg, etc.).

¿Cómo puedo hacer esto en Linux? He usado ImageMagick para algunas tareas básicas de procesamiento masivo antes (conversión y cambio de tamaño, etc.), ¿es posible usarlo para esta tarea?

Respuesta1

Puedes usarexiftool. Por alguna razón, el manual en línea no contiene la sección "RENOMBRAR EJEMPLOS" que me dio la pista esencial.

Para archivos JPG únicamente, la siguiente invocación de comando debería funcionar:

exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>

Explicación:

  • -res para recursividad
  • '-FileName<CreateDate'le dice a exiftool que cambie el nombre del archivo de acuerdo con su etiqueta EXIF CreateDate​​(aunque puedes probar con otras opciones ModifyDate)
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le'indica cómo construir la cadena de nombre de archivo a partir de la fuente de fecha " CreateDate" (el " %-c" agregará un contador en caso de colisiones de archivos, el " %le" significa "extensión de archivo en minúsculas")
  • Nota: Utilicé " -FileName<..." aquí para cambiar el nombre de los archivos y moverlos a otra carpeta en un solo paso. El manual señala que debe utilizar la -Directory<...sintaxis " " para las operaciones con carpetas. Aunque a mí me funcionó de esta manera.

Deberías dedicar algo de tiempo a leer el manual de esta poderosa herramienta. Quizás haya un camino aún más corto :D

Respuesta2

Pruebe este producto gratuito:Clasificador Exif AmoK.

Respuesta3

La forma más sencilla es simplemente importar archivos a jbrout... luego (opcionalmente) se pueden cambiar los nombres de todos los archivos a algo orientado al tiempo. O puede descubrir que no necesita cambiar ningún nombre (y jbrout es suficiente).

Respuesta4

Para que funcione en Debian Lenny prueba esto:

import pyexiv2, sys, os, time, datetime, random
dirname = sys.argv[1]
flist=os.listdir(dirname)
dic = dict()
for fname in flist:
    image = pyexiv2.Image(sys.argv[1]+'/'+fname) 
    #metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
    #metadata.read()
    image.readMetadata() 
    tag = image['Exif.Image.DateTime']
    timestamp = int(time.mktime(tag.timetuple()))
    #print fname, ' ', tag.value, ' ', timestamp
    try:
    dic[timestamp] = fname
    except:
    print fname, ' not processed.'

keys = dic.keys()
keys.sort()
i = 0 
for k in keys:
    os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
    i+=1

información relacionada