コムテック ZDR055 から GPS ログを取り出す

Posted: 2025/07/24
Updated: 2025/08/31
Category: 知性

前置きが長いので後半まで飛ばしていいです

コムテックのドライブレコーダー ZDR055 を買った。今まで使っていたケンウッド製ドライブレコーダー (DRV-830) では GPS ログが SD カード上に NMEA ファイルとして書き出されるので旅行に行ったときの移動ログとして活用していたのだが、 ZDR055 では映像ファイルにログデータが埋め込まれる形で記録されているため、基本的にメーカー公式ビューワーでしかログデータが表示できない。

少し調べると以下のような記事がヒットするのだが、ZDR055 では MOV ファイルでも MP4 ファイルでもなく AVI ファイルとして動画が書き出されるので、そのままこれらの方法は応用できない。

ドライブレコーダーの動画からGPSデータを取り出したい - Qiita

『GPSログのファイル形式や記録頻度について』 のクチコミ掲示板 - 価格.com

ffprobe で動画ファイルを眺めてみると Stream #0:2 にそれらしいストリームがあるが、 Unsupported codec と言われてまともに扱えそうにない。

$ ffprobe sd/NORMAL/Front/20250720_225136_F_E_Nor.AVI
ffprobe version N-112863-gea6817d2a7 Copyright (c) 2007-2023 the FFmpeg developers
  built with gcc 11 (Ubuntu 11.4.0-1ubuntu1~22.04)
...
[avi @ 0x5d31dfd665c0] probed stream 2 failed
[avi @ 0x5d31dfd665c0] Could not find codec parameters for stream 2 (Subtitle: none, 30 kb/s): unknown codec
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0, avi, from 'sd/NORMAL/Front/20250720_225136_F_E_Nor.AVI':
  Duration: 00:00:21.63, start: 0.000000, bitrate: 13328 kb/s
  Stream #0:0: Video: h264 (High) (H264 / 0x34363248), yuv420p(tv, bt709, progressive), 1920x1080, 12111 kb/s, 27.50 fps, 27.50 tbr, 27.50 tbn
  Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
  Stream #0:2: Subtitle: none, 30 kb/s
Unsupported codec with id 0 for input stream 2

また、直接動画ファイルを眺めた感じ NMEA ログがそのまま入っているとかではなさそうなので、仮に ffmpeg などを使ってこのレコードを取り出せたところで位置データとして地図上にマッピングする場合、別途変換処理が必要になる。

ZDR055:(日時):X:(加速度):Y:(加速度):Z:(加速度)... みたいな感じ

変換ツール

というわけで変換ツールを作った。 AVI ファイルのインデックスエントリから GPS データっぽいストリームを取り出して、独自形式のレコードをそれっぽくパースして GPX ファイルに書き出すところまでを一発でできるようにした。

misodengaku/zdr055_gpx - GitHub

これを使って生成したのが冒頭や以下の GPS ログで、 GPXSee などを使って地図上にプロットして気軽に移動ログが扱えるようになる。

それなりにちゃんと取れてそう

Actions で各 OS 向けにビルドしてバイナリ作ってるのだけど Release まで持ってくるのが面倒なのでやってない。必要な方は実行結果の Artifacts からそれっぽいものをダウンロードするか、 Rust をインストールして自力でビルドしてお試しください。

実装にあたっては勉強のため Rust で書くか~と思って始めたのだが、結局面倒なので GitHub Copilot や Gemini に外注出しまくったために大して勉強にはならなかった。 最初 Copilot が職人技みたいな正規表現をお出ししてきたりしやがって、それはまあそれなりに動くんだけれど当然処理がクソ遅く、さすがにやってられねえということでバイト列操作でデータ切り出すやつを Gemini に実装させ直したりとかして結局ほとんどの処理を AI ベースで書いた気がする。今コード書かせるときはみんな大体 Claude でやってる気がするけど諸々の事情でそっちは試してない。

地図出典

本稿で用いている地図画像は全て 国土地理院 地理院タイル(標準地図) を加工して作成しています。

追記: 2025/08/31

試して気づいたというには最初からわかれよ感がすごいし、そもそもドライブレコーダーなのだから当然なのだが、 ZDR055 は GPS ロガーとしての実用性が低いことがわかった。

というのも動画に GPS ログが埋め込まれるという仕組み上、動画が消えると GPS ログが消滅するためである。 メーカー公称値では 128GB の microSD カードを用いたときの録画時間が 495~855 分となっていることから考えると過去10時間やそこらのログしか残すことができず、数日にわたる旅行などに出かけた場合は初めの方の位置データが簡単に消滅してしまう。数日かけてアホみたいに移動して帰ってきてから移動ログを見返す、みたいな用途にはとても使えない。

まあもうこれは仕組み上仕方がないとしか言い様がないし、そもそも期待するのが間違いといったところなので諦めるしかない。