前提
Google フォト を一括エクスポートすると、たとえば takeout-20210320T042532Z-001.zip
のようなファイル名で zip ファイルとしてエクスポートされます。
このとき、アーカイブされている画像や動画のファイルには「画像ファイルの日時」は記録されておらず、一緒に書き出される JSON ファイルにその情報が書かれています。「画像ファイルの日時」の定義は次のとおりです。
「画像ファイルの日時」とは
「画像ファイルの日時」とは、以下の日時です。
- EXIF 内の情報ではない
- そのファイルがアップロードされたときの、そのファイルの「更新日時」*1
- 一括エクスポート時に一緒に書き出される JSON ファイルでいえば
photoTakenTime
の値creationTime
はアップロードされた日時なので、photoTakenTime
とは異なる
Google フォト にアップロードされるときに Google フォト 側で認識される日時はどの日時か
Google フォト にアップロードされる時に Google フォト 側で認識される日時は「ファイルの更新日時」または「EXIF の日時」です。両方存在する場合には後者が優先されます*2。
したがって、一括エクスポートしたファイルを元通りの「日時」として認識させるためには、JSON の photoTakenTime
の日時をファイルの更新日時とするか、EXIF として埋め込むかすればいい、ということになります。
一括作業ツール(Metadata Fixer)
上記の作業(JSON の値を EXIF として埋め込む)を自動で行ってくれる Metadata Fixer というツールがあります。
ペアとなる JSON と画像 が存在する zipファイル を放り込んで出力フォルダを選べば、埋め込まれた画像ファイルが出来上がります。zip は自前で固めたもので問題ありません*3。
このソフトは無料では 100枚 まで一括処理が可能です。それ以上の場合はレジストする必要があります。
一括作業ツール(GooglePhotosTakeoutHelper)
CLI の GooglePhotosTakeoutHelper
というツールならば制限はありません。ただ、手元で試してみた限りではphotoTakenTime
が復元できないことがありました。
一括作業ツール(google-photos-exif)
他に、EXIF データについて一括作業が行える google-photos-exif
というツールもあります。$ git clone
してから $ yarn install
を経て、$ yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error
などのようにして用いることができます。
無料ですし、やりたい最低限のことを高速に行ってくれるという意味で、個人的には、これが一番だと思いました。
注意点
一括エクスポートの際に複数のファイルに分割してエクスポートした場合、画像ファイルとそれに対応する JSON ファイルが異なるファイルに分割されて出力されることがあります。
なので、上記の作業を行う前に、すべての分割ファイルを統合しておく必要があります。