理系学生日記

おまえはいつまで学生気分なのか

写真のファイル名を EXIF の日時付きの名前にリネームするツールつくった

どういうものか

指定ディレクトリ配下の JPEG あるいは HEIC ファイルの日時情報を EXIF から読み取って、YYYYmmDD-HHMMSS.ext というファイルとしてコピーします。 具体的には DateTimeOriginal or DateTime フィールドの値を読み出します。

$ exifnamer -d path/to/dest photoDir

何に使うのか

最近、家庭内で写真をアルバムに物理的に整理しようという機運が高まっていまして、大量の写真データを現像することが増えました。

ご存知の通り、WEB 上で写真データをアップロードすれば現像された写真が郵送されてくるサービスが山のようにあるんですが、その現像された写真が時系列で並びません。 (このあたりをうまいことやってくれるサービスがあれば教えてください)

一方で、アップロードしたファイル名をそのまま写真背面に印字する会社が多い。 ということは、ファイル名を撮影日時にしておけば、裏面に日時情報が印刷されて何とかなるやろという雑な戦略です。

いろいろあった

画像形式

利用者が妻であることを鑑み、Windows 上で動かすために Golang です。 Golang を使って EXIF データを抽出するのには goexif が良さそうで、最初はこれだけを使ってました。

このライブラリは JPEG/TIFF に対応しているんですが、昨今の iPhone で撮った写真は HEIC ファイルになっています。 というわけで、media/heif を使う必要が生じました。

media/heif は内部で goexif を使っているので、そのあたりはあまり困らなくて良かったです。

写真編集アプリで時刻情報が消失する

自分たちで撮った写真を使ってテストをしていたら、なぜか EXIF のデータを抽出できない写真が大量にありました。 どうも、妻が写真編集アプリで編集した写真から、DateTimeOriginal などのフィールドが抜け落ちているっぽい。

当該アプリ自体には、それらの情報が記録はされてはいました(ただし撮影日時=編集日時になっていた)。 しかし、これらは DateTimeOriginal とは別のデータになっているようで、exiftool を使って 解析しても見つからない。 編集した後のファイル名からは日時が分かるので、EXIF から抽出できないファイルはそのまま destination Directory にコピーすることで お茶を濁しました。

というわけで

しばらく使ってみようと思います。