Inky 1 Inky 2 Inky 3

EXIF Data FIX

Da quando è arrivata la fotografia digitale, più o meno un quarto di secolo fa, ho sviluppato un talento speciale: scattare foto e rimandare all’infinito il momento di organizzarle. Con i vecchi rullini era tutto più semplice: avevi a disposizione appena 24 o 36 pose e, dopo aver pagato lo sviluppo, scoprivi che metà delle immagini era venuta mossa, sovraesposta, sottoesposta o con qualche dito davanti all’obiettivo. Ti ritrovavi quindi con al massimo una decina di scatti decenti e la questione finiva lì. Oggi, al contrario, al ritorno da un viaggio sei sommerso da migliaia di file, perché hai la libertà di scattare a raffica senza apparenti controindicazioni.

Il risultato di questa libertà? Una totale anarchia. Nel corso degli anni le mie foto sono affogate in una matrioska di cartelle e sottocartelle, mischiate a backup di sicurezza ridondanti e a vecchi hard disk trasferiti da un Mac all’altro: centinaia di gigabyte costellati di doppioni. A un certo punto mi sono quindi imposto un limite etico: se ho impiegato trent’anni ad accumulare questo caos, posso concedermene altrettanti per rimetterlo in ordine.

Superato lo scoglio concettuale, restava da capire quale strumento usare. L’idea di stampare dei classici album fisici è stata scartata all’istante, sapendo che sarebbero finiti in una vetrina a prendere polvere. Quindi, via libera al digitale. Tanti anni fa ho provato iPhoto, ma era un’applicazione primordiale: spartana, limitata, con il brutto vizio di “ottimizzare” le foto rovinando il formato originario (anche l’eventuale esportazione risultava pertanto compromessa), e talvolta causava veri e propri danni. Sono poi passato a Plex, che sembrava la soluzione ideale per coniugare tag, geolocalizzazione e visualizzazione in streaming dal NAS di casa. Sfortunatamente, la piattaforma ha in seguito deciso di trasformarsi in una sorta di Netflix dei poveri, abbandonando le funzioni locali più utili. Mi sono quindi giocato la carta Jellyfin – il suo successore morale non ancora corrotto dal dio denaro – ma è tuttora troppo acerbo: non digerisce nemmeno il “nuovo” formato HEIC.

Alla fine, un po’ titubante e con l’orgoglio ferito, sono tornato sui miei passi bussando nuovamente in casa Apple. Nel frattempo iPhoto è diventato semplicemente Foto ed è maturato parecchio. Con l’occasione ho fatto trentuno e ho attivato anche iCloud Foto – un servizio che in passato avevo sempre evitato come la peste per il solo principio di non voler affittare spazio online – e ho trovato la pace spirituale: libreria centralizzata sulla nuvola, protezione dalle perdite, riconoscimento facciale efficiente, condivisione immediata e, soprattutto, file originali intatti. Il tutto con il vantaggio di conservare versioni leggere sui dispositivi, rimandando il download a risoluzione piena solo all’occorrenza.

La trappola dei fusi orari

Quando scatti una foto, ogni documento si porta dietro diverse identità temporali. C’è la data di creazione – il momento esatto in cui l’immagine prende vita – e quella di modifica, che varia non appena ci metti mano, anche solo trasferendo il documento su un altro disco. Dato che per comodità nel Finder visualizzo unicamente la data di modifica (quella di creazione resta comunque accessibile nelle proprietà del file, in caso di necessità), mi ritrovo regolarmente con interi album del passato associati a date apparentemente poco coerenti. Un controsenso fastidiosissimo, specialmente in un archivio fotografico.

Ma non è finita qui, altrimenti sarebbe stato troppo semplice.

La foto ritrae una maestosa amatriciana cucinata in Malesia per la mia famiglia asiatica. La data di creazione riporta 4 luglio 2022 alle ore 13:53. Si trattava però di una cena, non un pranzo. Scavando nei metadati EXIF – quell’archivio testuale interno all’immagine che sa tutto della foto, dal tempo di scatto fino all’apertura del diaframma, dagli ISO fino a… guarda un po’: l’istante preciso dello scatto – l’orario reale registrato dalla fotocamera segnava correttamente le 19:53.

Chi ha ragione, quindi? In realtà, entrambi gli orari hanno senso. Il timestamp del file riporta l’orario italiano perché, una volta a casa, il documento deve essere coerente: quando io ho scattato la foto in Malesia, in Italia erano giustamente le 13:53. I programmi di gestione album avanzati come Foto non si fanno ingannare, perché vanno a leggere direttamente i dati EXIF (dove l’ora viene registrata in formato UTC – il tempo universale assoluto – e il software applica automaticamente gli aggiustamenti del fuso orario per calcolare l’ora locale effettiva). Applicazioni meno sofisticate come il vecchio Plex, invece, si basano ciecamente sulla data del file, sballando tutto.

