Zdjęcia z Google Takeout mają złą datę? Oto dlaczego
Dlaczego każde zdjęcie z eksportu Google Takeout ma datę pobrania, gdzie ukryte są prawdziwe daty wykonania i jak zapisać je z powrotem w zdjęciach.
Pobrałeś bibliotekę ze Zdjęć Google, rozpakowałeś ją i otworzyłeś folder. Dziesięć lat zdjęć, a każde z nich twierdzi, że zostało zrobione w zeszły wtorek. Sortowanie według daty stawia wyjazd nad morze z 2012 roku obok wczorajszych zrzutów ekranu.
Nic nie zginęło. Daty wciąż są, tylko nie tam, gdzie szuka ich komputer.
Gdzie podziała się data
Zdjęcie może mieć datę w trzech miejscach. Aparat zapisuje jedną w samym pliku, w bloku EXIF, jako „DateTimeOriginal”. System operacyjny trzyma dwie kolejne na zewnątrz pliku: datę utworzenia i datę modyfikacji. Finder, Eksplorator plików i większość galerii czytają najpierw EXIF, a gdy go nie ma, biorą daty pliku.
Takeout psuje to na dwa sposoby. Po pierwsze, gdy Google pakuje pliki do archiwum zip, daty plików stają się chwilą utworzenia archiwum albo chwilą, w której je rozpakowałeś. Samo to nie miałoby znaczenia, gdyby EXIF był nienaruszony.
Po drugie, w dużej części zdjęć data EXIF jest pusta albo błędna. Zrzuty ekranu nigdy jej nie miały. WhatsApp i inne komunikatory usuwają metadane przy kompresji. Skany mają datę skanowania, a nie dzień zrobienia odbitki. A jeśli kiedykolwiek poprawiłeś datę w Zdjęciach Google, ta poprawka trafiła do bazy danych Google, a nie do pliku. Google zapisuje prawidłowe informacje w osobnym pliku .json obok każdego zdjęcia, zamiast wpisać je z powrotem do zdjęcia.
Twój komputer całkowicie ignoruje te pliki .json. Pokazuje więc jedyną datę, jaką znajdzie: datę pobrania.
Sprawdź, jak jest źle
Zanim cokolwiek naprawisz, sprawdź, ile plików naprawdę tego potrzebuje. Zdjęcia prosto z aparatu telefonu zwykle mają dobrą datę EXIF. Jeśli tak jest z większością twoich, może wystarczy naprawić tylko część.
Jeśli masz zainstalowany exiftool, to polecenie wypisze każdy plik bez daty EXIF:
exiftool -r -if 'not $DateTimeOriginal' -filename "Takeout/Google Photos"
W jednej prawdziwej części Takeout z 991 zdjęciami, którą zmierzyliśmy, pliki .json były jedynym źródłem prawidłowej daty dla mniej więcej co piątego zdjęcia. U ciebie proporcje będą inne. Biblioteki pełne zrzutów ekranu, zdjęć z czatów i starych skanów w dużo większym stopniu zależą od plików .json.
Otwórz plik .json i zobacz
Każde zdjęcie ma plik-partnera, np. IMG_2034.JPG.supplemental-metadata.json (starsze eksporty używają IMG_2034.JPG.json). Otwórz go w dowolnym edytorze tekstu. Ważna część wygląda tak:
"photoTakenTime": {
"timestamp": "1563102330",
"formatted": "Jul 14, 2019, 11:05:30 AM UTC"
}
Ten znacznik czasu to prawdziwa data, w sekundach od 1970 roku, w UTC. Jest też creationTime, czyli chwila wysłania pliku do Google. Jeśli chcesz datę wykonania zdjęcia, właściwe jest photoTakenTime. Cały plik opisujemy w artykule Czym są pliki JSON w Google Takeout.
Naprawa ręczna
Dla kilku zdjęć ustaw datę ręcznie. Na Macu otwórz zdjęcie w Podglądzie lub w aplikacji Zdjęcia i popraw datę. W Windows kliknij plik prawym przyciskiem, wybierz Właściwości, potem Szczegóły, i zmień „Data wykonania”. Zrób tak z pięćdziesięcioma zdjęciami, a zaczniesz szukać lepszego sposobu.
Dla całej biblioteki ludzie zwykle sięgają po exiftool. Jedno polecenie kopiuje znacznik czasu z każdego pliku .json do zdjęcia i do dat pliku:
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"
Działa, ale z zastrzeżeniami. Google ucina długie nazwy plików .json na 46 znakach, więc powyższy wzorzec części z nich nie znajdzie. Duplikaty mają (1) w innym miejscu nazwy pliku .json niż w nazwie zdjęcia. Filmy wymagają innych znaczników. HEIC i PNG wymagają osobnych przebiegów. Wszystko to omawiamy w poradniku exiftool. Są też darmowe skrypty społeczności, takie jak GooglePhotosTakeoutHelper, które radzą sobie z dziwactwami nazw, jeśli dobrze czujesz się w terminalu.
Aplikacja
Jeśli nie chcesz spędzić wieczoru w wierszu poleceń, Takeout JSON Metadata Fixer zrobi to jako aplikacja na komputer z macOS, Windows i Linux.
Wskazujesz jej archiwa zip z Takeout albo rozpakowany folder. Dopasowuje każde zdjęcie do jego pliku .json, także przy nazwach supplemental-metadata z 2024 roku, uciętych nazwach i duplikatach z (1). Potem zapisuje photoTakenTime w danych EXIF zdjęcia i ustawia tak samo datę utworzenia i modyfikacji pliku. Zdjęcia bez pliku .json zachowują datę EXIF, jeśli ją mają, a jeśli nie, dostają datę pliku, więc żadne nie zostaje bez daty.
Filmy też dostają datę, zapisaną w pliku MP4 lub MOV tam, gdzie szukają jej odtwarzacze. Współrzędne GPS wracają do zdjęcia, jeśli plik .json ma prawdziwe. Aplikacja może też zmienić nazwy plików na prawdziwą datę i ułożyć je w foldery według roku i miesiąca, ale to opcja. Jeśli chcesz tylko naprawić daty, wybierz opcje, które zachowują obecne nazwy plików i foldery.
Przebieg próbny pokazuje, co by się zmieniło, niczego nie zapisując. Pierwsze 1000 zdjęć jest za darmo, a jednorazowy zakup za 19,99 USD znosi limit. Wszystko działa na twoim własnym komputerze; twoje zdjęcia nigdy nie są wysyłane.
Gdy daty są już w plikach, pozostają prawidłowe wszędzie, gdzie zdjęcia trafią dalej: w aplikacji Zdjęcia na Macu, na serwerze NAS, w Immich, na pendrivie albo w nowym telefonie.
Częste pytania
Czy daty będą w dobrej strefie czasowej?
Plik .json przechowuje dokładną chwilę w UTC. Narzędzia przeliczają ją na czas lokalny komputera przy zapisie EXIF, który domyślnie nie zawiera strefy czasowej. Zdjęcie zrobione o 11:05 w Paryżu wyjdzie jako 11:05, jeśli komputer ma ustawiony czas paryski, i jako 05:05, jeśli ma ustawiony czas Nowego Jorku. Przed naprawą ustaw w komputerze strefę, w której zrobiono większość zdjęć, albo pogódź się z kilkugodzinnym przesunięciem na zdjęciach z wakacji.
Czy coś tracę, zapisując dane w EXIF?
Zapis znacznika daty zmienia tylko blok metadanych. Piksele zdjęcia zostają nietknięte. Zachowaj oryginalne archiwa zip, dopóki nie będziesz zadowolony z wyniku. To i tak dobra praktyka.
Dlaczego złą datę ma tylko część zdjęć?
Bo tylko części zdjęć od początku brakowało daty EXIF. Zdjęcia z aparatu zwykle ją mają. Zrzuty ekranu, zdjęcia z czatów, skany i wszystko, czemu zmieniłeś datę w Zdjęciach Google, zależy od pliku .json.
Czy po naprawie dat mogę usunąć pliki JSON?
Tak. Gdy data i GPS są zapisane w zdjęciach, pliki .json spełniły swoje zadanie. Zachowaj je, dopóki nie sprawdzisz kilku zdjęć w nowej bibliotece, a potem je usuń.