Takeout JSON
ID

exiftool untuk Tanggal Google Takeout: Perintah dan Batasnya

Perintah exiftool yang menyalin tanggal dan GPS dari file .json Google Takeout ke foto, tiga kasus yang dilewati diam-diam, dan kapan lebih baik pakai aplikasi.

exiftool gratis, berjalan di mana saja, dan bisa memperbaiki ekspor Google Takeout. Kebanyakan panduan memberi Anda satu perintah lalu berhenti. Perintah itu berhasil untuk kira-kira empat dari lima foto. Artikel ini menjelaskan apa yang terjadi pada foto kelima.

Pasang exiftool

Di Mac, brew install exiftool. Di Debian atau Ubuntu, sudo apt install libimage-exiftool-perl. Di Fedora, sudo dnf install perl-Image-ExifTool. Di Windows, unduh file zip dari exiftool.org, ekstrak, lalu ganti nama exiftool(-k).exe menjadi exiftool.exe.

Setelah itu, buka terminal di folder yang berisi folder Takeout yang sudah diekstrak.

Untuk pertama kali, kerjakan pada salinan. exiftool menulis langsung ke file Anda.

Perintahnya

Setiap foto punya file sidecar di sampingnya: IMG_2034.JPG.supplemental-metadata.json untuk ekspor sejak 2024, IMG_2034.JPG.json untuk ekspor yang lebih lama. Nilai photoTakenTime.timestamp di sidecar adalah tanggal yang asli, dalam detik sejak tahun 1970. Perintah ini menyalinnya ke foto:

exiftool -r -d %s -tagsfromfile "%d/%F.supplemental-metadata.json" \
  "-DateTimeOriginal<PhotoTakenTimeTimestamp" \
  "-CreateDate<PhotoTakenTimeTimestamp" \
  "-FileModifyDate<PhotoTakenTimeTimestamp" \
  -ext jpg -ext jpeg -ext png -ext heic -ext gif \
  -overwrite_original -progress "Takeout/Google Photos"

Satu per satu:

  • -r masuk ke semua subfolder.
  • -d %s memberi tahu exiftool bahwa tanggal yang dibaca adalah angka epoch.
  • -tagsfromfile menentukan nama sidecar dengan %d (folder foto) dan %F (nama file foto beserta ekstensinya).
  • Tiga baris dengan < menyalin stempel waktu ke tanggal EXIF, tanggal pembuatan EXIF, dan tanggal ubah file.
  • -overwrite_original mencegah exiftool meninggalkan salinan _original untuk setiap file.

Untuk ekspor yang lebih lama, jalankan sekali lagi dengan "%d/%F.json". File yang sudah mendapat tanggal pada putaran pertama hanya ditulis ulang dengan nilai yang sama.

Jika mau, tambahkan GPS dalam putaran yang sama dengan empat baris lagi:

  "-GPSLatitude<GeoDataLatitude" "-GPSLatitudeRef<GeoDataLatitude" \
  "-GPSLongitude<GeoDataLongitude" "-GPSLongitudeRef<GeoDataLongitude" \

Google menulis 0.0 untuk foto tanpa lokasi. Jadi bungkus perintahnya dengan -if '$GeoDataLatitude ne 0', atau beberapa ratus foto Anda akan berlokasi di Samudra Atlantik. Penjelasan lebih lanjut ada di memulihkan GPS dari Takeout (bahasa Inggris).

Setelah selesai, exiftool menampilkan berapa file yang diperbarui dan berapa yang dilewati. File yang dilewati itulah yang akan menghabiskan malam Anda.

Di mana perintah ini gagal

Nama sidecar yang terpotong. Google memotong nama sidecar yang panjang di sekitar 46 karakter. PXL_20230812_193044123.RAW-01.COVER.jpg mendapat sidecar bernama PXL_20230812_193044123.RAW-01.COVER.supplemen.json atau lebih pendek. Pola %F tidak pernah cocok. Nama kamera yang panjang, nama file WhatsApp, dan file dengan deskripsi di namanya terkena masalah ini. Anda harus mendaftar sisa file itu dan mencocokkannya secara manual atau dengan skrip.

Duplikat dengan (1). Jika Anda mengunggah nama yang sama dua kali, fotonya menjadi IMG_1234(1).jpg, tetapi sidecarnya IMG_1234.jpg(1).json. Tanda kurungnya pindah tempat. Ganti dulu nama sidecar-nya sebelum menjalankan perintah utama:

for j in "Takeout/Google Photos"/*/*"("*").json"; do
  mv "$j" "$(echo "$j" | sed -E 's/\.([a-zA-Z0-9]+)\(([0-9]+)\)(\.supplemental-metadata)?\.json$/(\2).\1\3.json/')"
done

Salinan hasil edit. IMG_1234-edited.jpg tidak punya sidecar sendiri. File ini memakai sidecar milik aslinya. Setelah foto aslinya selesai, salin datanya dari sana:

for f in "Takeout/Google Photos"/*/*-edited.*; do
  exiftool -tagsfromfile "${f/-edited/}" -AllDates -GPS:all -overwrite_original "$f"
