写真ファイルに記録された撮影日時を変更する方法3種類を備忘録。
なお撮影日時を変更したい状況、つまり「ニーズ」としては以下(A)(B)の2つを想定している。
- カメラの時計が狂ったまま撮影してしまったので修正したい
- 家族親戚等から受け取った撮影時刻データの無い写真に日時情報を付けて整理したい
何となく、(A)のニーズの方が多そうかな。自分も困ったことが何度かあるし。
Windowsのエクスプローラを使う
実はWindows 10の場合、OS標準機能でEXIF情報として埋め込まれた撮影「日付」は簡単に変更できる。撮影「時刻」は変更できないようだ。操作方法は次の通り:
- 対象ファイルのあるフォルダを開き、「表示」リボンから「詳細ウィンドウ」を選択して詳細ウィンドウを表示する
- 変更したいファイルを選択する(複数可)
- 詳細ウィンドウ中の「撮影日時」欄をクリックすると編集可能な状態になるので、望みの日付に変更して「保存」ボタンを押す
複数の写真を選択して撮影日時を変更した場合、それらの写真の撮影「日付」は指定した日付に統一され、撮影「時刻」は変更されずに維持される。また、撮影日時の情報が埋め込まれていないJPEGファイルの場合は撮影日時欄に「撮影日の指定」というダミー文字列が表示される。なので同様にそれをクリックすれば撮影日付を変更できる。
想定しているニーズを満たすだろうか?ニーズ(A)については、日単位でしか変更できないので現実的には使えないだろう。ニーズ(B)については、撮影日付を新しく書き込めるので使えないことはない。ただ、撮影時刻が「この方法で日時情報を初めて書き込んだ瞬間の時刻」になる非常に微妙な謎仕様がある。昼間に夜の写真へ撮影日付を書き込むと撮影時刻が昼間になってしまうわけだから、個人的には嫌な感じがする(せめて0時ちょうどとかだったら何となく「ああ時刻は不明なんだな」と解釈できるのに)。
OS標準で使える点は親戚の家で作業する場合などには良いのだけれど、いかんせん中途半端なので「緊急用」としては使えるかもしれない。
Macの写真アプリを使う
Mac (macOS Sierra) では写真アプリで撮影日時を変更できる。なおEXIFでは何種類かの「日時」があるけれど、写真アプリの中では一種類しかない。また撮影日時情報の無い写真ファイルを取り込むと、取り込み日時がその「日時」になる。ここではその日時を撮影日時と呼ぶ。
さて、写真アプリでの操作方法は次の通り:
複数の写真を選択した場合の動作について補足する。たとえば最初の写真の撮影日時を「2017/01/01 10:20:30」から1時間進めて「2017/01/01 11:20:30」に変更したとしよう。この場合、すべての写真の撮影日時が11:20:30に変更されるのではなく、それぞれの写真ごとに「1時間進んだ日時」へと更新される。
想定しているニーズは、撮影日時を秒単位で変更できる上に複数の写真の撮影日時をまとめてシフトできるので、完璧に満たす。
ただし、この操作は「写真」アプリのデータベースを更新しているだけなのでアプリが内部的に持っているオリジナル写真ファイルのEXIFデータは変更されない。そのため、この操作で撮影日時を変更した写真を「未編集のオリジナルを書き出す」機能で書き出すと、そのファイルのEXIFデータは修正前の撮影日時になってしまう。普通に「書き出す」機能を使う場合は問題無いのだけれど、「未編集のオリジナルを書き出す」機能を使う人は要注意。
ExifToolを使う
Phil Harveyさんが開発しているExifToolというコマンドラインツールを使うと、撮影日時を含むEXIFデータを自由自在に取得・削除・変更できる。WindowsでもMacでもLinuxでも使えるし、EXIFのプロパティを直接書き換えるというローレベルな解決策なので自分の性に合う。
コマンドの使い方を一般的に書くと以下のようになり:
$ exiftool -alldates[+-]=DATETIME FILENAME [FILENAME..]
具体的には次のような感じになる:
$ exiftool -alldates="2016-12-31 11:34:04" *.jpg # 特定の日時に変更
$ exiftool -alldates+=1 *.jpg # 1時間だけ進める
$ exiftool -alldates-=1:2:3 *.jpg # 1時間2分3秒だけ昔に戻す
$ exiftool -alldates+="1:2:3 4:5:6" *.jpg # 1年2ヶ月3日と4時間5分6秒だけ進める
細かい補足を2点ほど:
- オプション
-alldates
は次の3種類の「日時」を同時に変更するCreateDate
: 写真ファイルが作成された日時(メモリーカードに書き込まれた日時)ModifyDate
: ファイルが最後に変更された日時DateTimeOriginal
: 写真に記録されている映像の日時(カメラのシャッターが押された日時)
- オプション
-alldates
と日時の間に書く記号により動作が変わる=
を使うと現在の値を無視して上書き+=
を使うと指定した時間だけ現在の値から進めた日時へ変更-=
を使うと指定した時間だけ現在の値から昔に戻した日時へ変更
想定しているニーズは、Macの写真アプリと同じことができることから明らかだけれど、完璧に満たす。
なおExifToolは非常に多くファイル形式に対応しており、RAWデータファイルでも同様に変更できるらしい。
エクスプローラーを使って変更が出来ました。
ありがとうございます。