Takeout JSON
PL

Jak zapisać metadane JSON z Google Takeout w zdjęciach

Krok po kroku: jak zapisać datę i GPS z plików .json z Google Takeout w plikach zdjęć, za pomocą exiftool albo aplikacji na komputer.

Masz folder ze zdjęciami, a obok każdego z nich plik .json z jego prawdziwą datą i lokalizacją. Same zdjęcia pokazują złą datę. Chcesz, żeby informacje z pliku .json trafiły do zdjęcia, żebyś mógł wyrzucić pliki .json i mieć zwykły folder ze zdjęciami.

To problem, który ma rozwiązanie. Oto jak zrobić to ręcznie i jak zrobić to jednym kliknięciem.

Co właściwie znaczy „scalanie”

Pliki JPEG, HEIC i PNG mają blok metadanych EXIF. Aparaty zapisują tam datę wykonania w znaczniku DateTimeOriginal, a współrzędne GPS w znacznikach GPSLatitude i GPSLongitude. Aplikacje do zdjęć na każdej platformie czytają te znaczniki.

Plik .json z Takeout ma te same informacje w innym opakowaniu. Scalanie to odczytanie photoTakenTime i geoData z pliku .json i zapisanie ich w znacznikach EXIF. Przy okazji ustawiasz też datę utworzenia i modyfikacji pliku, żeby Finder i Eksplorator plików sortowały prawidłowo nawet w widokach, które ignorują EXIF.

Filmy nie mają EXIF. Ich data jest zapisana w kontenerze MP4 lub MOV, w znacznikach takich jak CreateDate. Ta sama idea, inne nazwy znaczników.

Krok 1: rozpakuj wszystko w jednym miejscu

Takeout dzieli duże eksporty na kilka archiwów zip. Rozpakuj je wszystkie do tego samego folderu nadrzędnego, żeby foldery albumów się połączyły. Jeśli album jest rozłożony na dwa archiwa, w każdym może być połowa jego zdjęć i połowa plików .json; muszą ostatecznie leżeć obok siebie. Jeśli masz wiele części, zobacz Google Takeout w wielu plikach zip.

Krok 2: zrozum, jak zdjęcie znajduje swój plik .json

Nazwa pliku .json to nazwa zdjęcia z końcówką. IMG_0042.JPG łączy się z IMG_0042.JPG.supplemental-metadata.json w eksportach od 2024 roku albo z IMG_0042.JPG.json w starszych. Dwie rzeczy psują tę prostą regułę. Nazwy dłuższe niż 46 znaków są skracane, więc końcówka jest ucięta. Duplikaty mają licznik w innym miejscu: IMG_0042(1).JPG łączy się z IMG_0042.JPG.supplemental-metadata(1).json. Każde narzędzie musi obsługiwać oba przypadki, inaczej po cichu pominie te pliki. Prawdziwe przykłady obu pokazuje artykuł supplemental-metadata.json – wyjaśnienie.

Krok 3: scal za pomocą exiftool

exiftool jest darmowy i działa na każdej platformie. Zainstaluj go, otwórz terminal w folderze Google Photos i uruchom:

exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" \
  "-DateTimeOriginal<PhotoTakenTimeTimestamp" \
  "-CreateDate<PhotoTakenTimeTimestamp" \
  "-FileCreateDate<PhotoTakenTimeTimestamp" \
  "-FileModifyDate<PhotoTakenTimeTimestamp" \
  "-GPSLatitude<GeoDataLatitude" "-GPSLatitudeRef<GeoDataLatitude" \
  "-GPSLongitude<GeoDataLongitude" "-GPSLongitudeRef<GeoDataLongitude" \
  -ext jpg -ext jpeg -ext heic -ext png -overwrite_original .

Co to robi: dla każdego obrazu szuka w tym samym folderze pliku o tej samej nazwie z dopiskiem .supplemental-metadata.json i kopiuje wymienione pola. -d %s mówi exiftool, że znacznik czasu jest w sekundach od 1970 roku. -overwrite_original sprawia, że nie zostawia kopii zapasowej każdego pliku.

Uruchom polecenie drugi raz z "%d/%F.json" dla plików .json w starym stylu. Potem jeszcze raz dla filmów:

exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" \
  "-CreateDate<PhotoTakenTimeTimestamp" "-ModifyDate<PhotoTakenTimeTimestamp" \
  "-TrackCreateDate<PhotoTakenTimeTimestamp" "-MediaCreateDate<PhotoTakenTimeTimestamp" \
  "-FileModifyDate<PhotoTakenTimeTimestamp" \
  -ext mp4 -ext mov -overwrite_original .

Krok 4: zajmij się tym, co exiftool pominął

Policz, co zostało:

exiftool -r -if 'not $DateTimeOriginal' -ext jpg -ext heic -ext png -filename .

Na liście będą ucięte nazwy, duplikaty z (1) i zdjęcia, które nigdy nie miały pliku .json. Ucięte nazwy wyłapiesz krótkim skryptem, który znajduje plik .json, którego nazwa jest początkiem oczekiwanej. Duplikaty trzeba przemianować, zanim wzorzec zadziała. To ta część, która z dziesięciu minut robi cały wieczór, i dlatego istnieją skrypty społeczności, takie jak GooglePhotosTakeoutHelper. Są darmowe i dopasowują pliki za ciebie, w terminalu.

Jeszcze jeden haczyk: powyższe wiersze GPS bez oporu zapiszą 0.0, 0.0 w zdjęciach, których plik .json mówi „lokalizacja nieznana”. Dodaj -if '$GeoDataLatitude ne 0' albo pogódź się z gromadką zdjęć na Atlantyku.

Krok 5: albo aplikacja

Takeout JSON Metadata Fixer robi kroki od 1 do 4 w jednym przebiegu, na macOS, Windows i Linux.

Wybierz archiwa zip z Takeout albo rozpakowany folder. Aplikacja łączy każde zdjęcie i film z jego plikiem .json, próbując każdego schematu nazw, jakiego używało Google, łącznie z ucięciem do 46 znaków i licznikiem (1). Zapisuje datę w EXIF dla obrazów i w kontenerze dla filmów, ustawia daty plików i zapisuje GPS tylko wtedy, gdy współrzędne są prawdziwe. Zdjęcia bez pliku .json zachowują własną datę EXIF, a jeśli jej nie ma, datę pliku.

Możesz na tym poprzestać: wybierz opcje, które zachowują obecne nazwy plików i foldery, a dostaniesz ten sam folder z prawidłowymi metadanymi. Możesz też jednocześnie zmienić nazwy plików według daty i ułożyć je w foldery według roku i miesiąca. Przebieg próbny pokazuje plan, zanim cokolwiek zostanie zapisane. Wersja darmowa obejmuje 1000 zdjęć; wersja bez limitu kosztuje jednorazowo 19,99 USD. Nic nie jest nigdzie wysyłane.

Krok 6: sprawdź, potem usuń pliki .json

Otwórz w aplikacji do zdjęć kilka zdjęć z różnych lat i sprawdź daty. Potem usuń pliki .json. Na Macu lub w Linuksie: find . -name "*.json" -delete z wnętrza folderu. W Windows wyszukaj w folderze *.json, zaznacz wszystko i usuń. Oryginalne archiwa zip zachowaj gdzieś przez miesiąc, na wypadek gdybyś zauważył problem.

Częste pytania

Czy scalanie zmienia jakość zdjęć?

Nie. Zapisywany jest tylko blok metadanych. Skompresowane dane pikseli są kopiowane bajt po bajcie.

Co, jeśli zdjęcie ma już datę EXIF inną niż w pliku .json?

Plik .json odzwierciedla to, co pokazywały ci Zdjęcia Google, łącznie z twoimi poprawkami. W większości przypadków to tej daty chcesz. Jeśli nigdy nie zmieniałeś dat w Zdjęciach Google, obie i tak będą zgodne.

Dlaczego godzina wychodzi przesunięta o kilka godzin?

Znacznik czasu w pliku .json jest w UTC. EXIF nie ma strefy czasowej, więc narzędzia przeliczają czas na strefę lokalną komputera. Ustaw w komputerze strefę, w której zrobiono zdjęcia, albo zaakceptuj przesunięcie.

Czy mogę scalić tylko datę i pominąć GPS?

Tak. Usuń wiersze GPS z polecenia exiftool. W aplikacji GPS jest zapisywany, gdy jest dostępny; jeśli nie chcesz lokalizacji w nazwach plików, wybierz szablon nazwy bez niej.