GPS機能の無いデジカメで撮った写真ファイルのEXIF情報に位置情報を追加する安価なやり方(Mac & CUIツール版)

普段の写真は iPhone 6s で満足なのですが、ときどき優秀な望遠ズームとマクロが欲しい @riocampos です。
今はずっと前に妻が買った

を使っています。色が微かな緑色なのと、コケ写真を撮影する為に 1cm マクロを目的に選んだこともあり、我が家では「もすもす」との愛称で呼んでいますw*1

デジカメにGPS機能なんてほとんど無い時代でしたね

高級機種には GPS 機能が載っていたのですが、さすがにコンパクトデジカメにまでは GPS が載っていない時代。 iPhone で撮影すると勝手に位置情報が加わるのに「もすもす」で撮影すると位置情報が分からない。それを写真.appで同じように扱うと、すこし辛い。位置検索できないし。

EXIF情報を後から追加するソフトもあるけどね

以前、iPhone でのトラックログMac で見るときには myTracks - The GPS solution for iOS and macOS というアプリを使っていました。この myTracks を使うと写真ファイルにも位置情報を追加出来たのです。ただし。「以前」というのは、このアプリがまだ無料だった時代のこと。今は有料アプリになりました。まあ有料でも良いのだけど、ただ機能的に $17.99 は高いのではと感じるのですよ。セコいのだけど。
Windows ユーザーであれば カシミール3D / 風景CGと地図とGPSのページ があるので何も考える必要はありませんな。しかも位置情報を埋め込むための デジカメプラグイン もありますので、この記事自体が要らないw

素晴らしき神ツールExifTool

ということで何らかの優秀な CUI ツールが存在しないかなーと探したところ、当然のように存在していました。
ExifTool by Phil Harvey
というか、世の中の EXIF が扱えるほとんどの GUI アプリは ExifTool を使っている、ような気もします*2
しかも超優秀なツールなので、経度緯度の直接設定でも、トラックログのデータから位置補完しての設定でも、いろいろと位置情報を設定することが可能。そして…無料。素晴らしい。神ツールと呼ぶに相応しい。

前振りが長くなりました

ということで ExifTool を使って位置情報を追加する方法を(自分用に)記録しておきます。

ExifToolをインストールする

上記サイトからインストールすれば良いです。ただし Homebrew を使っているのであれば

$ brew install exiftool

するのがラクでいいです。しかも ExifTool は更新が頻繁に行われるので、メンテナンス性の面からも Homebrew でのインストールをオススメします。

緯度経度での位置指定

まずは、写真に埋め込みたい位置の緯度経度を求めます。

などの Web サービスを使うのが便利です。
もしくはGoogle Mapsでも若干の手間をかければ求められます。

場所の座標を調べる
  1. パソコンで Google マップを開きます。Google マップをライトモードで使用中で、画面下部に稲妻のアイコンが表示されている場合は、場所の座標を表示できません。
  2. 地図上の目的の場所を右クリックします。
  3. [この場所について] を選択します。
  4. 画面下部のカードに座標が表示されます。

緯度と経度の確認、入力 - パソコン - マップ ヘルプ

例えば大阪城

大阪城 座標(WGS84) 緯度: 34.687315 経度: 135.526201

Lat Long
(34.687315, 135.526201)
GPS Coordinates
34° 41' 14.334'' N
135° 31' 34.3236'' E
Latitude and Longitude Finder on Map Get Coordinates

二つのサービスとも同じく「緯度: 34.687315 経度: 135.526201」になりました。
ではこれを写真一枚、もしくは複数の写真に設定します。念のために大元の写真ファイルではなく、コピーした写真ファイルを使いましょう。
今回は写真10ファイルが入ったディレクトリを指定しています。写真一枚なのであれば、ファイルパスを直接指定すれば良いです。

$ exiftool -P -overwrite_original -gpslatitude=34.687315 -gpslongitude=135.526201 /Users/riocampos/Pictures/100RICOH/
    1 directories scanned
   10 image files updated

さて。ExifTool のオプションについて順番に簡単に説明します。

-P-preserve
位置情報を埋め込んだ処理後の写真ファイルの変更日を元の写真ファイルと同じままにします。このオプションを指定しないと、処理後の写真ファイルの変更日が ExifTool のコマンド実行日時になります。
-overwrite_original
位置情報を埋め込んだ処理後の写真ファイルで、元の写真ファイルに対して上書きします。今回は上記したようにコピーした写真ファイルを使っているのでこのオプションを使っています。
なお、上書きしない場合には処理後の写真ファイルが元ファイルと同じフォルダに書き出されます。
処理後の写真ファイルを他のディレクトリに書き出す場合は -o-out)オプションを指定して、その引数に出力先ディレクトリを指定してください(ディレクトリなので末尾の/を忘れないように)。

