Pacix Labs

Zdjęcia

Jak połączyć pliki JSON z Google Takeout ze zdjęciami (i naprawić złe daty)

Google Takeout zapisuje daty Twoich zdjęć w osobnych plikach JSON. Cztery darmowe narzędzia łączą je z powrotem: co naprawia każde z nich, dokładne polecenia i jak sprawdzić wynik.

· 6 min czytania

Dostępne także w językach: العربيةবাংলাDeutschespañolfrançaisગુજરાતીहिन्दीIndonesiaitaliano日本語ಕನ್ನಡ한국어EnglishमराठीportuguêsрусскийKiswahiliதமிழ்తెలుగుไทยTürkçeукраїнськаاردوTiếng Việt中文

Pobrałeś bibliotekę Zdjęć Google przez Google Takeout. Teraz masz tysiące zdjęć obok tysięcy plików .json, a przeglądarka zdjęć twierdzi, że zdjęcie z 2019 roku zrobiono wczoraj. Żeby to naprawić, łączysz każdy plik JSON z powrotem z jego zdjęciem. Narzędzie odczytuje datę wykonania z pliku JSON i zapisuje ją w zdjęciu, dzięki czemu każda aplikacja znów pokazuje właściwą datę.

Ten poradnik wyjaśnia, skąd biorą się pliki JSON, dlaczego łączenie czasem się nie udaje i jak robią to cztery darmowe narzędzia. Dostaniesz dokładne polecenie dla każdego z nich, informację, którą datę zmienia każde narzędzie, oraz sposób na sprawdzenie wyniku, zanim cokolwiek usuniesz.

Dlaczego zdjęcia przychodzą z plikami JSON

Dla każdego zdjęcia Takeout daje dwa pliki: obraz, na przykład IMG_1234.jpg, oraz plik JSON z oryginalną datą, współrzędnymi GPS, opisem i przynależnością do albumów. Jeden z poradników eksportu opisuje typowe pierwsze wrażenie: zdjęcie z 2019 roku miało datę „wczoraj”, bez lokalizacji i bez albumu, choć nic nie zginęło. Informacje były w pliku JSON (PixelUnion). Illinois Tech podaje to samo wyjaśnienie, dlaczego eksport zawiera więcej plików, niż Twoja biblioteka ma zdjęć (Illinois Tech).

Plik zdjęcia może się nie zgadzać z plikiem JSON. Autor google-photos-exif zauważył, że jeśli zmienisz datę w Zdjęciach Google, metadane wewnątrz obrazu nie są aktualizowane: nowa data jest tylko w pliku JSON. Niektóre obrazy, często te udostępnione Ci przez innych, w ogóle nie mają daty w środku (google-photos-exif). README gphotos-takeout-repair pokazuje drugą połowę problemu: w rozpakowanym eksporcie zdjęcie, jego edytowana wersja i plik JSON pokazują jako datę utworzenia datę eksportu z Takeout (gphotos-takeout-repair).

Aplikacja, która czyta tylko plik zdjęcia, widzi więc albo brak daty, albo dzień eksportu. Właściwa data jest w pliku JSON, a łączenie przywraca ją na miejsce.

Trzy rzeczy, które psują łączenie

Każde narzędzie do łączenia musi znaleźć właściwy plik JSON dla każdego zdjęcia. Trzy cechy Takeout to utrudniają.

  1. Zdjęcie i jego plik JSON mogą być w różnych plikach zip. FAQ Ente dotyczące migracji podaje przykład flower.jpeg w jednym pliku zip i flower.json w innym, przez co nie da się ich dopasować (Ente). README Porte wymienia ten sam przypadek jako znane ograniczenie: narzędzie nie znajduje plików metadanych, które leżą w innym archiwum niż ich obraz (Porte).
  2. Nazwy plików JSON nie są spójne. Dla IMG123.jpg możesz dostać IMG123.jpg.json albo po prostu IMG123.json, a niektóre foldery zawierają pliki JSON bez pasującego obrazu (google-photos-exif).
  3. Edytowane zdjęcia pojawiają się dwa razy. Takeout eksportuje oryginał i edytowaną kopię jako osobne pliki o różnych hashach, więc wyszukiwarka duplikatów porównująca hashe ich nie wychwyci (Ente). Edytowany plik ma przyrostek -edited, jak IMG_0001-edited.jpg obok IMG_0001.jpg (gphotos-takeout-repair).

Rozwiązanie pierwszego problemu jest takie samo dla każdego narzędzia: pobierz wszystkie pliki zip, a potem rozpakuj je wszystkie do jednego folderu nadrzędnego, zostawiając podfoldery bez zmian (Ente). Jeśli dwa pliki zip zawierają folder o tej samej nazwie, połącz zawartość folderów, zamiast zastępować jeden drugim (google-photos-exif).

