GoPro HERO7 で撮影した動画からGPS情報をgpxファイルとして抜き出す方法

概要

GoPro HERO7 BLACK で撮影した動画(mp4)内には、GPS情報が含まれている。
そのGPS情報gpx形式で抜き出してやると、いろいろ面白いことが出来そうである。

gpx化についての流れは下記が分かりやすい。

GoPro HERO5 Blackで撮影した動画からKMLファイルを抽出してみました

ただし、こちらのサイトで作成されたものはHERO5に対応したものでHERO7で作成した動画に処したところエラーが出て止まってしまうので、HERO7でも使用できるものの作成方法について以後補足する。

(最終的にKML形式に変換しているが、大体のGPS情報入力ソフトはgpxをサポートしているので、途中のgpxの抽出で目標は達成である。)

簡単にまとめると

  1. ffmpegを使用して元動画(mp4)から、GPMF(GoPro Metadata Format もしくは General Purpose Metadata Format)形式で記録されたセンサーデータ(バイナリ)を分離する
  2. 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は下記のサイトにて正しく抽出できたか確認できる。

GPS Visualizer

技術参考

  1. Parser for GPMF™ formatted telemetry data used within GoPro® cameras.
  2. Tools to parse metadata from GoPro Hero 5 cameras
  3. EXTRACT SENSOR DATA FROM GOPRO VIDEOS