Takeout JSON

Google Takeout : pourquoi vos photos ont toutes la mauvaise date

Après un export Google Takeout, chaque photo porte la date du téléchargement. Où se cache la vraie date de prise de vue et comment la remettre dans les photos.

Vous avez téléchargé votre bibliothèque Google Photos avec Google Takeout, décompressé les archives, ouvert le dossier. Dix ans de photos, et toutes prétendent avoir été prises mardi dernier. Un tri par date place vos vacances de 2012 à côté des captures d'écran d'hier.

Rien n'est perdu. Les dates sont toujours là, mais pas à l'endroit où votre ordinateur les cherche.

Où est passée la date de prise de vue

Une photo peut porter sa date à trois endroits. L'appareil en écrit une à l'intérieur du fichier, dans le bloc EXIF, sous le nom « DateTimeOriginal ». Le système en garde deux autres à l'extérieur du fichier : la date de création et la date de modification. L'Explorateur Windows, le Finder et la plupart des galeries lisent d'abord l'EXIF, puis se rabattent sur les dates du fichier s'il n'y en a pas.

Takeout casse ce mécanisme de deux façons. D'abord, quand Google emballe vos fichiers dans une archive zip, les dates de fichier deviennent le moment où l'archive a été construite, ou celui où vous l'avez décompressée. Ce ne serait pas grave si l'EXIF était intact.

Ensuite, pour une bonne partie des photos, la date EXIF manque ou est fausse. Les captures d'écran n'en ont jamais eu. WhatsApp et les autres messageries suppriment les métadonnées en compressant les images. Les scans portent la date du scan, pas celle du tirage. Et si vous avez corrigé une date dans Google Photos, cette correction a été enregistrée dans la base de données de Google, pas dans le fichier. Google place la bonne information dans un fichier .json séparé à côté de chaque photo, au lieu de la réécrire dans l'image.

Votre ordinateur ignore complètement ces fichiers .json. Il affiche donc la seule date qu'il trouve : celle du téléchargement.

Mesurer l'ampleur du problème

Avant de corriger quoi que ce soit, regardez combien de fichiers en ont vraiment besoin. Les photos prises directement avec l'appareil photo du téléphone gardent en général une bonne date EXIF. Si c'est le cas de la plupart des vôtres, seule une partie de la bibliothèque est à traiter.

Si exiftool est installé, cette commande liste chaque fichier sans date EXIF :

exiftool -r -if 'not $DateTimeOriginal' -filename "Takeout/Google Photos"

Sur une archive Takeout réelle de 991 photos que nous avons mesurée, le fichier JSON était la seule source d'une date correcte pour environ une photo sur cinq. Votre proportion sera différente. Une bibliothèque pleine de captures d'écran, d'images de messagerie et de vieux scans dépend beaucoup plus des fichiers JSON.

Ouvrir un fichier JSON et regarder

Chaque photo a un fichier compagnon du type IMG_2034.JPG.supplemental-metadata.json (les exports plus anciens utilisent IMG_2034.JPG.json). Ouvrez-le avec n'importe quel éditeur de texte. La partie qui compte ressemble à ceci :

"photoTakenTime": {
  "timestamp": "1563102330",
  "formatted": "Jul 14, 2019, 11:05:30 AM UTC"
}

Ce timestamp est la vraie date, en secondes depuis 1970, en UTC. Il y a aussi un champ creationTime, qui est la date d'envoi du fichier vers Google. Si vous voulez la date de prise de vue, c'est photoTakenTime qu'il faut lire. Le fichier complet est décrit dans les fichiers JSON de Google Takeout.

Corriger à la main

Pour une poignée de photos, réglez la date manuellement. Sur Mac, ouvrez la photo dans Aperçu ou Photos et modifiez la date. Sous Windows, clic droit sur le fichier, Propriétés, onglet Détails, puis modifiez « Date de la prise de vue ». Faites-le pour cinquante photos et vous chercherez une meilleure méthode.

Pour toute une bibliothèque, l'outil vers lequel on se tourne est exiftool. Une commande copie l'horodatage de chaque JSON dans la photo et dans les dates du fichier :

exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" \
  "-DateTimeOriginal<PhotoTakenTimeTimestamp" \
  "-FileCreateDate<PhotoTakenTimeTimestamp" \
  "-FileModifyDate<PhotoTakenTimeTimestamp" \
  -ext jpg -ext jpeg -overwrite_original "Takeout/Google Photos"

Cela fonctionne, avec des pièges. Google tronque les noms de fichiers JSON trop longs à 46 caractères, donc le motif ci-dessus en rate une partie. Les doublons portent un (1) placé à un endroit différent dans le nom du JSON et dans celui de la photo. Les vidéos demandent d'autres balises. HEIC et PNG demandent des passes séparées. Tout cela est détaillé dans le guide exiftool. Il existe aussi des scripts communautaires gratuits comme GooglePhotosTakeoutHelper qui gèrent ces bizarreries de nommage, si le terminal ne vous fait pas peur.

L'application

Si vous préférez ne pas passer une soirée en ligne de commande, Takeout JSON Metadata Fixer fait ce travail dans une application de bureau, sur Windows, Mac et Linux, avec une interface en français.

Vous lui indiquez les archives Takeout ou le dossier décompressé. Elle associe chaque photo à son fichier JSON, y compris les noms supplemental-metadata de 2024, les noms tronqués et les doublons (1). Puis elle écrit photoTakenTime dans l'EXIF de la photo et règle les dates de création et de modification du fichier pour qu'elles correspondent. Les photos sans JSON gardent leur date EXIF si elles en ont une, et sinon la date du fichier, donc rien ne ressort sans date.

Les vidéos reçoivent aussi leur date, écrite dans le MP4 ou le MOV là où les lecteurs la cherchent. Les coordonnées GPS retournent dans la photo quand le JSON en contient de vraies. Vous pouvez aussi lui demander de renommer les fichiers avec la vraie date et de les classer dans des dossiers par année et par mois, mais c'est facultatif. Si vous voulez seulement corriger les dates, choisissez « Conserver les noms » et « Conserver mes dossiers ».

Une simulation montre ce qui changerait sans rien écrire. Les 1000 premières photos sont gratuites, et un achat unique de 19,99 USD lève la limite. Tout s'exécute sur votre ordinateur ; vos photos ne sont jamais envoyées en ligne.

Une fois les dates à l'intérieur des fichiers, elles restent justes partout où les photos iront ensuite : Apple Photos, un NAS, Immich, une clé USB ou un nouveau téléphone.

Questions fréquentes

Les dates seront-elles dans le bon fuseau horaire ?

Le JSON stocke un instant exact en UTC. Les outils le convertissent en heure locale de votre ordinateur au moment d'écrire l'EXIF, qui ne contient pas de fuseau par défaut. Une photo prise à 11h05 à Paris ressort à 11h05 si votre ordinateur est réglé sur l'heure de Paris, et à 05h05 s'il est réglé sur New York. Réglez votre ordinateur sur le fuseau où la plupart de vos photos ont été prises, ou acceptez un décalage de quelques heures sur les photos de vacances. Le sujet est traité dans le décalage horaire des photos Takeout.

Est-ce que j'abîme quelque chose en écrivant dans l'EXIF ?

Écrire une balise de date ne modifie que le bloc de métadonnées. Les pixels de l'image ne sont pas touchés. Gardez les archives d'origine jusqu'à ce que le résultat vous convienne, ce qui est de toute façon une bonne habitude.

Pourquoi seulement certaines photos sont-elles fausses ?

Parce que seules certaines photos n'avaient pas de date EXIF au départ. Les photos d'appareil en ont une en général. Les captures d'écran, les images de messagerie, les scans et tout ce que vous avez redaté dans Google Photos dépendent du fichier JSON.

Puis-je supprimer les fichiers JSON après avoir corrigé les dates ?

Oui. Une fois la date et le GPS écrits dans les photos, les JSON ont fait leur travail. Gardez-les jusqu'à avoir vérifié quelques photos dans votre nouvelle bibliothèque, puis supprimez-les.