Fino a oggi ho sempre sistemato tutto a mano, allineando la data di modifica del Finder all’EXIF dello scatto attraverso una piccola utility che non era tuttavia capace di estrarre i metadati in autonomia e mi costringeva a cercare da solo le informazioni da inserire. Se poi, per qualunque motivo, dovevo riaprire il documento (anche solo per aggiungere la geolocalizzazione), il sistema resettava nuovamente la data e mi toccava ricominciare tutto da capo. Capisci quindi perché la mia voglia di organizzare le foto scemava velocemente.

Oggi ho deciso che le cose dovevano cambiare, e che l’unica soluzione sensata sarebbe stata scrivermi uno script da solo.

Comandi Rapidi (e i suoi limiti)

Da qualche anno Apple ha introdotto Comandi Rapidi, una piattaforma decisamente più moderna e pratica rispetto al vecchio Automator: è sufficiente combinare insieme alcuni blocchi di comandi visivi per realizzare facilmente flussi di lavoro complessi. Sul mio iPhone per esempio ne ho impostata una che a mezzanotte scarica l’immagine del giorno di Bing, la ridimensiona, la salva in un album di Foto per riutilizzi futuri e la imposta come sfondo della schermata di blocco. Una funzionalità che su Android è (credo) presente di default; Comandi Rapidi consente di implementare funzionalità non presenti nativamente nei sistemi operativi Apple col minimo sforzo. 

L’idea di base per strutturare la logica del mio script prevede i seguenti passaggi:

  • Selezionare i file da correggere.
  • Creare una cartella di backup e spostarci dentro gli originali.
  • Creare una copia dei file originali nella cartella di origine.
  • Cercare la data EXIF all’interno dei file: se è presente, impostarla come nuova data di modifica; altrimenti usare quella di creazione.
  • Lasciare la data di creazione inalterata rispetto all’originale, perché è quella corretta nella logica del funzionamento del sistema operativo.
  • Mostrare un report con i risultati dell’operazione.

Perché non creare direttamente una copia di backup invece di spostare e poi copiare?

Un utente attento

Perché altrimenti la copia non avrebbe mantenuto le date di creazione e di modifica: spostare un file non lo cambia.

A prima vista lo script sembrava semplice da realizzare, ma Comandi Rapidi è una applicazione relativamente recente e ha ancora qualche spigolo da smussare. Ho dovuto impiegare almeno una cinquantina di blocchi perché la funzione integrata per la formattazione delle date ha al momento grandi problemi, costringendomi a separare e unire manualmente tutte le informazioni nel formato che Unix richiedeva.

Nella prima versione, la quasi totalità del lavoro era strutturata attorno a un ciclo ripetitivo: per ogni singolo file selezionato, lo script doveva estrarre il percorso e calcolare le date, per poi passare i dati a Unix che eseguiva le operazioni di backup e modifica. Fatto questo, il controllo tornava all’interfaccia grafica e il ciclo ricominciava da capo per l’elemento successivo. Un continuo, estenuante andirivieni di dati tra lo script e il cuore del sistema operativo. Come è andata? Un mezzo disastro. Elaborare 57 immagini richiedeva circa due minuti e mezzo di tempo. Non solo: se ne selezionavo più di 60, andava sistematicamente in crash (non il Finder, non il Unix, ma proprio Comandi Rapidi). Bombardare Unix con 400 istruzioni consecutive a nastro nel giro di pochi secondi non impensierisce minimamente il cuore del sistema operativo, ma è evidentemente un’indigestione fatale per lo script.

Ottimizzazione selvaggia

Mi sarei potuto accontentare? Certamente!

Ovviamente no. Anche se è raro che i miei album superino le 150 foto e avrei potuto spezzare il lavoro in tre riprese, si rendeva moralmente necessario ottimizzare.

Ho quindi deciso di usare lo script unicamente per la selezione dei file1Lo script si limita a ordinarli alfabeticamente (macOS tiene conto dell’ordine col quale si cliccano i singoli elementi, ma io volevo evitare un report finale con un ordine apparentemente casuale). e per condensare tutti i path in un’unica variabile da passare alla shell Zsh (Unix), che avrebbe fatto il lavoro sporco.

I nuovi numeri mi hanno dato ragione: lo stesso quantitativo di file viene adesso processato in appena 4 secondi.2In realtà un po’ meno perché uno lo perde a formattare il report e ogni 10% di progresso mostra una notifica a riguardo; ma si tratta di un’attesa trascurabile.

Con l’occasione ho anche scoperto che il limite massimo di file che Comandi Rapidi riesce a digerire in un colpo solo è di 1.000 elementi, dopodiché alza bandiera bianca (semplicemente apre una finestra per chiedere di selezionare un’immagine, perché evidentemente qualcosa gli provoca una sorta di amnesia informatica); ma per le mie esigenze è un tetto che non raggiungerò mai.

