動画→GPX生成+圧縮ツール(SRT対応版) 技術解説

動画→GPX生成+圧縮ツール(SRT対応版) 技術解説 YouTubeデモ
本ドキュメントは、「Goproなどの動画ファイル(MP4/MOV)からGPSトラックを抽出し、GPXを生成して動画を圧縮する」機能と SRTファイル(例:DJIの字幕ログ)を元にGPXを生成 する新機能を加え、マップ等にいつどこで撮影したかを標準化して出力する取り組みです。
- SRTを指定/自動検出できたら SRTを優先 してGPXを生成。
- SRTが無い・壊れている場合は、 動画ファイルのメタ情報からGPX抽出 にフォールバック。
- 動画は 1280×720・およそ6Mbps でハードウェアエンコードし、進捗CSV/SVGを保存。
- 出力MP4には 元動画のメタ情報をコピー して引き継ぎます。
1. 何をしたい?(全体像)
動画+位置情報→地図で扱えるGPX を作る処理と、動画の軽量化 を自動で行います。 「位置情報」は、以下のどちらかから取得します。
- DJIなど:
.SRT
(字幕ファイル)に記録された緯度経度・高度・速度など。 - GoProなど: 動画ファイル自体の内部メタデータ(GPSログ)。
結果として、地図ソフトやGISで読み込める .gpx
と、閲覧・共有しやすい軽量の _1280_720.mp4
を出力します。
2. SRT→GPX 生成の流れ
SRTとは?
SRTは「字幕ファイル」の一般的な形式ですが、DJIなどの製品では、字幕の中に 撮影時刻や位置情報(緯度・経度・高度・速度) を記録することがあります。 このSRTの各ブロック(字幕の固まり)を読み取り、位置情報を抽出します。
SRTのサンプル(イメージ)
1 00:00:00,000 --> 00:00:00,033 2025-09-28 13:44:06.292 [latitude: 26.714039] [longitude: 128.019102] [rel_alt: 87.400 abs_alt: 77.306] [speed: 5.2]
このようなブロックから、日時・緯度・経度・高度(絶対高度)・速度を正規表現で取り出し、 GPXの「トラックポイント」に変換します。
1Hz(1秒間隔)への間引き
字幕は高頻度だったり、同一秒に複数行がある場合があります。 ツールは時刻を秒単位で丸め、1秒につき1点に整理(1Hz化)します。 これにより、地図側での表示が安定し、ファイルが軽くなるメリットがあります。
生成されるGPXの形
生成するGPXは、一般的な例に合わせたXML構造(trk/trkseg/trkpt)です。 各ポイントは緯度・経度・高度・時刻・速度を含み、地図ソフトで読み込みやすくしています。
3. GoPro:動画メタ→GPX 生成(フォールバック)
SRTが無い、もしくは必要な情報が含まれていない場合は、 従来通り、動画ファイル内部のメタデータからGPS情報を抽出 します。 具体的には、ExifToolのテンプレートを用いてトラックポイント(緯度、経度、時刻、高度、速度)を列挙し、 それを同様に1Hz化してGPXに整形します。
4. 動画の圧縮
位置情報の抽出に関係なく、動画はいつも通り1280×720に縮小し、
およそ6MbpsのビットレートでハードウェアH.264エンコードを試みます。
利用環境に応じて、Intel(h264_qsv
)、AMD(h264_amf
)、WindowsのMedia Foundation(h264_mf
)
などを自動/指定で選びます(--hwenc
)。
- アスペクト比を保持しつつ、1280×720に収まるようにリサイズ。
- パディングで中央配置に調整(黒帯ではなく自然な余白)。
- 音声はAAC(標準的な形式)に変換。
faststart
フラグでストリーミング視聴を高速化。
進捗の可視化(CSV/SVG)
エンコード中の進み具合を、time_sec, percent
形式のCSVと、
シンプルな折れ線グラフのSVGとして保存します(不要なら --no-progress
)。
長い動画でも、処理状況をあとから確認できます。
5. メタデータのコピー
出力されたMP4には、元動画と同じメタ情報(日時・撮影装置情報など) を可能な限りコピーします。 これにより、整理や検索で「元ファイルの属性」を引き継いだ状態で扱えます。
6. ファイル名と出力物
<元名>_1280_720.gpx
… SRTまたは動画メタから作成したGPX。<元名>_1280_720.mp4
… 軽量化した出力動画。<元名>_1280_720_progress.csv
/.svg
… エンコード進捗。
既存ファイルがある場合は上書きしません(--overwrite
で上書き可能)。
7. 自動検出と突合の仕組み
SRTが明示されていない場合、ツールは動画の隣にある同名のSRT(拡張子違い)を探します。 さらに、ディレクトリを指定した場合は、拡張子を除いた同じ名前(stem一致)の動画とSRTを突合します。
./videos/ABC123.MP4
と ./srts/ABC123.SRT
はペアとして扱われます。
8. エラー・フォールバックの考え方
- SRTが解析できなければ、動画メタ抽出へ自動フォールバック。
- エンコードが特定のハードウェアで失敗すれば、他の方式を順に試行。
- 致命的エラー時は中断し、その動画だけスキップして次へ進みます。
9. 想定する前提・制約
- DJI系のSRT構造を想定(日時・緯度・経度・高度・速度が特定フォーマットで入っていること)。
- SRTに速度が無い場合は
0
を埋めます。 - タイムゾーンはSRTや動画メタの表記に依存します。GPX内の時刻はISO形式(小数秒あり)で出力。
- 1Hz化は「同じ秒は最初の1点のみ採用」という単純・堅牢なロジックです。
10. 代表的なQ&A
Q1. SRTと動画の時刻がズレます。どうすれば?
SRTと動画の内部時計がズレているケースがあります。厳密に合わせたい場合は、 追加オプションや補正機能を実装可能です(例:開始時刻の手動シフト)。
Q2. 1秒間隔ではなく、0.5秒などで出したい。
可能です。現在は地図・GISと相性の良い1Hzを既定にしていますが、設定可能に拡張できます。
Q3. 速度や高度が無いSRTでも使える?
はい。欠けている項目はデフォルト値(速度なら0)で補い、GPXとして成立させます。
11. 内部処理のざっくりフロー
- 入力パスがファイルかフォルダかを判定し、対象動画の一覧を作る。
- 各動画に対し、SRT(明示 or 自動)を探す。
- SRTが見つかれば解析 → 1Hz化 → GPX整形 → 保存。
- SRTが無ければ、動画メタをExifToolテンプレで抽出 → 1Hz化 → GPX整形 → 保存。
- 動画を1280×720・約6Mbpsでハードウェアエンコードし、進捗CSV/SVGを記録。
- 出力MP4へ元動画のメタデータをコピー。
13. 発展的なカスタマイズ案
- 時刻シフトUI: 「開始時刻を〇〇に合わせる」対話式の補正機能。
- 間引き戦略: 1Hz以外のピッチ、または距離ベース(一定距離ごとに採用)への切替。
- 品質管理: 欠測や外れ値(急激なジャンプ)を自動検出し、除去や補間を行う。
- 地図連携: 生成したGPXを自動でWeb地図にプロットしてプレビュー。
- ログ拡充: 解析成否、採用/除外点数、抽出率などをレポート化。
13. まとめ
本拡張版は、従来の「動画メタ→GPX」ワークフローをそのまま維持しつつ、 SRTに位置情報がある場合はSRTを優先してより堅牢にGPXを生成できるようにしたものです。 また、動画の軽量化、進捗の可視化、メタ情報の継承といった周辺機能は継続して利用できます。
これだけで、現場オペレーションはシンプルに運用できます。