Utilizo el siguiente comando para cambiar el nombre de las imágenes de forma masiva desde el interior de un script bash para que cada imagen se nombre de acuerdo con la fecha en que se tomó la imagen:
exiftool -r -f '-filename<${CreateDate}_${model;tr/ /_/}_%f.jpg' -d %Y%m%d_T%H%M%S%%-c -ext jpg $targetDir
A veces, más a menudo de lo que me gustaría, me encuentro con imágenes que tienen valores incorrectos para las fechas en los metadatos. Por ejemplo:
$ exiftool -*date -G -s *.jpg
[File] FileModifyDate : 2014:12:22 18:32:03-07:00
[File] FileAccessDate : 2014:12:23 11:41:23-07:00
[File] FileInodeChangeDate : 2014:12:23 11:40:00-07:00
[EXIF] CreateDate : 2014/12/23 00:52:41
En este ejemplo, FileModifyDate es la fecha que esperaba que estuviera en la etiqueta CreateDate, es decir, que la foto se tomó 2014:12:22 18:32:03-07:00.
Pero debido a que CreateDate no es correcto, el nuevo nombre de archivo no es correcto. Bueno, desde la perspectiva del comando usado para renombrar el archivo, es correcto (entrada de basura -> salida de basura), pero me gustaría que la fecha usada en el nombre del archivo fuera la fecha/hora en que se tomó la foto.
En este ejemplo, ¿hay alguna forma de consultar el archivo para todas las etiquetas de fecha y luego seleccionar la fecha más antigua disponible como fecha para usar en el nombre de archivo renombrado?
Además, usando '${model;tr/ /_/}' puedo reemplazar cualquier espacio que pueda estar en la etiqueta del modelo con guiones bajos. Esto está bien, pero preferiría envolver esta expresión en todo el nombre del nuevo archivo. De esa manera, dado que estoy usando '%f.jpg', si el nombre del archivo original contenía espacios, el nombre del archivo resultante no contendría espacios. ¿Es esto posible con exiftool?
He agregado los pasos requeridos aquí:
https://github.com/pratyushtewari/exif-scripts/blob/master/README.md
Guarde la configuración de fecha y hora más antigua en la carpeta de inicio C:\Users\YOURUSERNAME
o en su directorio de inicio ~
o en la misma carpeta donde instaló exiftool. Este paso es importante para que los siguientes pasos sean exitosos. Cambiar el nombre del archivo a.ExifTool_config
Puede encontrarlos en un script aquí, pero descubrí que ejecutar los comandos en la carpeta de imágenes que mencioné en las opciones a continuación es mucho más rápido que ejecutarlos a través del script de Python exif-scripts/setToOldestDate.py Para un procesamiento más rápido, puede ejecutar estos comandos directamente en powershell desde la carpeta de imágenes que está planeando.
Si está ejecutando WSL, ejecute estos comandos desde poweshell y no WSL si el sistema de archivos lee y escribe desde la virtualización de Windows hará estallar su RAM y ralentizará el proceso hasta detenerlo.
🦺 Tenga en cuenta que estos scripts son recursivos y afectarán a todas las subcarpetas.
Bueno... ahora, elige tus opciones:
Este es un analizador bastante flexible y difuso de exiftool, pero si desea que esté absolutamente seguro, puede reorganizar el archivo para incluir aaaammdd_hhmmss y eliminar todos los demás números anteriores (después está bien).
exiftool "-FileModifyDate<filename" −overwrite_original -S -m -progress -ee -q -q ./
exiftool -overwrite_original "-FileModifyDate<OldestDateTime" "-ModifyDate<OldestDateTime" "-DateTimeOriginal<OldestDateTime" "-CreateDate<OldestDateTime" "-GPSDateTime<OldestDateTime" -S -m -progress -ee -q -q ./
exiftool "-filename<OldestDateTime" -d PXL_%Y%m%d_%H%M%S%%-c.%%e -S -m -ee -progress -q -q ./
para empujar todos los archivos en el uso del directorio actual
adb push -a . /sdcard/DCIM/Camera/
-a es para preservar los atributos.
Como último paso, debe actualizar la base de datos de la tienda de medios de Android para que Google Photos sepa qué archivos nuevos respaldar. Actualmente no siempre detecta automáticamente, así que ¿por qué esperar eso? Instale Refresh MediaStore y ejecútelo después de que se complete la inserción de adb desde el teléfono. Luego puede abrir Google Photos y ver que se está iniciando la copia de seguridad.
.ExifTool_config
Debería poder hacer algunas expresiones Perl más locas dentro de esos {}. (Estaría más tentado a escribir algo tan complejo en otro idioma, en realidad, pero por el bien del argumento):
${CreateDate; use Date::Parse; @vals = strptime($_); sprintf("%-04d_%-02d_...", $vals[5], $vals[4]);}
Nota: código completamente no probado. dudo que funcione Pero te da una dirección para empezar, si sabes perl.
mikew
JDługosz
Romeo Ninov
axiopistía