done

Video. File MP4 dan MOV tidak memakai EXIF. Tanggalnya disimpan di kontainer QuickTime, dengan tag yang berbeda, dan tag itu dibaca sebagai UTC:

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

Klip Live Photo sama sekali tidak punya sidecar, jadi setelah ini klip itu tetap tanpa tanggal. Artikel tentang pasangan Live Photo (bahasa Inggris) punya perulangan untuk klip tersebut.

Jebakan zona waktu

Stempel waktu di sidecar adalah satu titik waktu yang pasti dalam UTC. DateTimeOriginal di EXIF adalah jam dinding tanpa zona. exiftool menjembatani keduanya dengan zona waktu komputer Anda saat ini. Foto yang diambil pukul 11:05 di Paris menjadi 11:05 jika komputer Anda diatur ke Paris, dan 05:05 jika diatur ke New York.

Atur zonanya sebelum menjalankan perintah, sesuai tempat sebagian besar foto Anda diambil:

TZ=Europe/Paris exiftool ...

Foto liburan dari zona lain tetap akan meleset beberapa jam. Dari sidecar saja, hal ini tidak bisa dihindari. EXIF asli dari kamera, jika masih ada, adalah satu-satunya catatan waktu lokal.

Jangan "memperbaiki" foto yang sudah punya tanggal EXIF yang benar. Tambahkan -if 'not $DateTimeOriginal' agar foto itu tidak diubah.

Apakah sepadan dengan waktu semalam?

Untuk ekspor yang rapi berisi beberapa ribu foto kamera, exiftool butuh sekitar satu jam, termasuk membaca artikel ini. Untuk pustaka sungguhan dengan gambar WhatsApp, tangkapan layar, duplikat (1), HEIC, video, dan Live Photo, siapkan waktu semalam. Anda juga akan beberapa kali menjalankan exiftool -r -if 'not $DateTimeOriginal' -filename untuk melihat file mana yang masih tanpa tanggal.

Jika Anda juga ingin file diganti namanya menurut tanggal, diurutkan ke folder tahun dan bulan, HEIC diubah menjadi JPG, dan pasangan Live Photo tetap bersama, Anda harus merangkai empat perintah lagi dan satu perulangan. Tidak masalah jika Anda menikmatinya.

GooglePhotosTakeoutHelper adalah skrip gratis yang menangani keanehan nama file untuk Anda. Skrip ini langkah tengah yang baik jika Anda nyaman dengan terminal tetapi tidak ingin menulis perintah sed sendiri. Lihat juga alternatif GooglePhotosTakeoutHelper.

Aplikasinya

Takeout JSON Metadata Fixer mengerjakan seluruh daftar ini dalam satu kali proses, dengan uji coba lebih dulu, di macOS, Windows, dan Linux.

Aplikasi mencocokkan setiap foto dengan sidecar-nya, termasuk nama yang terpotong, duplikat (1), dan salinan -edited, lalu menulis photoTakenTime dan GPS ke dalam file. Video mendapat tag QuickTime. Klip Live Photo mewarisi tanggal foto diamnya. Foto tanpa sidecar mempertahankan tanggal EXIF-nya, dan foto yang tidak punya keduanya mendapat tanggal file, jadi tidak ada foto yang tanpa tanggal.

Templat nama file dan folder bersifat opsional. Jika Anda mempertahankan nama dan folder yang ada, aplikasi hanya memperbaiki tanggal. Aplikasi memeriksa ruang disk sebelum mulai dan berjalan sepenuhnya offline. 1000 foto pertama gratis. Versi tanpa batas harganya US$19,99 sekali bayar, lebih murah daripada waktu semalam Anda.

Pertanyaan yang sering diajukan

exiftool menampilkan "Warning: No writable tags set from" untuk sebuah sidecar. Apa artinya?

Sidecar-nya ada, tetapi tidak berisi photoTakenTime, atau pola nama cocok dengan file yang salah. Buka file .json-nya dan periksa. File album metadata.json juga memicu peringatan ini dan boleh diabaikan.

Bisakah saya menjalankannya langsung pada file zip tanpa mengekstraknya?

Tidak. exiftool memerlukan file di disk. Ekstrak dulu semua bagian ke satu folder, seperti dijelaskan di Google Takeout dengan banyak file .zip.

Apakah menulis EXIF mengubah gambarnya?

Tidak. exiftool menulis ulang blok metadata dan tidak menyentuh data gambar. Ukuran file mungkin bertambah beberapa ratus byte.

Tanggal mana yang harus disalin, photoTakenTime atau creationTime?

photoTakenTime. creationTime adalah waktu file diunggah ke Google, yang sering kali bertahun-tahun kemudian.