Что за JSON-файлы в Google Takeout и можно ли их удалить?
В каждом файле .json лежат настоящая дата, место и подпись одного фото. Удаляйте их только после того, как эти данные записаны в сами фотографии.
JSON-файлы в Google Takeout хранят то, что Google Фото знал о каждом снимке: дату съемки, место, подпись и исходное имя файла. Такой файл лежит почти рядом с каждым фото и видео и называется примерно так: IMG_3391.HEIC.supplemental-metadata.json. Удалить их можно, но только после того, как даты и места из них записаны в сами фотографии. Если удалить их раньше, фото останутся с датой скачивания.
Вы распаковали экспорт из Google Фото, а половина файлов оказалась вовсе не фотографиями. Вы их не просили, большинство программ их не открывает, и их тысячи. Это не мусор. В них лежат даты и места, которые Google не записал в ваши снимки.
Зачем Google их добавляет
Google Фото хранит все, что знает о снимке, в своей базе данных: когда он сделан, где, в каком альбоме лежит, отмечен ли он как избранный, и какую дату или место вы исправили вручную. Сам файл изображения может хранить эти сведения в блоке EXIF, а может и не хранить. У скриншотов и картинок из мессенджеров их обычно нет. Правки, которые вы сделали в Google Фото, в файл не попадают никогда.
При экспорте Google отдает файл изображения примерно в том виде, в каком он был загружен. Данные из базы обратно в файл он не записывает. Вместо этого он кладет запись из базы в маленький текстовый файл рядом с изображением. Такой файл называют сопроводительным файлом (sidecar) (на английском), а JSON — это просто формат, в котором он записан.
Что внутри
Откройте любой такой файл в Блокноте, TextEdit или редакторе кода. Типичный файл, немного сокращенный, выглядит так:
{
"title": "IMG_3391.HEIC",
"description": "",
"imageViews": "12",
"creationTime": {
"timestamp": "1690120442",
"formatted": "Jul 23, 2023, 2:34:02 PM UTC"
},
"photoTakenTime": {
"timestamp": "1689929130",
"formatted": "Jul 21, 2023, 9:25:30 AM UTC"
},
"geoData": {
"latitude": 48.8583,
"longitude": 2.2945,
"altitude": 35.0,
"latitudeSpan": 0.0,
"longitudeSpan": 0.0
},
"geoDataExif": {
"latitude": 48.8583,
"longitude": 2.2945,
"altitude": 35.0
},
"url": "https://photos.google.com/photo/...",
"googlePhotosOrigin": {
"mobileUpload": {
"deviceType": "IOS_PHONE"
}
}
}
О двух датах, photoTakenTime и creationTime, речь пойдет в отдельном разделе ниже. Остальные важные поля:
geoData — место, каким его знал Google Фото, включая место, которое вы указали вручную. geoDataExif — место, которое было в EXIF самого файла при загрузке. Если у фото нет места, в обоих полях нули: 0.0, 0.0, это точка в Атлантическом океане. Считайте одни нули значением «неизвестно», а не настоящим местом. Подробнее — в статье о восстановлении GPS из Takeout (на английском).
description — подпись, если вы ее вводили. people — список отмеченных людей, если он есть. favorited равно true у избранных фото. title — исходное имя файла. Это полезно, потому что Takeout иногда укорачивает настоящее имя файла.
Какая дата правильная?
Берите photoTakenTime. Это дата съемки в том виде, в каком ее показывал Google Фото. Если вы исправляли дату внутри Google Фото, в этом поле будет ваше исправление.
creationTime — это время загрузки файла в Google. У фото, снятого и сохраненного в облако в один день, обе даты совпадают. У скана отпечатка 1985 года, загруженного в 2021 году, между ними десятилетия.
Обе даты записаны как timestamp, то есть число секунд с 1 января 1970 года по UTC. Строка formatted показывает тот же момент в читаемом виде, тоже по UTC.
Файлы альбомов
В каждой папке альбома есть еще один файл metadata.json. Он описывает сам альбом, а не отдельное фото. В нем название альбома, иногда дата и отметка общего альбома. Он маленький и безвредный. Его читают программы, которые импортируют альбомы, например immich-go. Как устроены папки, объясняет статья что происходит с альбомами в Google Takeout (на английском).
Почему они называются supplemental-metadata.json
В старых экспортах такой файл назывался IMG_3391.HEIC.json. С 2024 года имя стало IMG_3391.HEIC.supplemental-metadata.json. Кроме того, Google обрезает длинные имена сопроводительных файлов до 46 символов, и у фото с Pixel появляется пара с именем PXL_20230721_092530123.jpg.supplemental-m.json. Когда у двух фото одинаковое имя, счетчик в имени JSON-файла стоит в другом месте: IMG_3391(1).HEIC идет в паре с IMG_3391.HEIC.supplemental-metadata(1).json. Подробности — в статье что такое supplemental-metadata.json.
Можно ли удалить JSON-файлы из Google Takeout?
Да, но только после того, как вы их использовали. Если удалить их сначала, даты и места из них пропадут. Фото навсегда останутся с датой скачивания, и вернуть эти сведения можно только новым экспортом через Takeout.
Если у всех ваших фото уже есть хороший EXIF, JSON-файлы добавляют мало. Проверить это можно через exiftool: команда exiftool -r -if 'not $DateTimeOriginal' -filename . выводит каждое фото без даты в EXIF. Если список пуст, файлы можно удалить.
У большинства медиатек список не пуст. Безопасный порядок такой: перенести данные из JSON в фото, проверить несколько снимков, затем удалить файлы .json. Immich, PhotoPrism и некоторые другие программы на собственном сервере умеют читать JSON-файлы Takeout прямо при импорте. Если вы переезжаете туда, храните файлы, пока импорт не закончится. Короткий ответ — в статье можно ли удалить JSON-файлы Google Takeout.
Какие программы их читают?
Apple Фото, приложение «Фотографии» в Windows, Проводник, Finder и галереи телефонов их не читают. Они ищут дату внутри файла изображения, не находят ее и берут дату файла, то есть день, когда вы распаковали экспорт. Поэтому у всех фото из Takeout неправильная дата.
Сам Google Фото их тоже не читает. Immich и PhotoPrism умеют читать их при импорте, см. PhotoPrism и JSON-файлы (на английском) и из Google Фото в Immich (на английском).
Почему у некоторых фото нет JSON-файла?
Такой файл есть не у каждого фото. У видеочасти Live Photo его часто нет. У некоторых очень старых загрузок его тоже нет. Такие фото сохраняют ту дату, которая записана в самом файле. Статья почему у некоторых фото нет JSON-файла (на английском) перечисляет эти случаи и объясняет, что с такими фото происходит.
Как вернуть данные в фотографии
Этот шаг называют объединением. Его можно сделать через exiftool: он читает JSON-файл и записывает теги EXIF. Команда и ее подводные камни описаны в статье как перенести метаданные из JSON в фото. Бесплатные скрипты вроде GooglePhotosTakeoutHelper работают по той же идее.
Takeout JSON Metadata Fixer делает это как программа для компьютера на macOS, Windows и Linux.
Программа читает каждый JSON-файл, записывает photoTakenTime в EXIF фото, выставляет такие же даты у файла и записывает координаты GPS, если они настоящие, а не нули. Она знает оба варианта имен, обрезанные имена и счетчики (1), поэтому не пропускает файлы, которые упустил бы простой шаблон имени. По желанию она переименовывает фото и раскладывает их по папкам, а также может записать рядом с результатом новые файлы .json для Immich или PhotoPrism. Все работает на вашем компьютере. Первые 1000 фото — бесплатно.
Частые вопросы
На каждое фото приходится один JSON-файл?
Обычно да. У фото, которые лежат в нескольких альбомах, копия JSON-файла есть в папке каждого альбома. У некоторых фото его нет совсем, чаще всего у видеочасти Live Photo и у файлов из очень старых загрузок. Они сохраняют ту дату, которая есть в файле.
Как открыть JSON-файл из Google Takeout?
Любым текстовым редактором: Блокнотом в Windows, TextEdit на Mac или редактором кода. Это обычный текст. Если его открыть, ничего не изменится.
Может ли сам Google Фото прочитать их обратно?
Нет. Если загрузить папку обратно в Google Фото, он проигнорирует JSON-файлы и возьмет EXIF из самих файлов. Поэтому даты теряют и те, кто переносит фото между двумя аккаунтами Google. См. перенос Google Фото между аккаунтами (на английском).
Время указано в моем часовом поясе?
Нет. Это моменты времени по UTC. Программа переводит их в местное время, когда записывает EXIF, и берет для этого часовой пояс вашего компьютера. Проверьте, что на компьютере выбран тот пояс, где сделана большая часть фото.
Много ли места занимают JSON-файлы?
От нескольких сотен байт до пары килобайт каждый. Десять тысяч таких файлов — примерно 10 МБ. Место — не причина их удалять. Причина — беспорядок.