El siguiente script (en Python) recorre recursivamente un directorio y para cada foto que se encuentra, busca si tiene un dato de fecha de creación en los metadatos EXIF.
Si no lo tiene, y el formato del nombre del fichero es del tipo *yyyymmdd*, añade una fecha en los datos EXIF de la foto basada en el nombre del fichero.
#!/usr/bin/env python3 import sys, os, re, piexif if len(sys.argv) < 2: print ("Usage:", __file__ , "DIRECTORY") sys.exit(1) date_tag = piexif.ExifIFD.DateTimeOriginal exif_key = 'Exif' regexp = re.compile(r'\b(20(\d{6}))\b') if os.path.isdir(sys.argv[1]): base_dir = os.path.abspath(sys.argv[1]) #print ("Searching photos in ", base_dir) for root, dirs, files in os.walk(base_dir): for f in files: full_path = os.path.join(root, f) filename, ext = os.path.splitext(full_path) if ext.lower() in ('.jpg', '.jpeg'): try: exif_data = piexif.load(full_path) if not date_tag in exif_data[exif_key]: # print ("No date-time data for", full_path) match = regexp.search(filename) if match: new_date = "%s:%s:%s 00:00:00" % (match[0][:4], match[0][4:6], match[0][6:]) #print ("The file", full_path, "seems to have a date-time", match[0], "=>", new_date) exif_data[exif_key][date_tag] = new_date exif_bytes = piexif.dump(exif_data) try: piexif.insert(exif_bytes, full_path) print ('"'+full_path+'" modified with date-time', new_date) except Exception as e2: print (e2) except Exception as e1: pass #print ("Error reading", full_path, "Corrupted file?") else: print (sys.argv[1], "is not a valid directory.") sys.exit(1)
Es especialmente interesante el módulo piexif, no lo conocía. Funciona un poco a bajo nivel, pero para hacer estas manipulaciones rápidas va muy bien.
No hay comentarios:
Publicar un comentario