Google フォト を一括エクスポートしてからアップロードする際に「画像ファイルの日時」を復活させる方法(移行のときなど)

前提

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 というツールがあります。

metadatafixer.com

ペアとなる JSON と画像 が存在する zipファイル を放り込んで出力フォルダを選べば、埋め込まれた画像ファイルが出来上がります。zip は自前で固めたもので問題ありません*3

このソフトは無料では 100枚 まで一括処理が可能です。それ以上の場合はレジストする必要があります。

一括作業ツール(GooglePhotosTakeoutHelper)

CLI の GooglePhotosTakeoutHelper というツールならば制限はありません。ただ、手元で試してみた限りではphotoTakenTime が復元できないことがありました。

github.com

一括作業ツール(google-photos-exif)

他に、EXIF データについて一括作業が行える google-photos-exif というツールもあります。$ git clone してから $ yarn install を経て、$ yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error などのようにして用いることができます。

無料ですし、やりたい最低限のことを高速に行ってくれるという意味で、個人的には、これが一番だと思いました。

github.com

注意点

一括エクスポートの際に複数のファイルに分割してエクスポートした場合、画像ファイルとそれに対応する JSON ファイルが異なるファイルに分割されて出力されることがあります。

なので、上記の作業を行う前に、すべての分割ファイルを統合しておく必要があります。

*1:Windows の場合

*2:さらに異なる条件があるかもしれません

*3:Google フォト でダウンロードしたそのままの zipファイル でなくてもいい

Powered by はてなブログ