Buscar fotos por zona horaria

1

Algunas de mis fotos en Apple Photos 2.0 (3150.4.120) tienen la zona horaria incorrecta, pero no sé cuáles. Puedo encontrar la zona horaria para una foto individual seleccionando Imagen > Ajustar fecha y hora.

¿Pero cómo puedo encontrar todas las fotos con una determinada zona horaria? He intentado buscar en el Finder, en los metadatos del sistema de archivos de las fotos (usando mdls), en los metadatos EXIF de las fotos (usando exiftool), e incluso en la base de datos sqlite de Photos, pero no he encontrado dónde están almacenados.

¿Dónde está esta información?

    
pregunta JW. 17.05.2017 - 01:49

1 respuesta

2

Puede depender de la cámara / teléfono y sistema operativo; pero, no creo que la zona horaria esté almacenada explícitamente en los metadatos EXIF de la imagen.

En algunos metadatos, hay un GPS Time (Atomic Clock) que se establece en UTC. Por lo tanto, es probable que Fotos solo calcule las compensaciones de Date and Time (Original) para mostrar la zona horaria.

Es posible que puedas usar exiftool para crear una lista de esas dos veces para tus imágenes y buscar valores atípicos que sean más (o menos) diferentes a los demás.

Actualización del póster original:

Junté un script rápido de Python para comparar estos tiempos, e imprimí los que no están en la zona horaria esperada, o tienen diferentes valores por minutos. Deberá exportar los originales sin modificar de las fotos, ya que los modificados no tienen estos metadatos y luego pasar sus nombres de archivo a este script.

Por supuesto, no tengo idea si esto es algo parecido a lo que las fotos hacen para establecer la zona horaria. Pero identificó correctamente las fotos que conocía con la zona horaria incorrecta y no encontró ningún falso positivo.

#!/usr/bin/python

from subprocess import check_output
import sys, re, os
from dateutil.parser import parse
from datetime import datetime

expected_offset_hours = 8.0  # set to appropriate time zone offset

def get_field(out, name):
    match = re.search("^" + re.escape(name) + "\t(.+?)$", out, re.MULTILINE)
    if match:
        return match.group(1)
    return None

for arg in sys.argv[1:]:
    if not os.path.exists(arg):
        continue
    out = check_output(["exif", "-m", arg])
    gps_date = get_field(out, "GPS Date")
    gps_time = get_field(out, "GPS Time (Atomic Clock)")
    if gps_date == None or gps_time == None:
        print arg + "\tNo GPS date/time"
        continue
    gps_parsed = datetime.strptime(gps_date + " " + gps_time, '%Y:%m:%d %H:%M:%S.%f')
    orig_datetime = get_field(out, "Date and Time (Original)")
    if orig_datetime == None:
        continue
    orig_parsed = datetime.strptime(orig_datetime, '%Y:%m:%d %H:%M:%S')
    offset_secs = (orig_parsed - gps_parsed).total_seconds()
    offset_hours = round(offset_secs / 3600)
    offset_mins = abs(offset_secs - (offset_hours * 3600)) // 60
    if offset_hours != expected_offset_hours or offset_mins > 0:
        #print gps_date + ' ' + gps_time + ' ' + str(gps_parsed)
        #print orig_datetime + ' ' + str(orig_parsed)
        print arg + "\t" + str(offset_hours) + "\t" + str(offset_mins)
    
respondido por el Kent 17.05.2017 - 03:58

Lea otras preguntas en las etiquetas