2025年8月28日木曜日

【Mac編】Google Takeout でエクスポートした Google フォトのデータの日時情報を修正する方法

Windows OS 用はいくつかあるのですが、macOS 用では使い勝手のよいものがさがせなかったので作ってしまいました。

関連情報



はじめに


Googleフォトからダウンロードすると、ファイルの作成日付がそのダウンロードした日になってしまいます。EXIF情報が存在する場合には、その情報から修正することは可能です。カメラの位置情報を明示的にオフにしていないスマートフォンであれば、基本的には入っているはずです。

上記については、下記でまとめています。フォルダも指定できるので便利です。

しかしながら、EXIF情報のない写真や、それ以外のデータもあるはずです。それらは exiftoolでデータをみると、下記の3つぐらいしかなくて、それらは Googleフォトからダウンロードした日になってしまいます。写真は「いつ」とったかの情報が非常に大事です。
  • FileModifyDate
  • FileAccessDate
  • FileInodeChangeDate
Googleフォト上では日時順に並んでいるわけで、Google側は日時情報を保持しているはずなのです。こちらも含めて取得するためには、Google Takeout という Googleアカウントに入ったデータをバックアップ目的でエクスポートするという機能をつかうことで取得できます。

ただ気をつけないといけないことは、これでエクスポートした Googleフォトの画像データもまた、ファイルの日時情報はエクスポートした日になってしまうことです(画像データ+メタ情報(JSON)の2ファイルを取得)。ただし、各ファイルに 日時など Googleがどのように管理しているかのメタ情報ファイル(JSON)も合わせてエクスポートします。これを参考に exiftool で日時を直すことにします。

JSONファイルの一部をみると、photoTakenTimeが画像のオリジナル日時になります(赤文字)。こちらのタイムゾーンは UTC 表記のため、これを日本なら JST時間(+9時間)に変更する必要があります。

  "title": "man-html2.gif",
  "description": "",
  "imageViews": "1",
  "creationTime": {
    "timestamp": "*****",
    "formatted": "2025/08/28 1:51:56 UTC"
  },
  "photoTakenTime": {
    "timestamp": "*****",
    "formatted": "1997/05/15 7:31:18 UTC"
  },

いまどきなら Gemini(生成AI)を使えば、苦労せずに作れるのでは!?とおもって作ってみました。ただ結構何度も修正が必要だったので、やはり生成されたシェルスクリプトを実行して、意図して動作しているのか、どこが間違っているのか理解してプロンプトにて修正依頼をださないといけないなぁと思ったのでした。ただ Usage など -h 部分の実装など自動でやってくれるのは便利ですねぇ。

googlephoto_date_update.sh をインストールする


*macOS Sequoia 15.6.1 で検証しました。
*すべてコマンドを使うため、Macintosh HD > ユーティリティ > ターミナルを起動して、それ上で操作してください。
* 以下、「青文字」が実行するコマンドです。コマンドは入力したあと Enter キーを押すことで実行できます。

より googlephoto_date_update.sh をダウンロードする。

ダウンロードフォルダにダウンロードしたとして

ターミナルアプリより、

cd $HOME/Downloads
chmod +x googlephoto_timestamp_update.sh
を実行して、ファイルに実行権限をつけてください。

そして、下記を実行してコマンドのヘルプが表示されることを確認してみてください。

./googlephoto_timestamp_update.sh -h

どこででも実行できるようにするためには、
下記を参考に PATHを設けておくと便利です。

Google Photos のデータを Google Takeout でエクスポートしてみよう



1. https://takeout.google.com にアクセス
2. 「選択をすべて解除」をクリック
3. 「Google フォト」のみ選択

*特定アルバムのみエクスポートする場合には、「すべてのフォトアルバムが含まれます」をクリックして、必要なアルバムのみチェックをいれてください。
4. 次のステップへ
5. エクスポート先を選択
Googleドライブの容量が十分にある(Googleフォトの全容容量をさらに保存しても余裕)であれば、「Googleドライブへ追加」がもっとも速いです。ダウンロードリンクの場合には、結構時間がかかります。
ファイルサイズは、エクスポートする容量がどの程度かで考えてください。

エクスポートするデータが複数に分割されている場合には、それらの圧縮ファイルを展開して1つのフォルダに統合する必要があります。Windows OS では統合を選択できますが、macOS の場合には、Optionキーを押しながら、特定フォルダへドラッグ&ドロップさせることで統合ボタンがでてきます。

Macで「同じ名前のフォルダ」を結合する方法 | エンジニアの備忘録

特定アルバムをエクスポートした場合


ダウンロードした zipファイルを展開すると、下記のようなフォルダとファイル構造なります。

Takeout
 Google フォト
  アルバム名
   写真1.jpg
   写真1.json
   メタデータ.json

この場合、ツールは
   写真1.json
からタイムスタンプ(日時)情報を取得して
   写真1.jpg 
の画像データのタイムスタンプを修正します。

全データをエクスポートした場合


Takeout
 Google フォト
  Photos from 2010
  Photos from 2011
  Photos from 2012
  Photos from 2013
      .....
  アルバムA
    写真1.jpg
    写真1.json
    メタデータ.json
  アルバムB
   写真2.jpg
   写真2.json
   画像3.png
   画像3.json
   メタデータ.json

のような構成になります。


googlephoto_date_update.sh を使ってみよう!


ダウンロードフォルダに、Takeout というフォルダがあり、その中に Google Takeout でエクスポートした Googleフォトデータがあるとします。特定アルバムの場合には、下記のようになっていることでしょう。

Takeout
 Google フォト
  アルバム名
   写真1.jpg
   写真1.json
   写真2.jpg
   写真2.json
   ....
   メタデータ.json

googlephoto_date_update.sh がダウンロードフォルダにあるとして

./googlephoto_date_update.sh Takeout

を実行してください。
それだけです。

もし日本ではなくシンガポールに住んでいて、Googleフォトもそのタイムゾーンをベースにアップロードしているならば、シンガポールは UTCの +8時間ですから、下記のように実行してください。

./googlephoto_date_update.sh --timezone +08:00 Takeout


2025年8月28日 @kimipooh