Jedna rada Illinois Tech dotycząca pobierania: trzymaj okno Takeout na wierzchu. Jeśli je zminimalizujesz albo będziesz pracować w innym oknie, pobieranie przerwie się po 15 minutach, bo Google poprosi o ponowne zalogowanie (Illinois Tech).

Cztery darmowe narzędzia i data, którą naprawia każde z nich

Zdjęcie ma dwa rodzaje daty. Data EXIF (DateTimeOriginal) jest zapisana wewnątrz obrazu i wędruje z nim do każdej aplikacji czy usługi. Data pliku (modyfikacji lub utworzenia) należy do systemu plików. Łatwo ją stracić: README gpth ostrzega, że przenoszenie plików na telefonie z Androidem zwykle ją resetuje (gpth). Zanim wybierzesz narzędzie, sprawdź, którą z nich zapisuje.

W każdym poleceniu poniżej pierwszy folder to Twój rozpakowany Takeout, a drugi to nowy, pusty folder wyjściowy.

Porte: zapisuje datę i lokalizację w zdjęciu

Porte kopiuje znacznik czasu i geolokalizację z odpowiedniego pliku JSON do danych EXIF obrazu, bez ponownej kompresji. Jeśli nie znajdzie daty, próbuje odczytać ją z nazwy pliku i używa najwcześniejszej znalezionej daty, żeby data modyfikacji pliku nie została wzięta za datę wykonania zdjęcia. Kopiuje pliki do folderu wyjściowego zamiast zmieniać je w miejscu, odkłada nieudane pliki do osobnego folderu i zapisuje dziennik. Nie zachowuje danych o albumach. Gotowy program możesz pobrać ze strony wydań projektu (Porte):

porte srcpath destpath

google-photos-exif: uzupełnia brakującą datę EXIF

To narzędzie w Node.js odczytuje photoTakenTime z każdego pliku JSON. Ustawia datę modyfikacji pliku, a DateTimeOriginal uzupełnia tylko wtedy, gdy zdjęcie jeszcze go nie ma. Pliki, których nie potrafi przetworzyć, trafiają do folderu błędów (google-photos-exif). Autor PixelUnion użył go i podaje, że przetworzyło całą bibliotekę w około dwadzieścia minut (PixelUnion).

yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error

gpth: układa w jednym folderze lub według miesięcy, potem ustawia datę pliku

Google Photos Takeout Helper działa interaktywnie: uruchamiasz go i odpowiadasz na jego pytania. Zbiera wszystkie zdjęcia w jednym folderze albo, z opcją --divide-to-dates, w folderach według miesięcy, i ustawia datę ostatniej modyfikacji pliku. Zapisywanie danych z JSON z powrotem do EXIF wciąż jest na jego liście rzeczy do zrobienia, dlatego README podaje dodatkowe polecenie exiftool, które kopiuje datę pliku do dat EXIF w zdjęciach, które ich nie mają. Uruchom to polecenie, zanim znów ruszysz pliki. Pamiętaj, że gpth domyślnie przenosi pliki, więc zachowaj oryginalne pliki zip (gpth).

exiftool -overwrite_original -r -if 'not defined DateTimeOriginal' -P "-AllDates<FileModifyDate" "your/output/folder/ALL_PHOTOS/"

gphotos-takeout-repair: usuwa pliki JSON i edytowane duplikaty

To narzędzie kopiuje zdjęcia do nowego folderu, zachowuje strukturę folderów i ustawia datę utworzenia każdego pliku na podstawie photoTakenTime z pliku JSON. Gdy istnieje kopia -edited, zostawia tę wersję (zwykle najlepszą) i pomija oryginał, więc w wyniku nie ma ani plików JSON, ani edytowanych duplikatów (gphotos-takeout-repair). Zainstaluj je poleceniem npm install -g gphotos-takeout-repair, a potem:

gphotos-takeout-repair --src ./unzipped-takeout-dir --dest ./output-dir

Jeśli chcesz, żeby każde zdjęcie miało datę wewnątrz obrazu, Porte zapisuje ją bezpośrednio. Przy pozostałych trzech sprawdź potem datę EXIF, jak pokazano niżej.

Sprawdź, czy daty naprawdę są w zdjęciach

