Takeout JSON

Google フォトからダウンロードした動画の日付がおかしい理由と、MP4・MOV の撮影日を直す方法

写真は直ったのに動画だけダウンロード日のまま、という状態の原因です。動画が日付を持つ場所、MOV と MP4 の違い、Live Photos の動画部分、タイムゾーンの注意点、exiftool とアプリで一括修正する手順を説明します。写真と動画を同じ実行で直せます。

写真を直して、見た目は正しくなった。動画は動かなかった。すべての MP4 と MOV が、まだ解凍した日に作られたことになっていて、タイムラインの末尾にかたまっている。

動画は写真とは別の場所に日付を持っていて、写真を直す手順の多くはそこを飛ばします。

動画には EXIF がない

EXIF は写真の形式です。JPEG、HEIC、PNG、TIFF が持ちます。動画ファイルは持ちません。MP4 や MOV は、コンテナの内側、ムービーアトムと呼ばれるヘッダーの CreateDateModifyDate という項目に日付を保存します。トラックごとのコピー TrackCreateDateMediaCreateDate もあります。写真アプリは CreateDate を読み、空ならトラック側を見るものもあります。

DateTimeOriginal を書き込むツールやコマンドは、動画には何もしません。exiftool はそのタグが未対応だと警告して先へ進みます。写真向けに書かれたスクリプトは .mp4 の拡張子ごと飛ばすことが多く、実行はきれいに終わるのに動画は間違ったまま、という結果になります。

Takeout は動画の日付をどこに置くか

Takeout の動画にも、写真と同じく .json サイドカーがあり、photoTakenTime に本当の日付が入っています。それが正しい出どころです。動画ファイル自体にコンテナの日付があるかどうかはまちまちです。スマートフォンのカメラは書き込むので、スマートフォンから直接の動画はたいてい大丈夫です。Google が一部のファイルを詰め直したり、他の出どころからアップロードされたりすると、コンテナの日付が空か、アップロード時刻になっていることがあります。

コンテナの日付がないと、アプリはファイルの更新日時、つまり解凍した時刻に落ちます。それが見えているかたまりです。

Live Photos の動画部分は特別です。静止画の横の短い MP4 には、サイドカーがまったくないことが多いです。静止画から日付をもらうべきものです。

MOV と MP4

MOV は Apple のコンテナ、MP4 は標準のコンテナです。近い親戚で、同じ種類の項目に日付を保存します。iPhone の動画は MOV、Android の動画は MP4 で、Google は Takeout で MOV を MP4 に詰め直すことがよくあります。日付の修正はどちらも同じです。

気を付けるのはタイムゾーンです。MP4 の規格ではコンテナの日付は UTC で、たいていのプレイヤーは表示時に現地時刻へ変換します。それでも現地時刻を書くカメラがあります。exiftool には -api QuickTimeUTC という切り替えがあり、項目を UTC として扱います。スマートフォンが作ったものには、これが正しい振る舞いです。これがないと、動画が数時間ずれて表示されることがあります。

手作業で動画の日付を直す

exiftool で、Google Photos フォルダーから実行します。

exiftool -r -d %s -api QuickTimeUTC -tagsfromfile "%d/%F.supplemental-metadata.json" \
  "-CreateDate<PhotoTakenTimeTimestamp" "-ModifyDate<PhotoTakenTimeTimestamp" \
  "-TrackCreateDate<PhotoTakenTimeTimestamp" "-TrackModifyDate<PhotoTakenTimeTimestamp" \
  "-MediaCreateDate<PhotoTakenTimeTimestamp" "-MediaModifyDate<PhotoTakenTimeTimestamp" \
  "-FileModifyDate<PhotoTakenTimeTimestamp" \
  -ext mp4 -ext mov -ext 3gp -overwrite_original .

古いエクスポートには "%d/%F.json" でもう一度実行します。exiftool はコンテナのヘッダーを書き換えるだけで動画データには触れないので、速く、無劣化です。切り詰められたサイドカー名や (1) の連番は写真と同じ追加の処理が必要で、exiftool ガイド にあります。

古い形式は例外です。2000 年代のカメラの AVI、WMV、3GP、MPEG は日付の項目が限られているかなく、あってもプレイヤーの多くが読めません。それらについては、ファイルの更新日時が、たいていのソフトが見る唯一の日付です。MP4 に変換してからコンテナの日付を設定するか、ファイルの日時を設定して先に進むかです。

アプリで直す

Takeout JSON Metadata Fixer は、写真と同じ実行の中で動画を処理します。Windows、Mac、Linux で動き、画面は日本語です。

各動画のサイドカーを読み、photoTakenTime をコンテナの日付項目に UTC として書き込むので、プレイヤーは正しい現地時刻を表示します。ファイルの更新日時も合わせるので、ファイルマネージャーの表示も一致します。サイドカーのない動画は、コンテナ自身に作成時刻があればそれを保ち、何もないときだけファイルの日時に落ちます。

古い動画は途中で MP4 に変換できます。MOV や AVI に入った H.264 は無劣化で詰め直されるので、画質はそのままで数秒で終わります。古いコーデックは H.264 に再エンコードされます。正しい日付は新しいファイルに書き込まれます。これには ffmpeg のインストールが必要で、なければアプリが教えてくれ、動画は変換せずにそのまま通します。

動画は写真と同じテンプレートで名前が付け直され、整理されるので、誕生日の動画はその日の写真と同じ月のフォルダーに入ります。最初の 1000 件は無料です。

動画の日付を確認する

exiftool -time:all IMG_5540.MP4 で、ファイル内のすべての日付項目が一覧されます。Create DateMedia Create Date を見てください。両方が 1904 年か空なら、コンテナに日付がありません。Mac では「情報を見る」に、コンテナの日付がある動画は「コンテンツ作成日」が出ます。Windows では「プロパティ」の「詳細」タブに「メディアの作成日時」が出ます。

よくある質問

同じ日の写真が動画より前に並ぶのはなぜですか?

たいていタイムゾーンです。写真の EXIF はゾーンなしの現地時刻です。動画のコンテナの日付は UTC で、プレイヤーが変換します。両者の間に数時間のずれが出るのはよくあることで、ほぼ無害です。

exiftool が「Warning: [minor] The ExtractEmbedded option may find more tags」と言います

問題ありません。既定で読んだ以上のメタデータが動画ストリームにあると伝えているだけです。日付項目はヘッダーにあり、処理されています。

無料枠で動画は写真として数えられますか?

はい。動画 1 本が 1 件です。

MP4 に詰め直しても日付は残りますか?

はい。コンテナの日付がコピーされ、アプリはサイドカーの日付を新しいファイルに書き込みます。古いコーデックの再エンコードでも残ります。変わるのは動画ストリームだけです。