|
山ではOlympusのOM-D EM5Mk2で写真撮ってます。山岳写真っていうわけではなく、PCの壁紙で自動切換えで表示したり、Google Photoで見返したりして、下山した後も何度も何度もガムのように山の記憶を楽しむのが目的です。
そこでGPSタグを写真に埋め込んでおけばGoogle Photoとかだとどこで撮影したかが地図で確認できるので面白いというわけで、下山後にレコのマップデータやGPSロガーのGPXファイルのログをexiftoolを使ってタグ打ちしてます。オリンパスアプリのOl. Trackでも同様なことはできるんですが、このアプリを起動しているとスマホのバッテリーを喰うし、何よりまともに動作しないのでもっぱらexiftool。
タグ打ちはコマンドラインになりますが、こんな感じ。
exiftool -api GeoMaxIntSecs=7200 -geotag *.gpx *.jpg *.orf
(exiftoolでタグ操作するときは元の画像データはバックアップしておくことをお勧めします。タグ壊れてもいいけど、オリジナルの画像壊れたら目も当てられないので。)
で、国内で写真撮ってタグ打ちしているだけだとなんの問題もなかったんですが、先月ハワイへいった時に問題発生。
OM-DはOl. Shareというアプリでカメラからスマホに写真データの転送ができるんですが、転送のためにアプリからWi-FiでスマホとOM-Dを接続するとスマホの時刻情報を使ってカメラの時刻設定も自動的に合わせるという親切機能があります。ハワイだとハワイアン標準時(UTC-10)なんですが、スマホ(ASUS Zenfone3)も現地でSIMを入れ替えてやるとキャリアからタイムゾーン情報を取得して時計を現地時間に合わせるという仕様(Zenfone3のUIを見る限り自動設定の場合GPSによるロケーションデータではなくキャリアから情報を取得することになっている)。なので、ハワイに着いてSIMを入れ替えて、そのあとにOl. ShareでOM-DとリンクするとOM-Dの時刻設定がハワイのローカルタイムに変更されることになる。この状態で写真を撮ると、写真のEXIFに埋め込まれる撮影時刻がハワイのローカルタイムになるんですが、ご存じのように日本は日出づる国なのでハワイより日時が進んでる。結果、日本を出る直前に撮った写真(当然JSTで時刻は記録、JSTはUTC+9)とハワイに着いた後にとった写真で日時の逆転現象がおこるというわけです。
ハワイから帰ってきていつものようにGPSタグ打ちをしたんですが、なんかおかしい?写真のロケーションが全然違うところになってる・・・???
と、いうことでいろいろ、いろいろ調べたり、TwitterのOKPさんのTweet見たりしてようやく気が付きました。OM-Dはタイムゾーンなんて知らないで常にローカルタイム記録なのに、GPSはUTCベース。なので、PC(Windows 10なのでTZは意識されている)の時刻とEXIFに記録されている時刻のTZが違っているとGPSタグ打ち(これはGPXの時刻とEXIFの撮影時刻を照合して判断されている)に失敗するのだと。
(この時点で「お前何言ってんの?」いう人が多数いることが予想されますが、気にせず書き続けますよ!)
この時点で「なんだかなぁ・・・OlympusのカメラってTZ越えて撮影することも考慮してないガラパゴスカメラなのかよ・・・ 」とかぶつぶつ考えながら、PCのTZをむりやりハワイ時間に変更してGPSタグをちゃんと打たせて、その時点ではおさめました。ここまでが7月中の話。
で、8月もお盆を過ぎた先週。PCのexiftoolのバージョンアップのついでにこれまでGPSタグ打ちがうまくできてなかったORFファイル(OlympusのRAWファイル)にタグ打ってみるとできるようになっていることを発見(これまで本当にダメだったかは不明ですが・・・)し、いろいろexiftoolで遊んでいるうちに以下のことに気が付きました。
・EXIFの時刻データはローカルタイムで記録される("Date/Time Original", "Create Date", "Modify Date"の3つ)
・GPSタグはUTC("GPS Date Stamp", "GPS Time Stamp")
・MakerタグでOlympus独自タグでなんと撮影時刻がUTCで記録されている("Date Time UTC")
・OS(Windows 10のようなNT系OSのファイルシステム)のFile管理時間はTZ情報が考慮されている。
(Makerタグはメーカー固有のものなので一般的なツールだと見れないはず。Olympus Workspaceでもダメでした。exiftoolだと exiftool -DateTimeUTC で参照できます。)
要はEXIFの日時情報はTZ情報のないLocal Timeだけ※だけど、OlympusさんはちゃんとUTCで時刻を管理していた、ということです。これに基づいて日本で撮った写真やハワイで撮った写真のタグを確認すると、常にDate Time UTCは正しい時刻を示していることがわかりました。Ol. Shareで接続して時刻補正をするときに、ちゃんとTZというかUTCの設定が適切にカメラ側と同期しているようです。天晴。
(※EXIFのタイムゾーン情報サポートは提案され、2016年6月のExif version 2.31でOffsetTime/OffsetTimeOriginal/OffsetTimeDigitizedが仕様として取り込まれている。ただし、本日記記述時点で対応しているメーカーやアプリはない模様。以下私見:ローカルタイムがマスターでTZの扱いがUTCからのoffsetとしている自体仕様が後付け感が濃い。そもそも日本メーカーの寄り合いのJEITA(制定当時はJEIDA)が定めた仕様は国際標準としては二流だとしか言いようがないのだが、今となってはどうしようもない。)
問題はOl. Shareでリンクしなければ現地時間情報にならないこと、スマホのほうも現地のSIMを刺さないと時刻設定が現地のものにならないことがあります。これらを解決するには (1) TZを越えた移動をするときはスマホの時刻は手動で設定変更する。(2) スマホを時刻設定したら、Ol. Shareでデジカメとリンクしてカメラ側の時刻の補正も行う。
これらを実施することで常に撮影時間は現地のローカルタイムで記録されるようになります。なおかつ、カメラ内で管理されているUTCも常に正しいので、最悪Ol. Shareリンクを忘れたとしてもあとでどうにかできるはず。たとえばハワイでの写真はこのコマンドを叩くことでEXIFのタイムスタンプはローカルタイム(HST=UTC-10)、ファイル属性はPCのタイムゾーン(JST=UTC+9)にすることができます。
exiftool "-AllDates<DateTimeUTC" "-FileModifyDate<DateTimeUTC" "-FileCreateDate<DateTimeUTC" filename
exiftool "-AllDates-=10" "-FileModifyDate+=9" "-FileCreateDate+=9" filename
(いったん全部UTCにして、2つ目で時間をシフト。一気にローカルタイムにする手段は見つからなかった。"AllDates"はEXIFの上述の3つの日時タグを意味する疑似タグです。)
ただし、exiftoolでGPSタグ打ちするときはローカルタイムのDateTimeOriginalで判断されているようなので、PCのTZを写真撮った場所のTZに合わせとく必要あります。もしくはPCのTZ変えないのなら、タグ打ちする前にDateTimeOriginalをJSTにシフトさせておくか。
なお、こういうスマホとリンクしない運用をしている場合はカメラ側の時刻設定で変更することになるんだと思いますが、その際にカメラ内部で持っているUTCはどうなるのかは確認していません。
Ref.
Exif v2.31 (CIPA)
http://cipa.jp/std/documents/download_e.html?DC-008-Translation-2016-E
(2019/8/23:exiftoolでの操作を追記)
(2019/9/1:ExifのTZに関する仕様について追記)
(2020/6/30:Exif 2.31について追記)
コメントを編集
いいねした人
コメントを書く
ヤマレコにユーザー登録いただき、ログインしていただくことによって、コメントが書けるようになります。ヤマレコにユーザ登録する