Contents
概要
GoPro HERO7 BLACK で撮影した動画(mp4)内には、GPS情報が含まれている。
そのGPS情報をgpx形式で抜き出してやると、いろいろ面白いことが出来そうである。
gpx化についての流れは下記が分かりやすい。
GoPro HERO5 Blackで撮影した動画からKMLファイルを抽出してみました
ただし、こちらのサイトで作成されたものはHERO5に対応したものでHERO7で作成した動画に処したところエラーが出て止まってしまうので、HERO7でも使用できるものの作成方法について以後補足する。
(最終的にKML形式に変換しているが、大体のGPS情報入力ソフトはgpxをサポートしているので、途中のgpxの抽出で目標は達成である。)
簡単にまとめると
- ffmpegを使用して元動画(mp4)から、GPMF(GoPro Metadata Format もしくは General Purpose Metadata Format)形式で記録されたセンサーデータ(バイナリ)を分離する
- gopro2gpxというソフトを使用して分離したデータをgpx形式に変換する
折角なので、どのOSでも使えるようにUnixライクな環境で実行できるように話を進める。
その前に、Windowsユーザーには既にgopro2gpxの実行形式(exe)が配布されているので下記をダウンロードの上、動画からgpxファイルを作成する手順からお読みください。(Linux Shell ベースで書かれているので細かいところは脳内補完で対応してください)
http://tailorandwayne.com/download/GPMD2CSV.zip
Windows Subsystem for Linux (WSL)における環境設定
ここではWindows10上で動作するLinux(Ubuntu)サブシステムを使って環境を構築する方法について触れる。Windowsユーザー以外は読み飛ばしてください。
Windows Subsystem for Linux (WSL) のインストールの方法についてはたくさん情報があるので調べてください。
Go言語のインストール
sudo apt update sudo apt install golang
・・・以上。
ちなみに、WSL上からWindowsのCドライブやDドライブへの参照はそれぞれ
/mnt/c
/mnt/d
となる。
gopro2gpxの作成
ここでは、Go言語を用いてgopro2gpxの実行形式を作成する手順を紹介する。Macを含むUNIXライクな環境があってGo言語までインストールされているならここから読めばよい。
必要なパッケージをダウンロードするためにGoではgetコマンドを用いる。そのダウンロード先として環境変数GOPATHであらかじめ指定する必要がある。
ここではホームディレクトリ直下にgoというフォルダを作成して、これをダウンロード先とする。
makedir -p ~/go
実行ファイルを作成したいディレクトリに移動して、下記を入力すると必要なパッケージをダウンロードして実行ファイル(gopro2gpx)が作成される。
export GOPATH=$HOME/go go get github.com/JuanIrache/gopro-utils/bin/gopro2gpx go install github.com/JuanIrache/gopro-utils/bin/gopro2gpx
動画からgpxファイルを作成する手順
ffmpeg と gopro2gpx が揃っていればここから読めばよい。
とりあえず作成
話を簡単にするためにgopro2gpxと処理する動画(ここではGH010047.MP4とする)はカレントディレクトリにあるとする。
ffmpeg -y -i GH010047.MP4 -codec copy -map 0:3 -f rawvideo GH010047.bin ./gopro2gpx -i GH010047.bin -o GH010047.gpx
いろいろと警告が出てきて、もやっとするが、gpxが作成されていれば成功である。
gopro2gpx のオプションについて補足
Usage of ./gopro2gpx: -a int Optional: GPS accuracy threshold, defaults to 1000 (default 1000) -f int Optional: GPS fix state. Defaults to 0 (no fix), can be 2 (2D) or 3 (3D) (default 3) -i string Required: telemetry file to read -o string Required: gpx file to write
スイッチ | 入力値 | 内容 | 初期値 |
-a | <数値> | 許容するGPSの精度閾値 小さいほど精度が高い | 1000 |
-f | <数値> | GPSの測位モード? | 3 |
-i | <入力ファイル名> | メタデータの記録されているファイル | |
-0 | <出力ファイル名> | GPX形式のファイル |
使いやすいようにシェルにする(任意)
エディタ等で extract_gpx.sh と名付けて下記を作成
2行目のGOPRO2GPX_FILEに作成したgopro2gpxをフルパスで記入
#!/bin/sh GOPRO2GPX_FILE=~/bin/gopro2gpx if [ $# -lt 1 ]; then echo "Usage: $0 <input_movie_file> [<output_dir>]" exit 1 fi IN_FILE_EXT=$1 IN_FILE=${IN_FILE_EXT##*/} IN_BASE=${IN_FILE%.*} OUT_DIR=${IN_FILE_EXT%/*} if [ $# -ge 2 ]; then OUT_DIR=$2 fi ffmpeg -y -i "${IN_FILE_EXT}" -codec copy -map 0:3 -f rawvideo "${OUT_DIR}/${IN_BASE}.bin" ${GOPRO2GPX_FILE} -i "${OUT_DIR}/${IN_BASE}.bin" -o "${OUT_DIR}/${IN_BASE}.gpx"
使用方法:
./extract_gpx.sh <元動画ファイル> [<出力先フォルダ>]
使用例:
./extract_gpx.sh “/mnt/d/Videos/GoPro/20181015/GH010047.MP4” “/mnt/d/GPX”
作成したgpxの確認
得られたgpxは下記のサイトにて正しく抽出できたか確認できる。
技術参考
- Parser for GPMF™ formatted telemetry data used within GoPro® cameras.
- Tools to parse metadata from GoPro Hero 5 cameras
- EXTRACT SENSOR DATA FROM GOPRO VIDEOS