Фото
Як об'єднати JSON-файли Google Takeout із фото (і виправити неправильні дати)
Google Takeout зберігає дати ваших фото в окремих JSON-файлах. Чотири безкоштовні програми повертають їх у знімки: що виправляє кожна, точні команди і як перевірити результат.
Також доступно мовами: العربيةবাংলাDeutschespañolfrançaisગુજરાતીहिन्दीIndonesiaitaliano日本語ಕನ್ನಡ한국어EnglishमराठीpolskiportuguêsрусскийKiswahiliதமிழ்తెలుగుไทยTürkçeاردوTiếng Việt中文
Ви завантажили свою бібліотеку Google Фото через Google Takeout. Тепер у вас тисячі фотографій поруч із тисячами файлів .json, а переглядач стверджує, що знімок 2019 року зроблено вчора. Щоб це виправити, треба об'єднати кожен JSON-файл з його фото. Програма читає дату зйомки з JSON-файлу і записує її у фотографію, і всі застосунки знову показують правильну дату.
У цьому посібнику пояснено, звідки беруться JSON-файли, чому об'єднання іноді не спрацьовує і як його виконують чотири безкоштовні програми. Ви отримаєте точну команду для кожної, дізнаєтеся, яку дату змінює кожна, і спосіб перевірити результат, перш ніж щось видаляти.
Чому фото приходять разом із JSON-файлами
Для кожного знімка Takeout видає два файли: саме зображення, наприклад IMG_1234.jpg, і JSON-файл з початковою датою, GPS-координатами, описом і переліком альбомів. Один посібник з експорту описує типове перше враження: фото 2019 року мало дату «вчора», без місця й без альбому, хоча нічого не загубилося. Усі відомості були в JSON-файлі (PixelUnion). Illinois Tech так само пояснює, чому в експорті більше файлів, ніж фотографій у вашій бібліотеці (Illinois Tech).
Файл фотографії може розходитися з JSON-файлом. Автор google-photos-exif помітив, що коли змінити дату в Google Фото, метадані всередині зображення не оновлюються: нова дата є лише в JSON-файлі. У деяких зображеннях, часто в тих, якими з вами поділилися, дати всередині немає взагалі (google-photos-exif). README gphotos-takeout-repair показує другу половину проблеми: у розпакованому експорті фото, його відредагована версія і JSON-файл мають як дату створення дату експорту Takeout (gphotos-takeout-repair).
Тож застосунок, який читає лише файл фотографії, бачить або порожню дату, або день експорту. Правильна дата лежить у JSON-файлі, і об'єднання повертає її на місце.
Три речі, які заважають об'єднанню
Будь-яка програма для об'єднання має знайти правильний JSON-файл для кожного знімка. Три особливості Takeout ускладнюють це завдання.
- Фото і його JSON-файл можуть опинитися в різних zip-архівах. У FAQ Ente про перенесення наведено приклад:
flower.jpegв одному архіві, аflower.jsonв іншому, і зіставити їх уже не можна (Ente). README Porte називає той самий випадок відомим обмеженням: програма не знаходить файли метаданих, що лежать в іншому архіві, ніж їхнє зображення (Porte). - Назви JSON-файлів непослідовні. Для
IMG123.jpgви можете отриматиIMG123.jpg.jsonабо простоIMG123.json, а в деяких папках трапляються JSON-файли без відповідного зображення (google-photos-exif). - Відредаговані фото вивантажуються двічі. Takeout експортує оригінал і відредаговану копію як окремі файли з різними хешами, тому пошук дублікатів за хешем їх не знаходить (Ente). Відредагований файл має суфікс
-edited, наприкладIMG_0001-edited.jpgпоруч ізIMG_0001.jpg(gphotos-takeout-repair).
Розв'язання першої проблеми однакове для всіх програм: завантажте всі архіви, потім розпакуйте їх усі в одну спільну папку, зберігши вкладені папки як є (Ente). Якщо у двох архівах є папка з однаковою назвою, об'єднайте вміст папок, а не замінюйте одну іншою (google-photos-exif).
Порада Illinois Tech щодо завантаження: тримайте вікно Takeout на передньому плані. Якщо згорнути його або працювати в іншому вікні, завантаження обриваються через 15 хвилин, бо Google просить увійти в акаунт знову (Illinois Tech).
Чотири безкоштовні програми і дата, яку виправляє кожна
Фотографія має два види дати. Дата EXIF (DateTimeOriginal) зберігається всередині зображення і переходить разом із ним у будь-який застосунок чи сервіс. Дата файлу (зміни або створення) належить файловій системі. Її легко втратити: README gpth попереджає, що переміщення файлів на Android-телефоні зазвичай її скидає (gpth). Перш ніж обирати програму, перевірте, яку з двох дат вона записує.
У всіх командах нижче перша папка — ваш розпакований Takeout, друга — нова порожня папка для результату.
Porte: записує дату й місце у фото
Porte копіює позначку часу та геолокацію з відповідного JSON-файлу в EXIF-дані зображення, не перестискаючи його. Якщо дату не знайдено, програма пробує взяти її з назви файлу і бере найранішу зі знайдених дат, щоб дата зміни файлу не була сприйнята як дата зйомки. Вона копіює файли у вихідну папку, а не змінює їх на місці, складає невдалі файли в окрему папку і зберігає журнал. Дані про альбоми вона не зберігає. Готову програму можна завантажити на сторінці релізів проєкту (Porte):
porte srcpath destpath
google-photos-exif: заповнює відсутню дату EXIF
Ця програма на Node.js читає photoTakenTime з кожного JSON-файлу. Вона встановлює дату зміни файлу і заповнює DateTimeOriginal, лише якщо у фото цієї дати ще немає. Файли, які не вдалося обробити, потрапляють у папку помилок (google-photos-exif). Автор PixelUnion користувався нею і пише, що всю бібліотеку було оброблено приблизно за двадцять хвилин (PixelUnion).
yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error
gpth: розкладає в одну папку або за місяцями, потім ставить дату файлу
Google Photos Takeout Helper працює в діалоговому режимі: ви запускаєте його і відповідаєте на запитання. Він збирає всі фото в одну папку або, з параметром --divide-to-dates, у папки за місяцями і встановлює дату останньої зміни файлу. Запис даних із JSON назад в EXIF поки лише в його планах, тому в README наведено додаткову команду exiftool, яка копіює дату файлу в дати EXIF для фото, у яких їх немає. Виконайте цю команду, перш ніж знову чіпати файли. Зважте, що gpth за замовчуванням переміщує файли, тож збережіть початкові архіви (gpth).
exiftool -overwrite_original -r -if 'not defined DateTimeOriginal' -P "-AllDates<FileModifyDate" "your/output/folder/ALL_PHOTOS/"
gphotos-takeout-repair: прибирає JSON-файли і відредаговані дублікати
Ця програма копіює фото в нову папку, зберігає структуру папок і задає дату створення кожного файлу за photoTakenTime з JSON-файлу. Якщо є копія -edited, вона залишає цю версію (зазвичай найкращу) і пропускає оригінал, тож у результаті немає ні JSON-файлів, ні відредагованих дублікатів (gphotos-takeout-repair). Встановіть її командою npm install -g gphotos-takeout-repair, потім:
gphotos-takeout-repair --src ./unzipped-takeout-dir --dest ./output-dir
Якщо вам потрібна дата всередині зображення в кожного фото, Porte записує її напряму. З рештою трьох потім перевірте дату EXIF, як показано нижче.
Перевірте, що дати справді потрапили у фото
Не довіряйте стовпцю «Дата зміни» у файловому менеджері. Перевіряйте самі метадані.
- Без додаткових програм: клацніть фото правою кнопкою і виберіть «Отримати інфо» на Mac або «Властивості» у Windows. Після вдалого об'єднання ви маєте побачити правильну дату зйомки, GPS-координати, якщо вони були в знімку, і модель камери, якщо вона відома (PixelUnion).
- Для цілої папки: ExifTool може вивести тег
DateTimeOriginalдля кожного JPG у папці. Цей рядок базується на прикладі з його документації (ExifTool):
exiftool -DateTimeOriginal -S -s -ext jpg .
Порожній рядок або дата з тижня експорту означає, що це фото не було об'єднано. Тоді зазирніть у папку помилок або невдалих файлів програми і перевірте, чи не прийшов відповідний JSON-файл з іншого архіву.
- Порівняйте кількість. У вихідній папці разом із папкою помилок має бути приблизно стільки ж фото й відео, скільки в розпакованому Takeout, за винятком відредагованих дублікатів, якщо ваша програма їх видаляє.
Альтернатива в один клік
Якщо ви не хочете працювати з командним рядком, те саме завдання може виконати настільний застосунок. PHOTOK — продукт Pacix Labs. Згідно з його сторінкою, він читає файли .json, які Google розкидає по папках, і повертає справжні дати й місця, потім розкладає фото по папках Рік / Місяць / Місце і відкладає вбік точні дублікати. Він працює у Windows 10 і 11 та на Mac із чипом Apple, нічого не завантажує в мережу і ніколи не видаляє файли. Попередній перегляд безкоштовний, повна версія коштує €49 разовим платежем (PHOTOK).
Хоч би який шлях ви обрали, безкоштовні програми вище чи застосунок, правила ті самі: працюйте з копією, перевіряйте вибірку і зберігайте архіви.
Чек-лист
- Завантажте всі архіви і збережіть копію на другому диску.
- Розпакуйте всі архіви в одну спільну папку, збережіть вкладені папки, об'єднайте папки з однаковими назвами.
- Оберіть програму і з'ясуйте, яку дату вона записує: дату EXIF, дату файлу чи обидві.
- Запустіть її на копії, з виведенням у нову папку.
- Перевірте
DateTimeOriginalна вибірці знімків різних років і зазирніть у папку помилок. - Вирішіть, що робити з копіями
-edited. - Видаляйте JSON-файли й архіви лише після перевірки і другої резервної копії.
Поширені запитання
Чому Google Takeout видає разом із фото JSON-файли?
Google зберігає відомі йому дату зйомки, місце, опис та інформацію про альбоми для кожного знімка в окремому файлі .json поруч із фото. У самому файлі фотографії цих даних може не бути, наприклад якщо ви змінювали дату в Google Фото.
Чи можна видалити JSON-файли?
Лише після того, як дати й місця опиняться всередині фотографій і ви перевірите частину знімків. До того JSON-файл — єдине місце, де зберігаються дата і місце знімка, відомі Google.
Яку дату виправляє програма для об'єднання?
Залежить від програми. Одні записують дату в EXIF-метадані фото (DateTimeOriginal), які лишаються з файлом. Інші змінюють лише дату зміни або створення файлу, а її деякі способи копіювання скидають. Прочитайте README програми, перш ніж обирати.
Чому після об'єднання деякі фото досі мають неправильну дату?
Зазвичай тому, що фото і його JSON-файл лежали в різних zip-архівах і так і не опинилися разом, або тому, що назва JSON-файлу відрізняється від назви фото. Розпакуйте всі архіви в одну папку, знову запустіть програму на свіжій копії і зазирніть у її папку помилок або невдалих файлів.
Чи треба зберігати початкові zip-архіви?
Так, доки об'єднану бібліотеку не перевірено і у вас немає ще однієї резервної копії. Деякі програми переміщують файли, а не копіюють, і архіви — єдиний спосіб почати спочатку.
Джерела
- Ente: Google Photos migration FAQ (split zips, wrong dates, duplicates)
- PixelUnion: how to export your Google Photos library without losing the metadata
- Illinois Tech: use Google Takeout to export Google Photos
- google-photos-exif (GitHub README)
- Porte: fixing and organizing a Google Takeout photos export (GitHub README)
- Google Photos Takeout Helper, gpth (GitHub README)
- gphotos-takeout-repair 1.4.2 (README)
- ExifTool documentation