Changer les dates de vos photos de vacances (fix dates EXIF)

J'ai passé 3 semaines de vacances et j'ai oublié de régler la date sur mon appareil photo. L'appareil stocke l'information de date dans un en-tête du fichier, appelé EXIF. Du coup, toutes les photos semblent prisent à des heures surnaturelles, et je voudrais corriger ça avec des outils libres.

Installation d'ExifTool

Après une recherche rapide, il semblerait que l'outil à utiliser soit exiftool. On peut l'installer facilement sous linux par exemple avec sudo apt-get install libimage-exiftool-perl. Installer exiftool sur d'autres systèmes semble faisable.

Trouver la différence de date

J'avais anticipé le problème, pendant les vacances, et j'ai donc pris (avec mon téléphone) une photo de l'horloge de mon appareil photo. Appelons cette photo phone.jpg. Juste après, j'ai aussi pris une photo avec mon appareil, old.jpg. Si vous n'avez pas fait ça ou que votre appareil n'affiche pas facilement l'heure, il suffit de trouver une photo que vous savez dater précisément.

Partant de là, j'ai regardé les données EXIF avec exiftool et en utilisant grep pour filtrer les résultats. Nous devrions voir apparaître deux dates: la date à laquelle j'ai copié les photos sur mon ordinateur et la date à laquelle j'ai pris la photo (c'est celle qui nous intéresse).

$ exiftool old.jpg | grep 2015
 
File Modification Date/Time     : 2015:05:23 17:20:31+02:00
File Access Date/Time           : 2015:05:23 17:20:42+02:00
File Inode Change Date/Time     : 2015:05:23 17:20:31+02:00
Modify Date                     : 2015:02:19 22:46:13         <<<<---------
Date/Time Original              : 2015:02:19 22:46:13
Create Date                     : 2015:02:19 22:46:13

Maintenant, il me faut l'heure (locale) à laquelle la photo a été prise. J'utilise ici phone.jpg mais vous pouvez utiliser une autre source (votre mémoire, ...).

$ exiftool phone.jpg | grep 2015
 
File Modification Date/Time     : 2015:05:23 17:18:54+02:00
File Access Date/Time           : 2015:05:23 17:21:00+02:00
File Inode Change Date/Time     : 2015:05:23 17:18:54+02:00
GPS Date Stamp                  : 2015:02:19
Create Date                     : 2015:02:19 10:39:13          <<<<---------
Date/Time Original              : 2015:02:19 10:39:13
GPS Date/Time                   : 2015:02:19 20:39:13Z
Create Date                     : 2015:02:19 10:39:13.851298
Date/Time Original              : 2015:02:19 10:39:13.851298

Donc ma photo a été prise le 2015-02-19 à 10:39:13 mais est marquée par mon appareil à 22:46:13. Cela veut dire que pour corriger les dates de mon appareil il faut retirer 12 heures et 7 minutes. Avant de continuer, j'ai vérifié avec d'autres photos que cette différence n'est pas aberrante.

Identification des champs à changer

Nous avons vu que la date revient plusieurs fois dans l'en-tête EXIF. Il nous faut une liste des champs à mettre à jour, ainsi que leur nom exact (l'outil exiftool les renomme en les affichant). Pour cela nous allons utiliser une options de exiftool et ne garder que les lignes qui contiennent l'heure qui nous intéresse (22:46:13).

$ exiftool -s old.jpg | grep 2015 | grep 22:46
 
ModifyDate                      : 2015:02:19 22:46:13
DateTimeOriginal                : 2015:02:19 22:46:13
CreateDate                      : 2015:02:19 22:46:13

Voilà, nous devons mettre à jours ces 3 champs: ModifyDate, DateTimeOriginal, CreateDate.

Application de la différence à toutes les images d'un répertoire

L'outil exiftool marche de manière récursive et permet de facilement appliquer un décalage de date. Du coup, il nous suffit d'une seule commande pour changer toutes nos date (en soustrayant 12 heures et 7 minutes).

$ exiftool "-ModifyDate-=12:07:00" "-DateTimeOriginal-=12:07:00" "-CreateDate-=12:07:00" -overwrite_original hawaii/
 
    1 directories scanned
  187 image files updated

L'option -overwrite_original dit à exiftool de ne pas faire de copies de sauvegarde (si comme moi vous n'avez pas trop d'espace libre). C'est pourquoi il vaut mieux vérifier deux fois la différence de date et tester la commande sure une image de test. J'ai par exemple utilisé:

$ exiftool -s test.jpg |grep 2015
$ exiftool "-ModifyDate-=12:07:00" test.jpg
$ exiftool -s test.jpg |grep 2015
$ exiftool "-DateTimeOriginal-=12:07:00" "-CreateDate-=12:07:00" test.jpg
$ exiftool -s test.jpg |grep 2015

J'espère que ce sera utile !

Des commentaires, des remarques ? Contactez moi : click-me ;-p @nospam.com.