VSD for GPS
ダウンロード
vsd_filter_gps104a.lzh (2009/11/15 更新)
概要
機能概要
VSD for GPS (以下,VSD) は,GPS データロガーで記録したログファイルと,車載ビデオカメラの映像を合成してメーターを合成表示 (スーパーインポーズ) するソフトです.主に以下のような機能があります.
スピードメーター・加速度の合成表示
走行ラインの表示
簡易ラップタイム計測・表示
読み込み可能な GPS ログファイル形式は,以下のとおりです.
NMEA-0183 フォーマット
GPS ログファイルとしては最も汎用的な形式です.$GPRMC センテンスが含まれている必要があります.GPS ログ記録周期はどんなものでも読み込めますが,記録周期が短いほどより正確な情報を表示できます.
LAP+ 用ログファイル *.dp3 形式
VSD は,フリーの .avi 編集ソフトとして有名な AviUtl のプラグインモジュールとして動作しますので,別途 AviUtl が必要です.
動作確認環境
WindowsXP SP3
AviUtl v0.99i2
GPS機器: PhotoMate887 (ログ記録周期: 5Hz)
アーカイブ内容
vsd_filter_gps.auf AviUtl 用プラグイン本体です
manual.url 今ごらんのマニュアルです
avisynth\vsd_filter_gps.dll AviSynth 用プラグイン DLL です.AviSynth を使用しない場合は必要ありません.
インストール
まずはじめに AviUtl をインストールします.
ダウンロードした vsd_filter_gps???.lzh を解凍し,vsd_filter_gps.auf を AviUtl.exe と同じ場所にコピーしてください.
最低限のインストールは以上ですが,AviUtl でさまざまな動画ファイルをオープンするためには,続けて以下をインストールしてください.(これ以下は VSD というより AviUtl の設定になりますので,より詳細な説明は他の解説サイトを参照してください)
ffdshow をインストールします.→参考リンク
mp4input.aui をインストールします.こちらのリンク先 の「AviUtlを使ってMP4のファイルを無圧縮でカットする」の項を参考にしてください.
DirectShow File Reader プラグイン for AviUtl をインストールします.→参考リンク
AviUtl メニューの ファイル→環境設定→入力プラグイン優先度の設定 を選択し,「入力プラグインの優先度」ダイアログを表示します.そこで DirectShow File Reader を選択し,「下に移動」ボタンを押し一番下にした後,OK ボタンを押します.
画面表示説明
動画と GPS ログの同期の取り方
動画に正しくメーター表示を行うためには,動画と GPS ログの同期 (タイミング合わせ) を行う必要があります.ここでは,同期の取り方の例を説明します.
AviUtl を起動して,適当な動画を開きます.
メニューの フィルタ→VSDメーター合成 にチェックを入れます.
メニューの ファイル→インポート→VSDメーター合成 を選ぶと,ファイル選択ダイアログが表示されるので,そこで GPS で記録したログファイル (*.nmea) を選択してリードします.
メニューの 設定→VSDメーター合成の設定 を選ぶと,「VSDメーター合成」ダイアログが表示されます.
各設定項目の意味は以下のとおりです.
Vid先頭/Vid最後/GPS先頭/GPS最後
動画と GPS ログの同期に使用します.Vid先頭〜Vid最後 の範囲の映像が,GPS先頭〜GPS最後 の範囲のログに対応していることを示します.
Vid先頭/最後 の値は,動画のフレーム番号です (30fps の動画なら,30=1秒に相当します).
GPS先頭/最後 の値は,16=1秒に相当します.
※AviUtl の設定スライダは,max 9999 までしか使えないので,ひとつの設定項目が 2つのスライダに分割されています.
これらの上側のスライダは 数値 1 で 設定値 100 に相当します.すなわち,12345 を設定したいときは,上のスライダに 123 を,下のスライダに 45 を設定してください.
スピード
スピードメーターの最大表示の値を設定します.
Map秒
走行軌跡の長さを秒単位で設定します.ただし簡易ラップタイム計測を行っているときは,現在走行中のラップの軌跡のみが表示されます.
0 に設定すると,走行軌跡は表示されません.
Mapサイズ
走行軌跡の表示サイズを変更します.
Map回転
走行軌跡を回転させて表示します.
G長さ
G軌跡の表示長さを設定します.表示秒数×16 の値を設定します.
0 を設定すると G軌跡は表示されません.
-1 を設定すると,G ボールも表示されません.
Start幅
ラップタイム自動計測モード時のスタートラインの幅を設定します.幅[m]×10 の値を設定します.
0 を指定すると手動計測モードになります.
詳細は簡易ラップタイム計測 を参照してください.
Aspect比
メーターパネル表示の縦横比を変更します.動画出力後にメーターが楕円になっている場合は,調整してみてください.
ラップタイム
簡易ラップタイム計測を行う場合,ON に設定します.
メーター位置変更
メーターを右に表示する場合,ON に設定します.
フレーム同期情報表示
同期設定に使用する情報を表示する場合,ON に設定します.
動画と走行ログの同期を取ります.まず「VSDメーター合成」ダイアログの「フレーム同期情報表示」を ON にしてください.また Vid先頭・GPS先頭 のスライダを 0 に設定します.また Vid最後・GPS最後 のスライダを最大値に設定します.
AviUtl のメインスライダなどを使って,走行を開始したとき (車が動き出した瞬間) の映像を表示させ,同期情報の「Vid」直後の値を「Vid先頭」スライダにセットします.
「GPS先頭」スライダを調整して,走行を開始したとき (車が動き出した瞬間) のスピードグラフを表示させます.スピードグラフが 0km/h から立ち上がった箇所と画面下中央の縦棒が重なるよう,「GPS先頭」スライダを調整します.
同期情報の 2つの時間表示が最も近くなるよう,「Vid最後」または「GPS最後」スライダを調整します.
(表示の意味は画面表示説明 を参照してください.)
完全に値を一致させる必要はありません.「Vid最後」か「GPS最後」どちらか一方のスライダを調整すれば十分です.
AviUtl メニューの表示→再生ウィンドウの表示 で実際に再生してみて,同期にずれがないか確認します.動画とメーターがずれているときは,以下を参考にスライダを微調整してください.
Vid先頭 付近のずれ
Vid最後 付近のずれ
動画よりメーターが早い
GPS先頭 の数値を下げる or Vid先頭 の数値を上げる
GPS最後 の数値を下げる or Vid最後 の数値を上げる
動画よりメーターが遅い
GPS先頭 の数値を上げる or Vid先頭 の数値を下げる
GPS最後 の数値を上げる or Vid最後 の数値を下げる
ラップタイムを計測・表示する場合は,下の「簡易ラップタイム計測 」を行ってください.
必要であれば,メニューのファイル→エクスポート→VSDメーター合成 で,各種設定・mark 情報 (ラップタイム情報) をセーブすることができます.また,*.cfg を *.nmea と拡張子以外を同じファイル名にすることで,*.nmea 読み込み時に *.cfg も読み込まれます.(例: hoge.nmea と同じディレクトリに hoge.cfg があれば,hoge.nmea を読み込むと hoge.cfg も読み込まれます)
すべての調整が終わったら,「VSDメーター合成」ダイアログの「フレーム同期情報表示」を OFF にしてください.後はメニューの ファイル→AVI出力 で avi ファイルの書き出しを行ってください.
簡易ラップタイム計測
VSD では,簡易的にラップタイムを計測し,画面に表示することができます.2種類の計測モードがあります.
自動計測モード
スタートラインの位置と幅を (一箇所だけ) 指定することで,そこを通過する時間を自動認識し自動的にラップタイムを計測するモードです.サーキット走行など,同一コースを何度も周回する場合は手軽にラップタイムを計測できます.
計測タイム精度は GPS 測位精度に左右されます.またジムカーナ等スタート・ゴール地点が違う場合にはこのモードは使用できません.また GPS ログを読み込まない場合,このモードは使用できません.
手動計測モード
スタートラインなどを通過した瞬間の映像に手動でマークをつけ,そのマークとマークの間の時間を計ることで,ラップタイムを計測するモードです.
複数周のラップタイムを計測する場合は,すべての周回のスタートライン(等)を手動でマークする必要がありますが,計測タイム精度は GPS の精度に影響されず,動画の fps (例: 30fps の動画なら 1/30秒) の精度で計測できます.また GPS ログを読み込まなくても,このモードは使用できます.
自動計測モード
「VSDメーター合成」ダイアログの「ラップタイム」チェックボックスにチェックを入れます.
「VSDメーター合成」ダイアログの「Start幅」スライダでスタートラインの幅を設定します.幅[m]×10 の値を設定します.(必ず 0 以外の値を設定してください)
AviUtl のスライダバーを使うなどして,スタートラインなどの目印になる場所を通過する瞬間のフレームを表示させます.
「M」キーを押します.タイトルバーに [mark] と表示され,またラップタイム表示が更新されるのを確認してください.マークを解除するには,もう一度「M」キーを押します.
※「M」キーを AviUtl のショートカットキーに割り当てている場合は,別のキーに割り当てなおしてください.
スタートラインを通過し損ねている,または間違って通過したと認識されたラップがないか確認します.必要であれば「Start幅」を調整したり,マークするフレームを別のラップに変えてみてください (マークするフレームを変えるときは,マーク済みのフレームのマークを解除してください).
また「フレーム同期情報表示」ON 時は,走行軌跡にスタートラインが表示されますので,調整の目安にしてください.
ちなみに,自車方位が ±45度以上ずれているときは,スタートラインを通過しても新しいラップとは認識されません.
手動計測モード
「VSDメーター合成」ダイアログの「ラップタイム」チェックボックスにチェックを入れます.
「VSDメーター合成」ダイアログの「Start幅」スライダを 0 に設定します.
AviUtl のスライダバーを使うなどして,スタートラインなどの目印になる場所を通過する瞬間のフレームを表示させます.
「M」キーを押します.タイトルバーに [mark] と表示され,またラップタイム表示が更新されるのを確認してください.マークを解除するには,もう一度「M」キーを押します.
※「M」キーを AviUtl のショートカットキーに割り当てている場合は,別のキーに割り当てなおしてください.
次にスタートラインを通過するフレームを表示させ,マークをつけます.動画のスタートラインを通過するフレームごとに,この作業を繰り返します.
AviSynth 用プラグインについて
v1.00 から AviSynth 用プラグイン DLL を同梱しました.MediaPlayerClassic 等,*.avs (AviSynth スクリプト) を直接再生できるプレイヤーを使うと,AviUtl で再エンコード出力せずにメーター合成後の動画を再生できます.
AviUtl メニューのファイル→エクスポート→VSDメーター合成 で *.cfg を保存してある場合,その内容がほぼそのまま AviSynth スクリプトとして使用できるようになっています.
残念ながら AviSynth については説明しきれませんので,ここではプラグインで利用できるフィルタの説明のみします.
VSDFilter (clip, string "gps_file",
int "video_start", int "video_end", int "gps_start", int "gps_end",
int "speed_meter", int "map_length", int "map_size", int "map_angle",
int "g_length", int "start_width", int "aspect_ratio", int "lap_time",
int "meter_pos", int "meter_cx", int "meter_cy", int "meter_r",
int "g_scale", int "meter_adjust", string "mark")
パラメータ名 説明
string "gps_file" 読み込む GPS ログファイル名 (*.nmea *.dp3) を指定します.
int "video_start" 設定スライダの「Vid先頭」と同じ値・意味です.
int "video_end" 設定スライダの「Vid最後」と同じ値・意味です.
int "gps_start" 設定スライダの「GPS先頭」と同じ値・意味です.
int "gps_end" 設定スライダの「GPS最後」と同じ値・意味です.
int "speed_meter" 設定スライダの「スピード」と同じ値・意味です.
int "map_length" 設定スライダの「Map秒」と同じ値・意味です.
int "map_size" 設定スライダの「Mapサイズ」と同じ値・意味です.
int "map_angle" 設定スライダの「Map回転」と同じ値・意味です.
int "g_length" 設定スライダの「G長さ」と同じ値・意味です.
int "start_width" 設定スライダの「Start幅」と同じ値・意味です.
int "aspect_ratio" 設定スライダの「Aspect比」と同じ値・意味です.
int "lap_time" 1を指定すると,ラップタイムが表示されます.
int "meter_pos" 1を指定すると,メーターパネルが右に表示されます.
int "meter_cx" メーターパネル中心の x 座標を指定します.
int "meter_cy" メーターパネル中心の y 座標を指定します.
int "meter_r" メーターパネルの半径を指定します.
int "g_scale" G ボールがメーターパネル外周にあるときの G の値 * 1000 を指定します. 例えば 1500 を設定した場合,1.5G のときに G ボールがメーター外周に位置します.
string "mark" 簡易ラップタイム計測で,マークしたフレーム番号を「,」で区切ってつなげた文字列を指定します.
既知のバグ
VSD は 2時間分の GPS ログしか読み込めないようになっています.これを超えるログは 2時間以内に収まるよう,*.nmea を編集する必要があります.GPS ロガーの中には,数日分のログを一つの *.nmea に出力するものがありますので,このようなログを VSD に読み込ませるときは注意が必要です.
16:9 の動画にメーターを合成した場合,メーターが楕円形になる場合があります. v0.92 にて調整機能を入れました.
AviSynth で DirectShowSource() でオープンした動画に対し VSDFilter() を適用した場合,AviUtl で調整したパラメータを適用しても同期がずれる場合があります.これは DirectShowSource() が動画の FPS を変更するためで,これを回避するためには,DirectShowSource() の fps パラメータを正確に指定する必要があります.
変更履歴
v1.04a
・タイム計測の精度をちょびっと向上
・ラップタイム履歴の表示順序をまともにした
・直線描画ルーチンの微妙なバグを修正
v1.04
・長い動画を扱えないことがあったので修正
v1.03
・ラップタイム自動計測モードを追加
v1.02
・*.dp3 で時刻を読み誤る可能性があったのを修正
v1.01
・*.dp3 で走行軌跡の縦横比がおかしかったのを修正
v1.00
・*.dp3 (LAP+ 用ログファイル) をリードできるようにした
・AviSynth 用プラグイン追加
βv0.92
・メーターパネルのアスペクト比変更設定を追加
・4G 以上の横 G は異常なデータとみなし描画対象から外した
βv0.91
・横G の動きが変になる場合があるのを修正
・スピードメーターに対して G ボールの動きが進んでいたのを修正
βv0.90
最初のバージョン公開
Special thanks: ふくながさん,373@dp3さん
戻る