GoPro HERO10の動画(mp4)からGPSデータ等を抽出する方法(調査編)

まずは撮ってみる

GoPro HERO10を入手したのでちょこっと撮影してみました.設定項目はたくさんあるんですが,とりあえずデフォルトで撮ります.

夜間撮影の性能を見たかったわけではないのですが,時間的に夜になってしまいました.

綺麗に撮れてますね.カメラとか詳しいわけではないので,今のところ素直に満足です.手持ちで撮ってますが,水平も結構いい感じでキープしてくれているみたいです.色んな機能や撮影モードがあります.詳しくは公式ページやYouTubeでもたくさん撮影例が出てますので,真似して色々試してみようと思います.

センサデータの活用

このGoProですが,撮影だけではなくて,GPS,加速度センサ,ジャイロ等々のセンサが搭載されていて,動画(mp4)ファイルの中にメタデータとして格納保存されるようです.

ということで,センサデータを格好よくオーバーレイして,スピードメータ付きとか軌跡付きの動画なんかがよくアップされています.例えば

とかで紹介されています.格好いいし楽しそうです.こんな感じで,車窓と速度と地図なんかを同時に表示した動画をよく目にします.

上のナシタカブログさんとかRENTRY NOTEさんの記事では,GoPro純正のアプリ「Quick」の「Gauges(ゲージ)」という機能が紹介されています.Gaugesのフル機能を使うには「Quick」のPCデスクトップ版アプリが必要とのことなので,インストールしようと思いましたが,デスクトップ版はすでに開発終了になっているみたいです.

スマホ(タブレット)でもGaugesは使えるみたいですが,実はスマホとGoProのWifi (+Bluetooth)接続になかなか手間取りました.試行錯誤で繋がることは繋がりましたが,その後何度かテストしてみたところ,接続できたりできなかったりで,なかなかサクッといかないので,とりあえずGaugesは保留にします.また時間のあるときに試してみたいと思います.

その他の方法は?と探してみると,GoProサポートハブのGoPro Support Hub/GoPro Telemetry (GPS, overlays, visualization…)に色々情報が出ています.その中でも

がよくまとまっていると思います.ざっと見ていくと,色んなアプリやツールが公開されているのが分かります.が,しかし,クールなのはほぼ有料のようです.

GPSデータを抽出するには

本当に綺麗な表示で格好良くオーバーレイさせたかったら,気に入ったものを購入すれば良いのですが,まぁGoPro使い始めの,ただの趣味の範囲ですし,なかなか躊躇します.それに,GPSや各種センサのデータが取れるなら,データそのものを取り出して使えないかな?となるので,まずはGPSデータをmp4から抽出してみることにします.

「GoPro」+「GPS」+「データ抽出」とかで調べてみると,結構出てきます.例えば:

  1. GoProのmp4データからgpxを取り出す(windows10)
  2. GoPro HERO7 で撮影した動画からGPS情報をgpxファイルとして抜き出す方法
  3. gopro_gps_dumper
  4. GoPro Metadata Format Parser + GPMD2CSV
  5. TELEMETRY EXTRACTOR for GoPro

1と2は,動画編集用の強力なツール「FFMpeg」と,「gopro2gpx」というツールを組み合わせてgpx形式やkml形式で抽出する方法です.FFMpegで動画ファイルからメタデータのみ(バイナリ)を取り出し,「gopro2gpx」でgpxやkml形式にして書き出すという流れです.ffmpegは実行形式も配布されていますのでサクッと使えますが,gopro2gpxはGo言語なのでGoの環境構築が必要です.

3と4は,FFMpegを使うところまでは同じですが,その後はPythonになります.

5はJavascriptで実装されていて,ブラウザに動画(mp4)を投げ込むと,解析,視覚化,ダンプ保存もできます.メタデータを抽出するには,これが一番使い勝手という点で良さそうでした.処理はJavascriptでブラウザ側で行われていて,投げ込んだ動画ファイルがサーバ側に送信されることはなさそうです.

Telemetry Extractor for GoProを試してみる

Telemetry Extractor for GoProを試してみます.アクセスするとFree版とPremium版の選択が出てきます.Premiumは確かに機能満載ですが,$299とお高め.とりあえずはFreeを試します.

はじめて使うときはメールアドレスを聞いてきますので打ち込みます.

動画ファイルの選択画面です.ファイル選択しても良いですし,ブラウザ上にドラッグ&ドロップもできます.

今回は,京都~膳所間を電車で移動した際の動画を処理してみました.14分くらいの動画で約1.6GBあります.投げ入れると,10秒くらい処理した後,センサデータの選択画面に遷移しました.GPS,加速度,ジャイロが選択できますが,とりあえずGPSを見てみます.

すると,GPSデータの処理選択画面になります.色々できそうです.View Mapで地図上をアニメーションで動いている様子を見ることができます.スクショを保存したり,アニメーションを動画で保存もできるようです.

まずは地図を見ます.

ん?何じゃこれ? えらく飛んでます.京都~膳所間にはトンネルが2箇所あり,2つめのトンネル前後で飛んでます.GPSは測位結果をそのまま格納してるはずなので,データを取り出してそのまま表示するとこんな感じになることもあるかな...と納得しました.

これだけ良くできたツールなので,策は用意しているはず.と思いながら,前のページに戻って確認しますと,確かにありました.GPS FixとGPS Precisionあたりの設定を変えれば対応できそうです.

GPS Fixには,any,2D,3Dの選択肢があります.詳しい説明は省きますが,ざっくり言って3D測位(3次元の座標を求める)には最低でも4機以上の衛星が,2D測位には3機以上の衛星が必要になります.つまり,2Dに設定すると,GPSの受信状況が悪くても出力することになります.

GPS Precisionは,スライダーを動かしてみると,1~10,000で変化します.感覚的には数値が小さい方が高精度です.精度指標としてGoProのGPS受信機がどんなものを出してるのかは調査できてませんが,DOP値(GDOP,PDOPあたりかな?)とすると,数値的には100倍くらいされた整数値で表されているように・・・思います・・・このあたりは,後日調べてみることにします.

ということで,GPS Fixを3Dに変更して,再度地図を見てみました.

はい.綺麗になりました.GPXファイル,KMLファイルの出力もできます.KMLはGoogleEarthで確認できますし,GPXは

  1. LeafletでGPSログ(GPX)地図:クライアントローカルGPXファイルをアップロード可能に
  2. GPS Visualizer: Do-It-Yourself Mapping

などのサイトで簡単に表示可能です.

2の方が細やかな設定ができますが,個人的には1の晴歩雨描さんの方がシンプルで自分の用途には合っているように思いました.

抽出と表示はできたけれど・・・

さて,GPSデータの抽出と表示はできましたし,流れも分かったんですが,自作アプリの中でGoProのGPSデータ等々を使って見ようと思うと,先に抽出しておく手間が発生します.

先に紹介した,

  • GoPro Telemetry Resources (software)
  • では開発者向けの情報もありますが,C++,Go,Python,JavascriptがメインでC#はありません.C#で使えそうなライブラリは無いかな?と探してみましたが,良さそうなものは見当たりませんでした.

    GPSデータといっても,測位結果が格納されてるだけだし,データフォーマットが分かれば読み出すのはそれほど難しくはないのでは?と思いますし,どうせ趣味でやってることなので抽出ツールを自作してみようと思います.

    タイトルとURLをコピーしました