Nie ufaj kolumnie „data modyfikacji” w menedżerze plików. Sprawdź same metadane.

  1. Bez dodatkowego oprogramowania: kliknij zdjęcie prawym przyciskiem i wybierz Pokaż info na Macu albo Właściwości w Windows. Po udanym łączeniu powinieneś zobaczyć właściwą datę wykonania, współrzędne GPS, jeśli zdjęcie je miało, i model aparatu, jeśli jest dostępny (PixelUnion).
  2. Dla całego folderu: ExifTool potrafi wypisać znacznik DateTimeOriginal dla każdego pliku JPG w folderze. Ten wiersz opiera się na przykładzie z jego dokumentacji (ExifTool):
exiftool -DateTimeOriginal -S -s -ext jpg .

Pusty wiersz albo data z tygodnia eksportu oznacza, że to zdjęcie nie zostało połączone. Zajrzyj wtedy do folderu błędów lub nieudanych plików narzędzia i sprawdź, czy pasujący plik JSON pochodził z innego pliku zip.

  1. Porównaj liczby. Folder wyjściowy razem z folderem błędów powinien zawierać mniej więcej tyle zdjęć i filmów, co rozpakowany Takeout, minus edytowane duplikaty, jeśli Twoje narzędzie je usuwa.

Alternatywa na jedno kliknięcie

Jeśli nie chcesz korzystać z wiersza poleceń, to samo zadanie wykona aplikacja na komputer. PHOTOK to produkt Pacix Labs. Według jego strony odczytuje pliki .json, które Google rozrzuca po folderach, i przywraca prawdziwe daty i miejsca, a potem układa zdjęcia w folderach Rok / Miesiąc / Miejsce i odkłada na bok dokładne duplikaty. Działa w Windows 10 i 11 oraz na Macach z procesorem Apple, pracuje bez wysyłania czegokolwiek do sieci i nigdy nie usuwa plików. Podgląd jest darmowy, a pełna wersja kosztuje 49 € jednorazowo (PHOTOK).

Niezależnie od wybranej drogi, darmowe narzędzia powyżej czy aplikacja, obowiązują te same zasady: pracuj na kopii, sprawdź próbkę i zachowaj pliki zip.

Lista kontrolna

  • Pobierz wszystkie pliki zip i trzymaj kopię na drugim dysku.
  • Rozpakuj wszystkie pliki zip do jednego folderu nadrzędnego, zachowaj podfoldery, połącz foldery o tej samej nazwie.
  • Wybierz narzędzie i dowiedz się, którą datę zapisuje: datę EXIF, datę pliku czy obie.
  • Uruchom je na kopii, do nowego folderu wyjściowego.
  • Sprawdź DateTimeOriginal na próbce z różnych lat i zajrzyj do folderu błędów.
  • Zdecyduj, co zrobić z kopiami -edited.
  • Usuń pliki JSON i pliki zip dopiero po sprawdzeniu i zrobieniu drugiej kopii zapasowej.

Najczęstsze pytania

Dlaczego Google Takeout daje mi pliki JSON razem ze zdjęciami?

Google zapisuje znaną sobie datę wykonania, lokalizację, opis i informacje o albumach każdego zdjęcia w osobnym pliku .json obok zdjęcia. Sam plik zdjęcia może nie zawierać tych samych informacji, na przykład jeśli zmieniłeś datę w Zdjęciach Google.

Czy mogę usunąć pliki JSON?

Dopiero gdy daty i miejsca znajdą się w zdjęciach, a Ty sprawdzisz próbkę. Wcześniej plik JSON jest jedynym miejscem, w którym zapisana jest data i lokalizacja zdjęcia znane Google.

Którą datę naprawia narzędzie do łączenia?

To zależy od narzędzia. Niektóre zapisują datę w metadanych EXIF zdjęcia (DateTimeOriginal), które wędrują razem z plikiem. Inne ustawiają tylko datę modyfikacji lub utworzenia pliku, którą niektóre metody kopiowania resetują. Przed wyborem przeczytaj README narzędzia.

Dlaczego niektóre zdjęcia po połączeniu nadal mają złą datę?

Zwykle dlatego, że zdjęcie i jego plik JSON były w różnych plikach zip i nigdy nie trafiły z powrotem do jednego miejsca, albo plik JSON ma inną nazwę niż zdjęcie. Rozpakuj wszystkie pliki zip do jednego folderu, uruchom narzędzie ponownie na świeżej kopii i zajrzyj do folderu błędów lub nieudanych plików narzędzia.

Czy muszę zachować oryginalne pliki zip?

Tak, dopóki połączona biblioteka nie zostanie sprawdzona i nie masz kolejnej kopii zapasowej. Niektóre narzędzia przenoszą pliki zamiast je kopiować, a pliki zip są jedynym sposobem, by zacząć od nowa.

Źródła