インターバル撮影したJPEGファイルからGPSログデータを抽出する方法
GPS付きアクションカムでインターバル撮影を行うと、位置情報付きのJPEGファイルがたくさん作成されます。 これを利用して、インターバル撮影中の行動ログをGPSデータとして利用できるようにします。
実行環境
Windows 10 Pro 64bit 日本語版を使用。下記のGPSBabelが実行できる環境なら、他のOSでも実行できると思います。
Linux, Macな環境ではバッチ動かないので、似たようなスクリプトを書いてください。
準備
GPSBabelを使用します。インストール方法などはサイトの説明に従って下さい。
変換方法
GPSBabelは、Exifデータ付きのJPEGファイルも入力ファイルにすることが出来ます。このため、JPEGファイルから直接、任意のログデータに変換することが可能です。
しかし、インターバル撮影したファイルは大量です。撮影間隔と時間によりますが、1000枚を超える場合もあります。 GPSBabelには複数のJPEGファイルを入力することもできますが、コマンドライン引数の長さに制限がある環境だと、1000枚、2000枚といったJPEGファイルを扱うことができません。
これを解決するため、以下のように変換を行います。
- バッチファイルなどで、ディレクトリ内のファイルをリストアップする。このとき、ファイル名や撮影時間などでソートし、位置データの順序がおかしくならないようにする。
- 画像ファイルをひとつずつNMEAフォーマットデータに変換し、一時ファイルに追記していく。
- 一時ファイルを任意のファイルフォーマットに変換し、GPSデータとして利用できるようにする
追記に適しているため、中間フォーマットにNMEAを使用しています。
NMEAフォーマットのみが必要であれば、2. の手順まででOKです。今回はGoogle Earthで閲覧したいので、KMLに変換するところまでやります。
バッチファイル
以下のようなバッチファイルを用意して、実行します。Linux, Macな環境では動かないので、シェルスクリプトとかに書き換えてください。
@echo off SET GPSBABEL="C:\Program Files (x86)\GPSBabel\gpsbabel.exe" SET INPUT=%~f1 SET OUTPUT=%~f2 SET TEMPFILE=%~p2__temp__.txt IF EXIST "%TEMPFILE%" ( ECHO 前回の一時ファイルが残っています。 DEL /P "%TEMPFILE%" ) IF EXIST "%TEMPFILE%" ( ECHO 一時ファイルを削除しませんでした。処理を終了します。 GOTO :EOF ) IF EXIST "%OUTPUT%" ( ECHO 出力ファイルがすでに存在するため、処理を終了します。 GOTO :EOF ) ECHO 一時ファイルを作成しています... FOR /f "eol=: delims=" %%F IN ( 'dir /b /a-d /one "%INPUT%\*.jpg"' ) DO ( %GPSBABEL% -w -i exif -f "%INPUT%\%%F" -x transform,trk=wpt -o nmea -F - >> "%TEMPFILE%" ECHO %%F を変換しました ) ECHO 一時ファイルをKML形式に変換しています... %GPSBABEL% -t -i nmea -f "%TEMPFILE%" -x transform,trk=wpt,del -o kml -F "%OUTPUT%" ECHO KMLファイルの作成を完了しました。(%OUTPUT%)
上記のバッチファイルをbabel_batch.batとして保存した場合、以下のように実行します。
babel_batch.bat (入力ディレクトリ) (出力ファイル名)
実行が完了したら、出力ファイル名として指定したパスにKML形式のファイルが作られます。