Modificare i metadati delle foto con EXIFTool e geolocalizzarle per prossimità con quelle dell’iPhone

Questa estate ho deciso di fare ordine di tutte le foto accumulato negli anni su iCloud e il mio fedele Synology.

Il primo problema che ho incontrato si è presentato ruotando delle vecchie foto del matrimonio.
Di fatto queste foto digitali alquanto datate, non avevano dati EXIF relativi alla data di scatto, quindi il catalogo del Synology utilizzava come riferimento la data del file, con il risultato che tutte le foto ruotate si sono spostate nella timeline ad oggi.

Ovviamente è possibile modificare i files uno ad uno, ma la cosa diventava alquanto tediosa, quindi mi sono messo alla ricerca di un tool per automatizzare la correzione di questo e di eventuali altri casi mi fossero capitati nelle modifiche in corso.

Ho subito individuato EXIFtool come lo strumenti definitivo per questo tipo di attività, è maturo, completo e molto efficace. Sebbene la complessità da riga di comando non sia delle più banali, dedicandoci un pò di tempo ho trovato delle soluzioni veramente interessanti.

Per prima cosa dovevo ripristinare la data del file. L’operazione è alquanto semplice, ma visto che c’ero ho impostato correttamente anche tutte le date in formato Exif.

exiftool.exe -FileModifyDate="2002-09-28 00:00:00" -DateTimeOriginal="2002-09-28 00:00:00" -CreateDate="2002-09-28 00:00:00" -FileCreateDate="2002-09-28 00:00:00" -modifydate="2002-09-28 00:00:00" -datetime="2002-09-28 00:00:00" -P -overwrite_original *.jpg

In questo modo anche se le foto erano vecchie, ho corretto sia la data del file che tutti gli attributi interni. Nulla di più efficace per tornare allo stato iniziale ed evitare futuri casini.

Attenzione ad aggiungere sempre il parametro “-overwrite_original” altrimenti vi troverete la cartella piena di duplicati con i file originali in copia.

Arrivato a questo punto, visto che c’ero ho deciso di completare i tag Exif relativi alle date di tutti i file che ne fossero stati sprovvisti.

EXIFTool è molto potente, ma qui la cosa diventava più complicata. Intanto dovevo aggiornare la data del file in modo dinamico prendendola da un dato certo e poi applicarla solo nei casi in cui questa fosse stata valida.

Il comando corretto per fare questa modifica in un colpo solo è il seguente:

exiftool.exe -if "$CreateDate lt '0001:00:00'" -p "$directory\$FileName" "-DateTimeOriginal<FileModifyDate" "-CreateDate<FileModifyDate" "-FileCreateDate<FileModifyDate" "-modifydate<FileModifyDate" "-datetime<FileModifyDate" -overwrite_original -q -f .

In sostanza utilizzando l’attributo -if si possono applicare dei filtri condizionali e con < si possono copiare attributi su altri attributi. Problema risolto, ora tutte le mie vecchie foto sono taggate indipendentemente dalla data del file.

Proseguendo con il lavoro di pulizia, ho realizzato che per diversi viaggi, mi trovo nella situazione di aver fotografato sia con la mia Sony che con il cellulare. Il risultato è che le foto fatte con il cellulare sono geo-localizzate alla perfezione, mentre quelle prese con la reflex, no.

Solitamente le selezionavo tutte dall’archivio del Synology e impostavo una posizione di massima della città visitata, ma sono pignolo e la cosa non mi piaceva troppo. Anche qui ci viene in aiuto EXIFTool, con le importanti capacità di geotagging. Immaginiamo di avere nella stessa cartella sia foto dell’iPhone che foto della reflex.

Per prima cosa dobbiamo estrarre tutto il percorso fotografico prendendo la posizione di tutte le foto del iPhone e creando un bel file GPX con tutti i punti. Questa operazione è molto semplice, ma bisogna stare attenti ai dettagli. Il comando che ho usato è:

exiftool -r -if "$gpsdatetime" -fileOrder gpsdatetime -p gpx.fmt . &gt; out.gpx

Prima di tutto vi serve un file template per il formato GPX, che inserisco in fondo al post.

Gli altri parametro sono la verifica che esista il tag gpsdatetime altrimenti i dati estratti non avrebbero senso e il programma va in crash, e il parametro fileOrder per avere una traccia ordinata per data e non in ordine sparso che ne impedirebbe la corretta interpolazione.

Una volta generato il file di traccia, possiamo applicarlo a tutte le foto che non sono geo-localizzate, e questa operazione si fa eseguendo il programma con questi parametri:

exiftool -r -if "not $gpsdatetime" -geotag out.gpx "-geotime&lt;DateTimeOriginal" -api GeoMaxIntSecs=7200 GeoMaxExtSecs=7200 -overwrite_original .

Qui c’è qualche trick che ci ho messo un bel pò a capire, nello specifico Geomaxintsecs permette di essere più flessibili in quando a time span temporale tra le foto, per me anche un ora è buona pur di localizzare più foto possibili.

Un altro trucco è impostare di forza il tag geotime, altrimenti molti degli aggiornamenti falliscono.

Per il resto il risultato è ottimale e non avrei saputo come ottenerlo cosi velocemente e gratis.

EXIFTool è uno strumento fondamentale per il fotografo puntiglioso che vuole tutto in ordine, ma prevede anche una buona dose di pazienza e ricerca per capire come si usano le miglia di comando che mette a disposizione.

Segue il template per il file di traccia GPS in formato GPX. Copialo in un file.
#----------------------------------------------------------------------
# File: gpx.fmt
#----------------------------------------------------------------------
#[HEAD]<?xml version="1.0" encoding="utf-8"?>
#[HEAD]<gpx version="1.0"
#[HEAD] creator="ExifTool $ExifToolVersion"
#[HEAD] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
#[HEAD] xmlns="http://www.topografix.com/GPX/1/0"
#[HEAD] xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
#[HEAD]<trk>
#[HEAD]<number>1</number>
#[HEAD]<trkseg>
#[IF] $gpslatitude $gpslongitude
#[BODY]<trkpt lat="$gpslatitude#" lon="$gpslongitude#">
#[BODY] <ele>$gpsaltitude#</ele>
#[BODY] <time>${gpsdatetime#;DateFmt("%Y-%m-%dT%H:%M:%SZ")}</time>
#[BODY]</trkpt>
#[TAIL]</trkseg>
#[TAIL]</trk>
#[TAIL]</gpx>