
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:
-r
es para recursividad'-FileName<CreateDate'
le dice a exiftool que cambie el nombre del archivo de acuerdo con su etiqueta EXIFCreateDate
(aunque puedes probar con otras opcionesModifyDate
)-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