Nombres de archivo de fotos JPG después de un iPhone a la importación de "aplicación de fotos"

Desde hace años, centralizamos todas nuestras fotos familiares en un disco (local) legible desde Windows, Linux y Mac OS X. Los nombres de archivo suelen ser algo así como D:\Photos\2020-05\IMG_76843.jpgo D:\Photos\2020-05\20200502_1256_2.jpg, cuando provienen de varias cámaras digitales o teléfonos inteligentes Android.

Ahora tengo un iPhone e importé casi 10 GB de fotos con la aplicación "Fotos" de Macbook . No quiero mantenerlos dentro de esta aplicación, mi objetivo final es administrar los archivos JPG yo mismo y moverlos al disco externo (mencionado anteriormente). Así que tomé todos los archivos ~/Pictures/Photos Library.photoslibrary/Masters/y los moví al disco externo. (o ~/Pictures/Photos Library.photoslibrary/originals/con Catalina). Esto funcionó. Después de eso, eliminé Photos Library.photoslibrary(ya no es necesario, volveré a crear una nueva biblioteca de fotos cuando importe la próxima vez; nuevamente, no quiero usar la aplicación Fotos excepto para importar desde el iPhone).

Pregunta: Ahora tengo archivos como:

DE017ACB-5ABD-4113-B110-95DABF7F28F7.jpeg
DE017ACB-5ABD-4113-B110-95DABF7F28F7_1_105_c.jpeg
DE017ACB-5ABD-4113-B110-95DABF7F28F7_4_5005_c.jpeg

y hay dos problemas:

  • son duplicados de diferentes tamaños (esto probablemente sea simple, puedo hacer un script para eliminar los archivos más pequeños *_1_105_c.jpgy mantener solo el archivo grande original)

  • ¡los archivos están en un orden totalmente aleatorio!

Antes de lanzar mi propia secuencia de comandos de Python (examinar EXIF ​​y recrear "nuevos nombres de archivo" de acuerdo con la fecha y hora de la foto), ¿ hay trucos/cosas que saber/técnicas para recuperar mejores nombres de archivos de fotos de estos nombres de archivo de aspecto aleatorio DE017ACB-5ABD-4113-B110-95DABF7F28F7.jpeg:?

En términos más generales, ¿es posible tener menos problemas con los nombres de archivo JPG al importar fotos desde un iPhone?

Notas al margen:

  • Hago copias de seguridad automatizadas, tanto en local como a distancia

  • no queremos usar una solución en la nube para administrar fotos, y tampoco un software de catalogación (como Lightroom o similar)

  • Motivo de este "Quiero manejar los archivos de fotos yo mismo" : con este método de "archivos JPG simples en carpetas", las fotos se pueden leer en todos los dispositivos (Win, Linux, Mac, etc.) sin necesidad de un software específico que probablemente sería sin mantenimiento/no disponible en el año 2079, cuando mis hijos querrán abrirlos;)
    "Solo archivos JPG en una carpeta" es probablemente el método que maximiza la posibilidad de abrirse en 50 o 100 años.

  • para mi próxima importación desde iPhone, ¿hay otro software además de la aplicación "Fotos" que establece directamente mejores nombres de archivo al importar? Esto parece mostrar que "Image Capture" funcionaría mejor en mi caso: ¿ Cómo importo fotos en OS X sin usar Photos.app?

Respuestas (1)

Para futuros iPhone -> importaciones de computadora

El uso de la aplicación "Image Capture" en lugar de la aplicación "Photos" resuelve la mayoría de los problemas (como se explica aquí: ¿Cómo importo fotos en OS X sin usar Photos.app? ). Notas:

  • Establezca "Conservar originales" en deshabilitado para que los archivos HEIC se conviertan automáticamente a JPG durante la importación (no estoy seguro de si las computadoras de mis hijos podrán entender fácilmente los archivos HEIC en 70 años, ¡pero seguramente JPG será compatible!)

  • "Eliminar después de importar" es importante.

  • Al final de la importación, tuve el "Error 9937" para algunos archivos MOV. A continuación, vuelva a realizar la exportación de estos archivos con la opción "Conservar originales" habilitada.

Para una exportación ya realizada con nombres de archivo aleatorios

1) Primero ejecute un script que agrupe variaciones de la misma foto, como:

DE017ACB-5ABD-4113-B110-95DABF7F28F7.jpeg
DE017ACB-5ABD-4113-B110-95DABF7F28F7_1_105_c.jpeg
DE017ACB-5ABD-4113-B110-95DABF7F28F7_4_5005_c.jpeg

Esto se puede hacer fácilmente con Python con:

import glob, os
H = dict()
for f in glob.glob('*.jpeg'):
    h = f[:36]  
    H.setdefault(h, []).append(f)

Luego, para cada grupo , puede conservar el archivo con el nombre de archivo más corto (por ejemplo DE017ACB-5ABD-4113-B110-95DABF7F28F7.jpeg, ) y eliminar los demás (con os.remove(...)).

2) Ejecute un script de Python que transforme un nombre de archivo aleatorio DE017ACB-5ABD-4113-B110-95DABF7F28F7.jpegen 20200502_120003.jpgfunción de la fecha y hora almacenada en los metadatos EXIF

import glob, os, PIL.Image, datetime

for f in glob.glob('*.jpeg'):
    with PIL.Image.open(f) as img:
        exif_data = img._getexif()
    if exif_data == None:
        # do something here
        continue
    model, software, dt = exif_data.get(272, ''), exif_data.get(305, ''), exif_data.get(306, '')
    newfname = datetime.datetime.strptime(dt, '%Y:%m:%d %H:%M:%S').strftime('%Y%m%d_%H%M%S') + '.jpg' if dt != '' else f
    # rename the file with the new filename
    # and also move it in a specific folder according to model/software
    # special case to handle: filename collisions