写真
Googleフォトのエクスポートで日付がおかしい:Takeout の JSON を写真に統合する方法
Google Takeout は写真の日付を別の JSON ファイルに保存します。無料ツール4つで写真に統合し直せます。各ツールが直すもの、正確なコマンド、確認方法を解説します。
他の言語でも読めます: العربيةবাংলাDeutschespañolfrançaisગુજરાતીहिन्दीIndonesiaitalianoಕನ್ನಡ한국어EnglishमराठीpolskiportuguêsрусскийKiswahiliதமிழ்తెలుగుไทยTürkçeукраїнськаاردوTiếng Việt中文
Google Takeout で Google フォトのライブラリをダウンロードした。すると数千枚の写真の横に数千個の .json ファイルが並び、写真ビューアは 2019 年の写真を「昨日撮影」と表示する。Google フォトのエクスポートで日付がおかしいこの状態は、JSON ファイルをそれぞれの写真に統合し直せば直ります。ツールが JSON ファイルから撮影日時を読み取って写真に書き込むので、どのアプリでも正しい日付が表示されるようになります。
このガイドでは、JSON ファイルがなぜ存在するのか、統合がなぜ失敗することがあるのか、そして4つの無料ツールがどのように統合するのかを説明します。ツールごとの正確なコマンド、それぞれが変更する日付、何かを削除する前に結果を確認する方法も紹介します。
写真に JSON ファイルが付いてくる理由
Takeout は写真1枚につき2つのファイルを出力します。画像ファイル(たとえば IMG_1234.jpg)と、元の日付、GPS 座標、説明、所属アルバムを記録した JSON ファイルです。あるエクスポートガイドは、最初に目にする典型的な状況をこう説明しています。2019 年の写真の日付が「昨日」になり、位置情報もアルバムもない。けれども何も失われてはおらず、情報は JSON ファイルの中にありました(PixelUnion)。イリノイ工科大学も、エクスポートのファイル数がライブラリの写真の枚数より多くなる理由を同じように説明しています(Illinois Tech)。
写真ファイルと JSON ファイルの内容が食い違うこともあります。google-photos-exif の作者は、Google フォト上で日付を変更しても画像内のメタデータは更新されず、新しい日付は JSON ファイルにしかないことに気づきました。共有してもらった写真に多いのですが、画像の中に日付がまったく入っていないものもあります(google-photos-exif)。gphotos-takeout-repair の README は問題のもう半分を示しています。展開したエクスポートでは、写真、その編集版、JSON ファイルのどれもが作成日として Takeout のエクスポート日を表示するのです(gphotos-takeout-repair)。
そのため、写真ファイルだけを読むアプリには、日付がないか、エクスポートした日が表示されます。正しい日付は JSON ファイルにあり、統合によってそれが写真に戻ります。
統合を失敗させる3つの原因
統合ツールは、写真ごとに正しい JSON ファイルを見つけなければなりません。Takeout の3つの特徴がそれを難しくしています。
- 写真とその JSON ファイルが別々の zip に入っていることがある。 Ente の移行 FAQ は、
flower.jpegがある zip に、flower.jsonが別の zip に入っていて、両者を対応づけられない例を挙げています(Ente)。Porte の README も同じケースを既知の制限として挙げています。画像と別のアーカイブにあるメタデータファイルは見つけられません(Porte)。 - JSON ファイルの名前が統一されていない。
IMG123.jpgに対してIMG123.jpg.jsonとなる場合もあれば、単にIMG123.jsonとなる場合もあります。対応する画像のない JSON ファイルを含むフォルダもあります(google-photos-exif)。 - 編集した写真は2枚出てくる。 Takeout は元の写真と編集後のコピーを、ハッシュの異なる別々のファイルとしてエクスポートするため、ハッシュを比較する重複検出ツールでは見つかりません(Ente)。編集後のファイルには
-editedという接尾辞が付き、IMG_0001-edited.jpgがIMG_0001.jpgの隣に並びます(gphotos-takeout-repair)。
1つ目の問題の対策はどのツールでも同じです。すべての zip をダウンロードし、すべてを一つの親フォルダに展開して、サブフォルダはそのままにしておきます(Ente)。2つの zip に同じ名前のフォルダがある場合は、一方で他方を置き換えるのではなく、フォルダの中身を統合してください(google-photos-exif)。
ダウンロードについてイリノイ工科大学からのヒントがあります。Takeout のウィンドウを前面に出したままにしてください。最小化したり別のウィンドウで作業したりすると、Google が再ログインを求めるため、15 分後にダウンロードが失敗します(Illinois Tech)。
Google フォトのエクスポート日付を JSON から直す無料ツール4選と、それぞれが直す日付
写真には2種類の日付があります。EXIF の日付(DateTimeOriginal)は画像の中に保存され、どのアプリやサービスに移しても一緒についていきます。ファイルの日付(更新日時や作成日時)はファイルシステムに属するもので、簡単に失われます。gpth の README は、Android スマートフォン上でファイルを移動すると通常この日付がリセットされると警告しています(gpth)。ツールを選ぶ前に、そのツールがどちらを書き込むのか確認しましょう。
以下のどのコマンドでも、1つ目のフォルダは展開した Takeout、2つ目は新しい空の出力フォルダです。
Porte:日付と位置情報を写真の中に書き込む
Porte は、対応する JSON ファイルからタイムスタンプと位置情報を画像の EXIF データにコピーします。画像の再圧縮はしません。日付が見つからない場合はファイル名から読み取ろうとし、見つかった中で最も古い日付を使うので、ファイルの更新日時が撮影日時と誤認されることはありません。ファイルはその場で書き換えずに出力フォルダへコピーし、失敗したファイルは別フォルダに入れ、ログを保存します。アルバム情報は保持しません。完成済みのプログラムはプロジェクトのリリースページからダウンロードできます(Porte)。
porte srcpath destpath
google-photos-exif:欠けている EXIF の日付を補う
この Node.js 製ツールは、各 JSON ファイルから photoTakenTime を読み取ります。ファイルの更新日時を設定し、写真にまだない場合に限って DateTimeOriginal を書き込みます。処理できなかったファイルはエラーフォルダに入ります(google-photos-exif)。PixelUnion の筆者はこのツールを使い、ライブラリ全体の処理が約 20 分で終わったと報告しています(PixelUnion)。
yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error
gpth:1つのフォルダまたは月別に整理し、ファイルの日付を設定する
Google Photos Takeout Helper は対話式で、実行して質問に答えていくだけです。すべての写真を1つのフォルダに集めるか、--divide-to-dates オプションで月別のフォルダに振り分け、ファイルの最終更新日時を設定します。JSON のデータを EXIF に書き戻す機能はまだ ToDo リストにあるため、README には追加の exiftool コマンドが載っています。EXIF の日付がない写真について、ファイルの日付を EXIF の日付にコピーするものです。ファイルにもう一度手を加える前に、このコマンドを実行してください。なお gpth はデフォルトでファイルを移動するので、元の zip は残しておきましょう(gpth)。
exiftool -overwrite_original -r -if 'not defined DateTimeOriginal' -P "-AllDates<FileModifyDate" "your/output/folder/ALL_PHOTOS/"
gphotos-takeout-repair:JSON ファイルと編集済みの重複を取り除く
このツールは写真を新しいフォルダにコピーし、フォルダ構成を保ったまま、JSON ファイルの photoTakenTime をもとに各ファイルの作成日時を設定します。-edited のコピーがある場合はそちら(たいていは最も良い版)を残して元の写真を外すので、出力には JSON ファイルも編集済みの重複も含まれません(gphotos-takeout-repair)。npm install -g gphotos-takeout-repair でインストールしてから、次を実行します。
gphotos-takeout-repair --src ./unzipped-takeout-dir --dest ./output-dir
すべての写真で日付を画像の中に入れたいなら、Porte が直接書き込みます。ほかの3つを使う場合は、後で下記の方法で EXIF の日付を確認してください。
日付が本当に写真に入っているか確認する
ファイルブラウザの「更新日時」の列は信用しないでください。メタデータそのものを確認します。
- 追加のソフトなしで: 写真を右クリックし、Mac なら「情報を見る」、Windows なら「プロパティ」を選びます。統合がうまくいっていれば、正しい撮影日時、写真に元々あれば GPS 座標、記録されていればカメラの機種が表示されるはずです(PixelUnion)。
- フォルダ全体を確認するなら: ExifTool はフォルダ内のすべての JPG について
DateTimeOriginalタグを表示できます。次の行はドキュメントにある例をもとにしています(ExifTool)。
exiftool -DateTimeOriginal -S -s -ext jpg .
空行や、エクスポートした週の日付が表示された場合、その写真は統合されていません。ツールのエラーフォルダや失敗フォルダを見て、対応する JSON ファイルが別の zip から来ていないか確認してください。
- 数を比べる。 出力フォルダとエラーフォルダを合わせた写真と動画の数は、展開した Takeout とほぼ同じになるはずです。ツールが編集済みの重複を取り除く場合は、その分を差し引きます。
ワンクリックで済ませる方法
コマンドラインを使いたくない場合は、デスクトップアプリでも同じことができます。PHOTOK は Pacix Labs の製品です。製品ページによると、Google があちこちに散らばらせた .json ファイルを読み取って本来の日付と場所を写真に戻し、写真を「年 / 月 / 場所」のフォルダに整理して、完全に同じ重複は別に分けます。Windows 10・11 と Apple チップ搭載の Mac で動作し、何もアップロードせずに処理し、ファイルを削除することはありません。プレビューは無料で、フル版は €49 の買い切りです(PHOTOK)。
上の無料ツールとアプリのどちらを選んでも、守るべきルールは同じです。コピーで作業し、サンプルを確認し、zip を残しておくことです。
チェックリスト
- すべての zip をダウンロードし、2台目のドライブにコピーを保管する。
- すべての zip を一つの親フォルダに展開し、サブフォルダを保ち、同名のフォルダは統合する。
- ツールを選び、どの日付を書き込むか把握する:EXIF の日付、ファイルの日付、またはその両方。
- コピーに対して実行し、新しい出力フォルダに出力する。
- さまざまな年の写真をサンプルに
DateTimeOriginalを確認し、エラーフォルダも見る。 -editedのコピーをどうするか決める。- JSON ファイルと zip を削除するのは、確認と2つ目のバックアップが済んでからにする。
よくある質問
Google Takeout で写真と一緒に JSON ファイルが出てくるのはなぜですか?
Google は、各写真について把握している撮影日時、位置情報、説明、アルバム情報を、写真の隣にある別の .json ファイルに保存しています。写真ファイル自体には同じ情報が入っていないことがあります。たとえば Google フォト上で日付を変更した場合です。
JSON ファイルは削除してもいいですか?
日付と場所が写真の中に入り、一部をサンプルとして確認してからにしてください。それまでは、Google が把握している写真の日付と位置情報が保存されているのは JSON ファイルだけです。
統合ツールが直すのはどの日付ですか?
ツールによって異なります。写真の EXIF メタデータ(DateTimeOriginal)に日付を書き込むものは、日付がファイルと一緒に移動します。ファイルの更新日時や作成日時だけを設定するものもあり、こちらはコピー方法によってはリセットされます。選ぶ前にツールの README を読んでください。
統合したのに一部の写真の日付がまだおかしいのはなぜですか?
たいていは、写真とその JSON ファイルが別々の zip に入っていて一緒にされなかったか、JSON ファイルの名前が写真と違っているためです。すべての zip を一つのフォルダに展開し、新しいコピーに対してツールをもう一度実行し、ツールのエラーフォルダや失敗フォルダを確認してください。
元の zip ファイルは残しておく必要がありますか?
はい。統合後のライブラリを確認し、別のバックアップを用意するまでは残してください。ファイルをコピーせずに移動するツールもあり、やり直すための手段は 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