Google Takeout の JSON を写真に書き込む(統合する)手順:exiftool とアプリの 2 通り
Google Takeout の .json サイドカーにある撮影日と GPS を、写真ファイルの EXIF に書き込む手順です。exiftool のコマンド、取りこぼしの見つけ方、アプリで一度に済ませる方法、JSON を消す前の確認まで順に説明します。
フォルダーに写真があり、その横に 1 枚ずつ .json ファイルがあります。本当の撮影日と場所は .json のほうに入っていて、写真自体は間違った日付を表示します。やりたいことは、.json の情報を写真の中に書き込み、サイドカーを捨てて、普通の写真フォルダーにすることです。
これは解決済みの問題です。手作業でやる方法と、ボタン 1 つでやる方法を順に説明します。
「統合する」とは何をすることか
JPEG、HEIC、PNG には EXIF というメタデータの領域があります。カメラは撮影日時を DateTimeOriginal というタグに、GPS の座標を GPSLatitude と GPSLongitude に書きます。どの OS の写真アプリも、このタグを読みます。
Takeout のサイドカーには、同じ情報が別の入れ物に入っています。統合とは、サイドカーの photoTakenTime と geoData を読み、EXIF のタグに書き込むことです。ついでにファイルの作成日時と更新日時も合わせておくと、EXIF を見ない表示でも Finder やエクスプローラーが正しく並べます。
動画には EXIF がありません。日付は MP4 や MOV のコンテナの中の CreateDate などのタグにあります。考え方は同じで、タグの名前が違うだけです。
手順 1:すべての zip を 1 か所に解凍する
Takeout は大きなエクスポートを複数の zip に分けます。アルバムのフォルダーが合流するように、全部を同じ親フォルダーに解凍してください。1 つのアルバムが 2 つの zip にまたがると、写真とサイドカーが半分ずつ別の zip に入っていることがあります。最後には両方が隣に並んでいる必要があります。zip が多いときは Google Takeout の zip が複数に分かれるのはなぜ? を見てください。
手順 2:写真がサイドカーを見つける仕組みを知る
サイドカーの名前は、写真の名前に接尾辞を付けたものです。2024 年以降のエクスポートでは IMG_0042.JPG の相手は IMG_0042.JPG.supplemental-metadata.json、古いエクスポートでは IMG_0042.JPG.json です。
この単純なルールが崩れる場合が 2 つあります。46 文字を超える名前は途中で切られるので、接尾辞も切れます。重複した写真は番号の位置が変わり、IMG_0042(1).JPG の相手は IMG_0042.JPG.supplemental-metadata(1).json になります。どのツールを使うにしても、この 2 つを扱えないと、そのファイルは何も言われずに飛ばされます。詳しくは supplemental-metadata.json とは? にあります。
手順 3:exiftool で書き込む
exiftool は無料で、どの OS でも動きます。インストールしたら Google Photos フォルダーでターミナルを開き、次を実行します。
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 .
このコマンドは、各画像について同じフォルダーにある「同じ名前 + .supplemental-metadata.json」のファイルを探し、並べた項目をコピーします。-d %s は、タイムスタンプが 1970 年からの秒数だと exiftool に伝えます。-overwrite_original を付けないと、すべてのファイルのバックアップが残ります。
古い形式のサイドカーのために、"%d/%F.json" に変えてもう一度実行します。最後に動画用に 1 回実行します。
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 .
手順 4:exiftool が取りこぼしたものを片付ける
残りを数えます。
exiftool -r -if 'not $DateTimeOriginal' -ext jpg -ext heic -ext png -filename .
一覧には、名前が切れたもの、(1) の重複、そして最初からサイドカーがなかった写真が出ます。名前が切れたものは、期待する名前の先頭と一致する .json を探す短いスクリプトで拾えます。重複は、名前を付け直さないとパターンに合いません。10 分の作業が一晩になるのはこの部分で、GooglePhotosTakeoutHelper のようなコミュニティのスクリプトがあるのもこのためです。無料で、突き合わせをターミナルでやってくれます。
もう 1 つ落とし穴があります。上の GPS の行は、サイドカーが「位置不明」と言っている写真に 0.0, 0.0 を書き込んでしまいます。-if '$GeoDataLatitude ne 0' を付けてください。付けないと、大西洋の真ん中に写真の固まりができます。
手順 5:アプリで済ませる
Takeout JSON Metadata Fixer は、手順 1 から 4 を 1 回の実行で行います。Mac、Windows、Linux で動き、画面は日本語です。
Takeout の zip か、解凍したフォルダーを選びます。アプリは各写真と動画を、Google が使ってきたすべての名前の形で試してサイドカーと組み合わせます。46 文字の切り詰めや (1) の番号も含みます。画像には EXIF に、動画にはコンテナに日付を書き、ファイルの日時を合わせ、GPS は座標が本物のときだけ書きます。サイドカーのない写真は自分の EXIF の日付を保ち、それもなければファイルの日時を使います。
「名前をそのまま」と「フォルダーをそのまま」を選べば、同じフォルダーがメタデータだけ正しくなって返ってきます。同時に、日付入りの名前に変えて年/月のフォルダーに振り分けることもできます。ドライランなら、何も書き込む前に計画を見られます。最初の 1000 枚は無料で、無制限は 19.99 米ドルの買い切りです。どこにも何もアップロードされません。
手順 6:確認してから、サイドカーを消す
写真アプリで、年の違う写真を何枚か開いて日付を確かめます。それから .json ファイルを削除します。Mac や Linux では、フォルダーの中で find . -name "*.json" -delete を実行します。Windows では、フォルダー内を *.json で検索し、すべて選んで削除します。問題に気付いたときのために、元の zip は 1 か月ほどどこかに残しておいてください。削除のタイミングは Google Takeout の JSON ファイルは削除していい? にもまとめました。
よくある質問
統合すると画質は落ちますか?
落ちません。書き換えるのはメタデータの領域だけで、圧縮された画素のデータは 1 バイトも変わらずにコピーされます。
写真の EXIF の日付とサイドカーの日付が違う場合は?
サイドカーは Google フォトが表示していた日付で、自分で直した日付も含みます。たいていはこちらが欲しい日付です。Google フォトで日付を直したことがなければ、どちらにしても 2 つは一致します。
時刻が数時間ずれるのはなぜですか?
サイドカーのタイムスタンプは UTC です。EXIF にはタイムゾーンがないので、ツールはパソコンの現地時刻に変換します。写真を撮った地域のタイムゾーンにパソコンを合わせるか、ずれを受け入れてください。詳しくは 写真の時刻が数時間ずれるのはなぜ? にあります。
日付だけ書いて、GPS は書かないことはできますか?
できます。exiftool なら、コマンドから GPS の行を消します。アプリは GPS があれば書き込みます。ファイル名に場所を入れたくなければ、場所を含まない名前のテンプレートを選んでください。