Termuxで動画の撮影時刻を編集する

一般に、ギャラリーアプリでは、撮影日・作成日順にメディアが整列されていますが、この情報はどこに格納されているのでしょうか。動画を編集・圧縮すると、現在時刻で出力ファイルが生成され、ギャラリーアプリで一番上に表示されることがあります。これを元ファイルと同じ撮影日時に並べるため、編集を試みました。

## 実行環境
OS: Android 14 (AQUOS sense7)
ギャラリーアプリ: Google Gallery
編集アプリ(Terminal): Termux

## Termuxのインストールとセットアップ
Termuxは、Android向けターミナルエミュレーターアプリです。
インストールやセットアップは、[こちらの記事](https://qiita.com/kujirahand/items/8e34e05e7296134b55cd)を参考に、少なくとも「[最低限必要なパッケージのインストール](https://qiita.com/kujirahand/items/8e34e05e7296134b55cd#%E6%9C%80%E4%BD%8E%E9%99%90%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)」まで進めてくださればスムーズです。なお、今回の記事で行う範囲内では、Termux APIのインストールを行う必要はありません（自分が行っていません）。

## Exifとexiftool
Exifの説明を以下に示します。
> Exif（Exchangeable image file format）とは、デジタルカメラで撮影した画像データに、撮影時の状況や設定などを表す様々な情報（メタデータ）を添付して一緒に保存するためのデータ形式を定めた規格（ https://e-words.jp/w/Exif.html ）。

Exifは画像データに対するものですが、[動画データに対してもメタデータは設定可能](https://sumizoon.hatenablog.com/entry/2019/04/15/002738)であり、それらは`ExifTool`で閲覧・編集できます。
ExifToolは、Termuxにおいて以下のコマンドでインストールできます。
```
$ apt install exiftool
```
ExifToolで編集したい動画ファイルのメタデータを確認してみましょう（一部抜粋）。
```
$ exiftool 240124_compressed.mp4
ExifTool Version Number         : 12.94
File Name                       : 240124_compressed.mp4
Directory                       : .
File Size                       : 73 MB
File Modification Date/Time     : 2024:09:01 02:00:28+09:00
File Access Date/Time           : 2024:09:01 02:00:21+09:00
File Inode Change Date/Time     : 2024:09:01 02:00:44+09:00
File Permissions                : -rwxrwx---
File Type                       : MP4
File Type Extension             : mp4
MIME Type                       : video/mp4
Media Data Size                 : 72614290
Media Data Offset               : 48
Movie Header Version            : 0
Create Date                     : 0000:00:00 00:00:00
Modify Date                     : 0000:00:00 00:00:00
Time Scale                      : 1000
Duration                        : 0:06:59
Preferred Rate                  : 1
Preferred Volume                : 100.00%
Next Track ID                   : 3
Track Header Version            : 0
Track Create Date               : 0000:00:00 00:00:00
Track Modify Date               : 0000:00:00 00:00:00
Track ID                        : 1
Track Duration                  : 0:06:59
Track Layer                     : 0
Track Volume                    : 0.00%
Image Width                     : 1379
Image Height                    : 776
Buffer Size                     : 0
Max Bitrate                     : 1289745
Average Bitrate                 : 1289745
Video Frame Rate                : 29.97
Matrix Structure                : 1 0 0 0 1 0 0 0 1
Media Header Version            : 0
Media Create Date               : 0000:00:00 00:00:00
Media Modify Date               : 0000:00:00 00:00:00
Media Time Scale                : 48000
Media Duration                  : 0:06:59
Media Language Code             : eng
Megapixels                      : 1.1
Avg Bitrate                     : 1.39 Mbps
Rotation                        : 0
```
このメタデータの撮影時刻に該当する箇所を編集すれば、ギャラリーの時刻にも反映されます。しかし、○○Dateは複数存在するのと、ギャラリー側でキャッシュされて書き換えてもうまく反映されない問題があり、それに気づくのが少し難しかったです。

## 撮影時刻の編集
`Create Date`を書き換えることで撮影時刻を編集できます。今回の目的は、編集後生成ファイルを元ファイルと同じ撮影日時に並べることなので、元ファイルが存在することを想定し、元ファイルのメタデータを適宜コピーする方針で進めていきます。
先に目的のファイルがあるディレクトリに移動しておきます。
```
$ exiftool -overwrite_original_in_place -tagsFromFile 240124.mp4 -CreateDate 240124_compressed.mp4
    1 image files updated
```
このコマンドで`Create Date`を書きかえ、撮影時刻を編集できます（[参考①](https://qiita.com/hiraro/items/ebf94631e9cc89180975)，[参考②](https://www.digitalboo.net/post/7518/a-note-about-exiftool)）。しかし、ギャラリー側でキャッシュされており、反映されない場合があります。その場合は、スマホを再起動したり、動画をディレクトリ移動させたりすると、うまく反映されるようになると思います。

また、他の○○Dateも元ファイルと同じにするなら、以下のコマンドで編集できます。
```
$ exiftool -overwrite_original_in_place -tagsFromFile 240124.mp4 -CreateDate -ModifyDate -TrackCreateDate -TrackModifyDate -MediaCreateDate -MediaModifyDate 240124_compressed.mp4
$ touch -r 240124.mp4 240124_compressed.mp4
```

## まとめ
OSが異なっても使えるところはあると思うので、編集生成した動画の撮影時刻が現在時刻になってモヤモヤする時は、参考になれば幸いです。