Takeoutの動画の日付がずれる理由
- ファイルの日時がエクスポート日になっている。ファイルマネージャーや、ファイルの日時で並べ替えるアプリでは、すべての動画がアーカイブを作成した日に並んでしまいます。
- 内部に日付がない動画がある。画面録画、メッセージアプリから保存したクリップ、編集や書き出しをした多くの動画は作成日時がゼロのままで、アプリによっては1904年や1970年と表示されます。
- 内部に誤った日付を持つ動画がある。アプリで変換や再保存をした動画は、録画した日時ではなく、変換した日時を持っていることがあります。
- タイムゾーン:MP4やMOVのヘッダーはUTCで記録します。ここに現地時刻を書き込むツールでは、動画の時刻が数時間ずれてしまいます。
このツールが動画で変更する内容
| 場所 | 内容 | 条件 |
|---|---|---|
ムービーヘッダー(mvhd) | 作成日時と更新日時 = JSONの撮影日時(UTC) | 記録済みの日付が空の場合、1970年より前の場合、またはそれより前に撮影された動画でアップロード時点以降の日時になっている場合。カメラが記録済みの日付と位置情報も置き換えるをオンにした場合は常に |
すべてのトラックヘッダーとメディアヘッダー(tkhd、mdhd) | 同じ日時 | ムービーヘッダーと同時 |
メタデータ内の日付テキスト(com.apple.quicktime.creationdate、©day) | 同じ時刻を、同じテキスト形式で | 動画にすでにある場合のみ(新たには追加しない) |
| 修正済みZIP内のファイルの日時 | 撮影日時 | 常に |
これらのフィールドは固定長なので、その場で上書きします。動画のサイズはまったく変わらず、ボックスの位置も動きません(そのため、インデックスがメディアデータの前にあっても後ろにあっても、サンプルのオフセットは有効なままです)。映像と音声のデータは変更せずにコピーします。自動テストでは、ffmpegで作成した動画を変更前と変更後でデコードし、すべてのフレームを比較しています。
対応形式:MP4、MOV、M4V、3GP、3G2、およびPixelのモーションフォトの.MPファイル。AVI、MKV、WebMなどのコンテナには、ファイルの日時のみ設定します。
Takeoutの動画の日付を修正する方法
- TakeoutのZIPパートをすべて上にドロップします。動画とそのJSONファイルは、別々のパートに入っていることがよくあります。
- カメラが記録済みの日付と位置情報も置き換えるはオフのままにします。もっともらしい録画日時をすでに持つ動画は、その日時が保持されます。Google Photosで日付を修正した場合にのみオンにしてください。
- 修正&保存をクリックし、修正済みZIPを展開します。動画の日付を確認するには、Windowsではプロパティ → 詳細 → メディアの作成日時を見るか、
ffprobe -show_entries format_tags=creation_time video.mp4を実行します。
Live Photoとモーションフォト
Live PhotoはTakeoutから、HEICまたはJPEGと、専用のJSONファイルを持たない短いMOVまたはMP4として出力されます。ツールは動画に写真と同じ日付を付け(そのオプションのチェックを外した場合を除く)、ヘッダーも同じルールで扱います。
JSONファイルのない動画
VID_20190101_101010.mp4やPXL_20190809_203449253.mp4(Pixel、UTC)のような名前からは日付が分かります。この日付はファイルの日時に設定され、空の動画ヘッダーにも書き込まれます。すでに日付があるヘッダーが、名前の日付で置き換えられることはありません。
サイズの大きい動画
ZIP内に無圧縮で格納された動画はヘッダーだけを読み込むため、10 GBの動画でも読み込むのは数KBで済みます。圧縮して格納された動画は、編集するためにメモリ上で展開する必要があります。256 MBを超える場合はファイルの日時のみ設定し、その旨がレポートに記載されます。
よくある質問
動画は再エンコード・再圧縮されますか?
いいえ。書き換えるのはヘッダー内の日付フィールドだけです。ファイルサイズは変わらず、映像と音声のデータも以前とまったく同じです。
動画にはどの日付が設定されますか?
JSONファイルのphotoTakenTime、つまりGoogle Photosに表示される日付です。JSONにアップロード日時(creationTime)しかない場合は、それをファイルの日時として設定し、ヘッダーには手を加えません。
カメラが記録した日付は上書きされますか?
初期設定では上書きされません。JPEGやHEICにすでに「撮影日時」(DateTimeOriginal)やGPSの位置情報がある場合は、そのまま残します。動画の場合、ヘッダー内の撮影日時が妥当であれば残します。日付が空、1970年より前、またはアップロードや処理の日時にすぎない場合(それより前に撮影された動画で、アップロード時点以降の日付)は置き換えます。Google Photosで日付を変更していて、そちらを使いたい場合は、カメラが記録済みの日付と位置情報も置き換えるをオンにしてください。
動画内の日付を読み取るアプリはどれですか?
ムービーヘッダーの作成日時が標準の格納場所です。ExifToolではCreateDate、ffprobeではcreation_time、Windowsのエクスプローラーではメディアの作成日時として表示され、Immichも動画の取り込み時にこれを読み取ります。ファイルの日時で並べ替えるアプリはファイルの日時を使いますが、これも修正済みZIPで復元されます。
日付はどのタイムゾーンになりますか?
Googleは写真の撮影時刻をUTCで保存しています。このツールはそれを選択したタイムゾーン(初期設定はパソコンのタイムゾーン)に変換し、アプリが正確な時刻を表示できるよう、UTCとの時差(OffsetTimeOriginal)も書き込みます。動画のヘッダーは仕様上UTCで保存するため、動画には正確な時刻が記録され、アプリ側でそれぞれのタイムゾーンに合わせて表示されます。旅行中に撮った写真は、旅行先の現地時刻ではなく、選択したタイムゾーンの時刻で表示されます。
写真はアップロードされますか?
いいえ。ZIPファイルはお使いのパソコン上でブラウザが読み込み、修正済みアーカイブも同じパソコンに書き出されます。サーバーには何も送信されません。ページの読み込み後にインターネット接続を切っても、そのまま動作します。