先日ポタリングに行ったのですが,その時持っていったカメラの時計が初期化されてしまっていてオフセットが6年半以上ありました.
(予備バッテリーが死んでバッテリー充電中に情報が初期化されてしまう)
これを正確な撮影時間に変更します.いつもはexiv2
で設定していたのですが,今回これではうまく行かなかったのでexiftime
コマンドで設定しました.
先ずカメラ内時計と実際の時計の差分を求めます.正確な時間を撮影(今回はNICTのJST Clockを撮影)した結果はこんな感じでした.
$ ls --full-time DP1M0608.JPG-rw-r--r-- 1 mk mk 9043186 2012-01-02 10:27:01.000000000 +0900 DP1M0608.JPG
写真に写った時間 -> 2018-07-17 07:32:00
それぞれUNIX EPOCに変換して引き算をすると差分は206312699
秒でした.
$ date +%s -d '2012-01-02 10:27:01'1325467621$ date +%s -d '2018-07-17 07:32:00'1531780320$ expr 1531780320 - 1325467621206312699
いつも使っているexiv2
コマンドにこの秒を指定して修正しようとしたら日付がおかしくなってしまいました.
$ cp -p ./DP1M0608.JPG /tmp/DP1M0608.JPG$ exiv2 -a +206312699 /tmp/DP1M0608.JPG$ exiftime /tmp/DP1M0608.JPGexiftime: field count mismatch (DateTime)exiftime: field count mismatch (DateTimeOriginal)exiftime: field count mismatch (DateTimeDigitized)exiftime: field count mismatch (ImageUniqueID)/tmp/DP1M0608.JPG: no timestamps available$ exif /tmp/DP1M0608.JPG|grep -i dateDate and Time |25548:01:17 21:27:01Date and Time |2012:01:02 10:27:01Date and Time (Origi|25548:01:17 21:27:01Date and Time (Digit|25548:01:17 21:27:01
manを確認すると,秒だけの指定は駄目でちゃんと計算して指定しないといけないようです.そして日またぎ以上は指定できないような感じです.これまではせいぜい数秒から数分しかずれなかったので気づきませんでした…….
-a timeTime adjustment in the format [-]HH[:MM[:SS]]. This option is only used with the 'adjust' action. Examples: 1 adds onehour, 1:01 adds one hour and one minute, -0:00:30 subtracts 30 seconds.
計算するのが面倒なので差分を秒で指定できるツールはないだろうかと探してみると,exiftags
packageのexiftime
が使えそうです.
If val is numeric, one of either y, m, w, d, H, M, or S must be used to specify which part of the date is to be adjusted.
実際に試してみます.
念の為ファイルを/tmpにコピーして先ずはこれで試します.
$ cp -p ./DP1M0608.JPG /tmp/DP1M0608.JPG$ exiftime /tmp/DP1M0608.JPGexiftime: field count mismatch (ImageUniqueID)Image Created: 2012:01:02 10:27:01Image Generated: 2012:01:02 10:27:01Image Digitized: 2012:01:02 10:27:01
-v
でオフセットを指定します.今回は+206312699S
で206312699秒
進めます.
$ exiftime -v +206312699S /tmp/DP1M0608.JPGexiftime: field count mismatch (ImageUniqueID)Image Created: 2018:07:17 07:32:00Image Generated: 2018:07:17 07:32:00Image Digitized: 2018:07:17 07:32:00
大丈夫そうです.
-v
だけでは実際は書き換わりません-w
で実際にexifを書き換えます.
$ exiftime -v +206312699S -w /tmp/DP1M0608.JPGexiftime: field count mismatch (ImageUniqueID)adjust time created in /tmp/DP1M0608.JPG from2012:01:02 10:27:01 to 2018:07:17 07:32:00? (y/n [n]) yImage Created: 2012:01:02 10:27:01 -> 2018:07:17 07:32:00adjust time generated in /tmp/DP1M0608.JPG from2012:01:02 10:27:01 to 2018:07:17 07:32:00? (y/n [n]) yImage Generated: 2012:01:02 10:27:01 -> 2018:07:17 07:32:00adjust time digitized in /tmp/DP1M0608.JPG from2012:01:02 10:27:01 to 2018:07:17 07:32:00? (y/n [n]) yImage Digitized: 2012:01:02 10:27:01 -> 2018:07:17 07:32:00$ exiftime /tmp/DP1M0608.JPGexiftime: field count mismatch (ImageUniqueID)Image Created: 2018:07:17 07:32:00Image Generated: 2018:07:17 07:32:00Image Digitized: 2018:07:17 07:32:00
exiftool
コマンドでファイルのタイムスタンプも修正します.
$ exiftool "-FileModifyDate<DateTimeOriginal" /tmp/DP1M0608.JPGWarning: Bad PrintIM size - /tmp/DP1M0608.JPG1 image files updated$ ls --full-time /tmp/DP1M0608.JPG-rw-r--r-- 1 mk mk 9043186 2018-07-17 07:32:00.000000000 +0900 /tmp/DP1M0608.JPG
OKそうです.
本番のファイルを一気に書き換えてみます.
確認メッセージが出ないようexiftime
に-f
オプションを付けています.
$ exiftime -v +206312699S -w -f ./*.JPG./DP1M0537.JPG:exiftime: field count mismatch (ImageUniqueID)Image Created: 2012:01:01 08:46:51 -> 2018:07:16 05:51:50Image Generated: 2012:01:01 08:46:51 -> 2018:07:16 05:51:50Image Digitized: 2012:01:01 08:46:51 -> 2018:07:16 05:51:50./DP1M0538.JPG:exiftime: field count mismatch (ImageUniqueID)Image Created: 2012:01:01 08:55:16 -> 2018:07:16 06:00:15Image Generated: 2012:01:01 08:55:16 -> 2018:07:16 06:00:15Image Digitized: 2012:01:01 08:55:16 -> 2018:07:16 06:00:15:$ exiftime -v +206312699S -w -f ./*.X3F:
更に,gpscorrelate
でジオタグを埋め込みます.
$ gpscorrelate -g ./2018-07-16鹿屋ポタ.gpx -z +9 -n *.JPG$ gpscorrelate -g ./2018-07-16鹿屋ポタ.gpx -z +9 *.JPG
最後にファイルのタイムスタンプを修正します.
$ exiftool "-FileModifyDate<DateTimeOriginal" ./*
うまく行ったようです :)
環境
$ dpkg-query -W exiv2 exiftags exifexif 0.6.21-2exiftags 1.01-6build1exiv2 0.25-3.1ubuntu0.18.04.1$ lsb_release -dDescription: Ubuntu 18.04.1 LTS$ uname -mx86_64