Trova foto per fuso orario

1

Alcune delle mie foto in Apple Photos 2.0 (3150.4.120) hanno il fuso orario sbagliato, ma non so quali. Posso trovare il fuso orario per una singola foto, selezionando Immagine > Regola data e ora.

Ma come posso trovare tutte le foto con un determinato fuso orario? Ho provato a cercare nel Finder, nei metadati del filesystem delle foto (usando mdls), nei metadati EXIF delle foto (usando exiftool), e anche nel database sqlite di Photos, ma non ho trovato dove sono archiviati.

Dove sono queste informazioni?

    
posta JW. 17.05.2017 - 01:49
fonte

1 risposta

2

Può dipendere dalla fotocamera / telefono e dal sistema operativo; ma, non credo che il fuso orario sia memorizzato in modo esplicito nei metadati EXIF della foto.

In alcuni metadati, c'è un GPS Time (Atomic Clock) che è impostato su UTC. Quindi, Foto probabilmente calcola solo gli offset di Date and Time (Original) per visualizzare il fuso orario.

Potresti essere in grado di usare exiftool per creare un elenco di queste due volte per le tue immagini e cercare valori anomali che sono più (o meno) diversi dagli altri.

Aggiornamento dal poster originale:

Ho creato un rapido script Python per confrontare questi tempi e stampare quelli che non si trovano nel fuso orario previsto o che hanno valori diversi per i minuti. Dovrai esportare gli originali non modificati da Foto, poiché quelli modificati non hanno questi metadati e quindi passare i loro nomi di file a questo script.

Naturalmente, non ho idea se questo è qualcosa vicino a ciò che Photos fa per impostare il fuso orario. Ma ha identificato correttamente le foto che conoscevo con il fuso orario sbagliato e non ho trovato alcun 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)
    
risposta data 17.05.2017 - 03:58
fonte

Leggi altre domande sui tag