La vera chicca della nuova utility Apple (che in inglese si chiama Shortcuts: un incubo trovare informazioni online senza finire sommersi da scorciatoie da tastiera di qualsiasi tipo) è l’integrazione con il sistema operativo.

Lo script può essere inserito direttamente nelle Azioni Rapide del Finder. In questo modo è sufficiente selezionare i documenti (che possono anche essere video o altri tipi di file multimediali), fare click col tasto destro del mouse e lanciarlo senza dover avviare applicazioni aggiuntive. Grazie a come l’ho strutturato, posso selezionare contemporaneamente anche documenti sparsi in cartelle diverse: lo script creerà autonomamente una cartella di backup nel rispettivo percorso di ciascun file (invece di generarne una sola all’inizio e infilarci dentro tutte le immagini).

Gli script di Comandi Rapidi non vengono salvati in un classico file, ma da qualche parte nell’ecosistema Apple, pertanto Data FIX lo posso condividere con questo link. Sui sistemi Apple viene automaticamente installato e attivato, su altre piattaforme non ne ho la più pallida idea.

Per quanto mi riguarda, a questo punto non ho più scuse. Posso finalmente dare il via alla mia grande opera di riorganizzazione fotografica con meno complicazioni; e chissà che non riesca a terminarla ben prima dei trent’anni preventivati… :)

Nota: vuoi sapere quanto ci mette lo script a elaborare 1.000 file? La risposta è nell’immagine di copertina.

8 pensieri su “EXIF Data FIX

  1. Tutto inutilmente troppo complicato secondo me.
    Su Linux e, quasi certamente, usando Brew.sh troverai una utility chiamata con estrema fantasia ‘exif’ che ti permette di fare tutto con 3-4 linee di script bash (o fish, o zsh, il tipo di shell non cambia molto) e più velocemente.

    1. Ah, cavolo. E pensare che io questo script lo avevo fatto proprio per te… ;'(
      Che possa esistere qualche utility che faccia qualcosa del genere non lo metto in dubbio; ma che ce ne sia una pronta da lanciare così comodamente dal Finder mi pare altamente improbabile. :)

  2. Io seleziono le foto, tutte quelle scattate, modifica ora, e tornano tutte magicamente a posto… semplice facile e veloce. Ah, e puoi sempre tornare indietro.

    1. Non capisco a cosa ti riferisci? Al Finder? a Foto?
      Nel Finder non trovo alcun comando “modifica ora”.
      In Foto idem, a meno che tu non intenda “Regola data e ora…”; ma quello cambia soltanto la data visualizzata in Foto, il tuo file originale rimane invariato (a meno che non lo trascini fuori con un drag and drop e allora ti crea una immagine processata e ti sei sputtanato la data originale perché si perde l’EXIF):

      Come vedi, l’unico modo per aggiornare (automaticamente) le date dei documenti, è usare il mio script, oppure farlo a mano con qualche altra utility…

      1. Dentro Foto, alla fine cambia la visualizzazione dentro foto, con tutte le foto visualizzate nell’ora giusta e questo mi va bene. Alla fine cosa ti serve di altro? L’orario in fondo è giusto quello che hai scattato, è il fatto che Foto visualizza riportandoti tutto in “locale”, se lo cambi sei a posto. Almeno per me.

        1. Adesso è chiaro. :)
          In realtà non dovresti cambiare mai l’orario dentro Foto perché fa esattamente quello che ho fatto io nel mio script: cerca di mostrare sempre l’orario più accurato leggendo l’EXIF che è sacro (se c’è) o ripiegando sulla data di creazione (se l’EXIF non c’è). Se il tuo è semplicemente un discorso di ordinare differentemente le foto, basta che le metti in un album e le sposti con un drag and drop.
          Quindi sì, da un punto di vista completamente teorico il mio script è completamente inutile con Foto.
          L’ho creato semplicemente perché magari non utilizzerò Foto per sempre: forse un domani uscirà qualcosa di meglio, o magari Apple lo risputtanerà in futuro.
          In quel caso mi piacerebbe avere i miei album ordinati coerentemente anche all’interno di una directory del sistema operativo (in realtà ho già delle copie bene organizzate sul NAS, perché fidarsi della Mela è bene, ma non fidarsi…). :)

          1. in realtà il problema è Foto. In lightroom questo problema non c’è. Usa sempre l’ora del posto dove sono state scattate. Quindi se sono state scattate alle 12:45 in USA, non fa nessun cambio… sempre 12:45 rimane

          2. È corretto, per coerenza l’orario di creazione del file deve essere quello del tuo fuso orario di casa, è l’EXIF che terrà quello di dove hai scattato la foto (ed è la data che ti mostra Foto). Infatti la data di creazione non la tocco mai. Siccome quella di modifica è inutile, perché si modifica a ogni cambio di vento, faccio in modo che nel file system rifletta quella dell’EXIF. Tutto qui.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

Translate