-gpslatitude=XX.XXXX (または -exif:gpslatitude=XX.XXXX
-gpslongitude=YYY.YYYY (または -exif:gpslongitude=YYY.YYYY
緯度経度の指定。オプション名を読めば分かりますよね*3
おまけとして

-v
verbose オプションです。以下のような感じで進行状況を表示してくれます。たくさんのファイルを変更するときには作業してるのかどうなのか気になるので、このオプションを付けておくと良いでしょう。
======== /Users/riocampos/Pictures/100RICOH/RIMG0001.JPG
Rewriting /Users/riocampos/Pictures/100RICOH/RIMG0001.JPG...
  Editing tags in: APP0 APP1 GPS IFD0 JFIF MIE-GPS XMP 
JPEG APP1 (xxxxx bytes):
  Rewriting IFD0
  Rewriting ExifIFD
  Rewriting MakerNoteRicoh
  Rewriting ImageInfo
  Rewriting RicohSubdir
  Rewriting FaceInfo
  Rewriting FirmwareInfo
  Rewriting SerialInfo
  Rewriting InteropIFD
  Creating GPS
  Rewriting IFD1
JPEG APP2 (xxx bytes):
JPEG DQT (xxx bytes):
JPEG SOF0:
JPEG DHT (xxx bytes):
JPEG SOS

そして ExifTool はコマンドの末尾に処理目的のファイルパスを指定します。

追記:Error: [minor] Bad format (512) for MakerNotes entry 0 などという MakerNotes エラーが出て位置情報が追加出来ない場合には

[minor] と書いてありますし、焦らず騒がずマイナーエラーを無視する -m オプションで対応しましょう*4
詳細は 15. "I get MakerNote warnings or errors when reading or writing information"|ExifTool FAQ をお読みください。

本当はトラックログデータのことを書くつもりだったが疲れたので一旦ここまで

例示するとこんな感じ。この場合はkmlファイルですけど、gpxファイルでも大丈夫。

$ exiftool -P -overwrite_original -geotag /Users/riocampos/Downloads/history-2018-08-07.kml /Users/riocampos/Downloads/100RICOH

そのうちに ExifTool のオプションについての解説記事が書ければいいなあ。高機能でしかも無料なので、みんなで使いましょうね。

2021/5/25 追記

まだ GPS なしコンパクトデジカメで撮影したものに exiftool で GPS 情報を付加しております。その際には SD カードを Mac に接続してオリジナル画像で更新し、 iPhone にSD カードリーダを繋いで読み込ませています。その際に使うリーダは純正のこちら ↓

Apple Lightning - SDカードカメラリーダー

Apple Lightning - SDカードカメラリーダー

  • 発売日: 2015/12/10
  • メディア: Wireless Phone Accessory
で、今日はいつも通りにその作業をした後に、ちょっと Mac へ書き出ししたのですが、コンパクトデジカメで撮影した画像の日付などが iPhone への読み込みをした時刻になってしまっていました。これはうれしくない。でも exif データには撮影時刻も入っているわけで、その情報を使えばファイルの日時も簡単に修正出来ました。

$ exiftool "-FileModifyDate<DateTimeOriginal" *.JPG

やはりありがたいツールです> exiftool 。
(参考:exiftoolでファイルの変更日時を写真の撮影日にする方法 - Qiita

2021/5/25 追記2

兄から送られてきた写真が回転されずに保存されていたのだけど、きっと exif データの回転指定だけで何とかなるだろうと思って検索したところ、やはり exiftool で解決出来ました。

$ exiftool -P -overwrite_original -Orientation=6 -n RIMG0001.JPG # 6:時計回り90度
$ exiftool -P -overwrite_original -Orientation=8 -n RIMG0002.JPG # 8:反時計回り90度

参考サイト:

おまけ

クセのあるデジカメが好きなので、現時点だとこのあたりがいいなあ*5

*1:ああもう2011年の機種なんだなあ、かなり古いよなあ…

*2:本当かどうか分からんけど

*3:なお緯度経度は北緯と東経が正の値。日本国内であれば両方とも常に正の値。南半球であれば緯度が負の値、アメリカ大陸とか西半球であれば経度が負の値。上記 Web サービスを使えば出力値をそのまま使えば良いのでラクチンです。

*4:当方では、カメラから移動させただけのはずなのに、なぜか撮影時刻と違う変更時刻になっていたファイルが居て、そいつがこのエラーを吐きました。

*5:DSC-RX100M6やM7 は絶対買えないだろうがw