jpegを劣化させずにgeotagにデータを追加できるか、という命題はなかなかに難しいことがわかってきました。
すぐに使えそうなソフトをいくつか試してみました。
1) geotag phots pro 2
geotagを埋め込むと少しファイルサイズが小さくなります。それよりも面倒なのは、gps babelなどで出力したgpxファイルの処理をしようとするとフォーマットが正しくない、といってエラーになることです。どうやら、geotag photosでロッギングしたgpxしか処理しないというケチな仕様のようです。gpx形式のファイルは単なるxmlデータなのでエディタで中身が読めますので、いろいろと試行錯誤をして調べた結果、どうやら、geotag phtos proはgpxタグの部分がgeotag photosによって書き出されたものかどうかを読んで処理するかどうかを判定しているようです。なので、サンプルとしてgeotag photos proで書き出したgpxファイルを見てみて、それと同じになるようにすれば普通に処理ができます。
実にみみっちぃソフトでgpxタグを書き直す手間が惜しいというよりも、その心の狭さで使う気が失せます。
2) Nikon ViewNX-i
Nikonが自社製カメラのユーザー向けに配布しているソフトですが、ダウンロードすれば無料で誰でも使えます。このソフトの前のバージョンであるViewNX2ではgoogle mapの仕様が変わって地図表示ができなくなったため機能をフルに使えなくなってしまいました。ViewNX2時代は位置情報はgeotagにちゃんと上書きされていたのですが、新しいViewNX-iでは、位置情報を保存したファイルを別に出力して、もとの写真データには手を付けないという仕様に変わっていました。当然、ほかのソフトでは位置情報を参照できないのでまったくなんの役にも立ちません。そもそも、ViewNX-iが未来永劫使える、という保証はないのに自社ソフト以外で使えないようにしてしまう、という発想はダメソフトの典型的なパターンです。jpegデータが劣化するかどうか、という以前の問題でソフトの設計そのものが到底受け入れられません。
3) Playmemories Online
Sonyの画像、動画処理の統合ソフトのようです。GPSロガーであるGPS-CS3Kにはもともと、GPS Image Trackerというソフトがついていましたが、そのソフトがPlaymemories Onlineに統合されて、メニューのツールからGPS Image Trackerを選んで使うようになっています。しかも、GPS-CS3KをPCにUSB接続してPlaymemoriesから認識されないと動作しないようになっているようです。Sonyにありがちな俺様仕様で、ケチっぷりがなんともいえません。このソフトでGPSログをロガーから直接読み込んで処理すればちゃんとexifが上書きされて位置情報が追加されます。しかし、ファイルサイズはオリジナルより減っており、いったんjpegを伸長して再度圧縮しているように思えます。ファイルサイズはオリジナル(Pentax K-1iiの出力で10MB前後)と比較して200KBほど減っています。
結局、画質を劣化させないでexifを書き直せるソフトはまだ見つかっていません。それならJpeg GPX Mergerを使えばよいって話になってしまいます。あるいは、exif toolを使って自分でアプリケーションを書けってことなんでしょう。うーむ...
というわけで今回も結論なし、です。
GPS-CS3Kでgeotag
SonyのGPS-CS3KというGPSロガーを使っているのですが,このロガーの良いところは,デジカメで写真を撮って,SDカードをCS3Kに突っ込むとgeotagを書き込んでくれる,という点にあります。カメラの時計が狂っていたらどうしようもないのですが,写真を撮る前にカメラの時計をあわせておきさえすればGPSをもたないカメラで撮った画像にPCを使うことなく位置情報を書き込めるのでとても重宝しています。
ただCS3Kにもいろいろと不便なところもあって,ひとつには古くてGPSエンジンの性能がいまいちで位置精度があまり高くないこと,Sony製のデジカメ以外で記録した画像ファイルにはgeotagを書き込めないことがある,というのがちょっちょ困ったところです。前者については後継機が出る気配もないのでどうしようもない感じです。後者については,Sony製のα7Sでは当然のことながら問題なく書き込みができますし,Canon製のPowerShot G7X (初代)もうまく書き込みができます。しかしFujifilm製のX70はダメで書き込みエラーになってしまいます。何がどのように気に入らないのかわかりませんが,X70はダメなのです。
台湾に出張した時にG7Xを膝に置いて昼食をとるというような横着をした結果,油がぼたぼたレンズガードに落っこちて,電源を入れてもレンズガードがちゃんと開かなくなる,ということになってしまいました。お前は子供か,というレベルの情けない話ですが,頑張って油を紙で吸い取って,ある程度は復活させたのですが,それでも,レンズガードの隙間に入った油はとれず,そのためにレンズガードが完全に開かないことがあります。ちょっと指で押せば完全に開くので使えないわけではないのですが,仕事で使うには,こういうところにいちいち気を使わなければならないのは本末転倒で使い物になりません。そのため,G7XはGPS-CS3Kとの相性もよくてずっと使ってきたのですが,仕事の一線からはリタイアさせざるをえなくなりました。
G7Xは新型のMk3が出るという噂もあるところなで,新しくMk2を新調するのもいまひとつ盛り上がらず,手元にあるFujifilmのX70を当面は使うことにしました。ところが,残念ながらCS3Kとの相性が悪く,PCを使ってgeotagを入れなくてはなりません。それにはいろいろと手間がかかります。その手順を忘れないように,メモしておこう,という話です。前置きが長すぎ。
準備として,GPSBabelをインストールします。このソフトはGPSのデータフォーマットを変換するためのものです。また,Java JDKをインストールした上で,Jpeg GPX Mergerをもらってきます。JDKがインストールされて入ればJpeg GPX Mergerはファイルをダブルクリックするだけで動きます。
手順は以下の通りです。
1) GPS-CS3KはusbでPCにつなぐとmass strageとして見えるのでPCに普通にマウントできます。データは拡張子がlogのテキストファイルなのでPCにコピー。
2) ここに書かれているようにGPS Babelでlogファイルを指定して,フォーマットをNMEA 0183 sentencesとして読み込みます。出力はGPXとします。このサイトでは,一行目を編集するということになっていますが,特にそのような作業は不要でした。
3) Jpeg GPX Mergerを立ち上げて上で変換したgpxファイルを読み込み,マージすればgeotagが書き込まれます。ツールメニューからカメラの時計のズレを補正するための時間差を指定することができます。また,geotagを書き込む前のファイルをバックアップすることもできますが,geotagの書き込み前後のファイルサイズを比較すると書き込み後のほうが小さくなっているので,一度jpegを伸張して再圧縮しているものと思われます。当然ですが,画質は劣化していると思われます。もちろん見た目ではほとんどわかりませんが...。
画質を落とさずgeotagだけを直接書き込む方法があるかどうか,もう少し調べてみようと思います。
ただCS3Kにもいろいろと不便なところもあって,ひとつには古くてGPSエンジンの性能がいまいちで位置精度があまり高くないこと,Sony製のデジカメ以外で記録した画像ファイルにはgeotagを書き込めないことがある,というのがちょっちょ困ったところです。前者については後継機が出る気配もないのでどうしようもない感じです。後者については,Sony製のα7Sでは当然のことながら問題なく書き込みができますし,Canon製のPowerShot G7X (初代)もうまく書き込みができます。しかしFujifilm製のX70はダメで書き込みエラーになってしまいます。何がどのように気に入らないのかわかりませんが,X70はダメなのです。
台湾に出張した時にG7Xを膝に置いて昼食をとるというような横着をした結果,油がぼたぼたレンズガードに落っこちて,電源を入れてもレンズガードがちゃんと開かなくなる,ということになってしまいました。お前は子供か,というレベルの情けない話ですが,頑張って油を紙で吸い取って,ある程度は復活させたのですが,それでも,レンズガードの隙間に入った油はとれず,そのためにレンズガードが完全に開かないことがあります。ちょっと指で押せば完全に開くので使えないわけではないのですが,仕事で使うには,こういうところにいちいち気を使わなければならないのは本末転倒で使い物になりません。そのため,G7XはGPS-CS3Kとの相性もよくてずっと使ってきたのですが,仕事の一線からはリタイアさせざるをえなくなりました。
G7Xは新型のMk3が出るという噂もあるところなで,新しくMk2を新調するのもいまひとつ盛り上がらず,手元にあるFujifilmのX70を当面は使うことにしました。ところが,残念ながらCS3Kとの相性が悪く,PCを使ってgeotagを入れなくてはなりません。それにはいろいろと手間がかかります。その手順を忘れないように,メモしておこう,という話です。前置きが長すぎ。
準備として,GPSBabelをインストールします。このソフトはGPSのデータフォーマットを変換するためのものです。また,Java JDKをインストールした上で,Jpeg GPX Mergerをもらってきます。JDKがインストールされて入ればJpeg GPX Mergerはファイルをダブルクリックするだけで動きます。
手順は以下の通りです。
1) GPS-CS3KはusbでPCにつなぐとmass strageとして見えるのでPCに普通にマウントできます。データは拡張子がlogのテキストファイルなのでPCにコピー。
2) ここに書かれているようにGPS Babelでlogファイルを指定して,フォーマットをNMEA 0183 sentencesとして読み込みます。出力はGPXとします。このサイトでは,一行目を編集するということになっていますが,特にそのような作業は不要でした。
3) Jpeg GPX Mergerを立ち上げて上で変換したgpxファイルを読み込み,マージすればgeotagが書き込まれます。ツールメニューからカメラの時計のズレを補正するための時間差を指定することができます。また,geotagを書き込む前のファイルをバックアップすることもできますが,geotagの書き込み前後のファイルサイズを比較すると書き込み後のほうが小さくなっているので,一度jpegを伸張して再圧縮しているものと思われます。当然ですが,画質は劣化していると思われます。もちろん見た目ではほとんどわかりませんが...。
画質を落とさずgeotagだけを直接書き込む方法があるかどうか,もう少し調べてみようと思います。