VSD for GPS

ダウンロード

vsd_filter_gps104a.lzh (2009/11/15 更新)

概要

機能概要

 
VSD for GPS (以下,VSD) は,GPS データロガーで記録したログファイルと,車載ビデオカメラの映像を合成してメーターを合成表示 (スーパーインポーズ) するソフトです.主に以下のような機能があります.
読み込み可能な GPS ログファイル形式は,以下のとおりです.

VSD は,フリーの .avi 編集ソフトとして有名な AviUtl のプラグインモジュールとして動作しますので,別途 AviUtl が必要です.

動作確認環境

アーカイブ内容

vsd_filter_gps.aufAviUtl 用プラグイン本体です
manual.url今ごらんのマニュアルです
avisynth\vsd_filter_gps.dllAviSynth 用プラグイン DLL です.AviSynth を使用しない場合は必要ありません.

インストール

  1. まずはじめに AviUtl をインストールします.
  2. ダウンロードした vsd_filter_gps???.lzh を解凍し,vsd_filter_gps.auf を AviUtl.exe と同じ場所にコピーしてください.

    最低限のインストールは以上ですが,AviUtl でさまざまな動画ファイルをオープンするためには,続けて以下をインストールしてください.(これ以下は VSD というより AviUtl の設定になりますので,より詳細な説明は他の解説サイトを参照してください)

  3. ffdshow をインストールします.→参考リンク
  4. mp4input.aui をインストールします.こちらのリンク先の「AviUtlを使ってMP4のファイルを無圧縮でカットする」の項を参考にしてください.
  5. DirectShow File Reader プラグイン for AviUtl をインストールします.→参考リンク
  6. AviUtl メニューの ファイル→環境設定→入力プラグイン優先度の設定 を選択し,「入力プラグインの優先度」ダイアログを表示します.そこで DirectShow File Reader を選択し,「下に移動」ボタンを押し一番下にした後,OK ボタンを押します.
     

画面表示説明


動画と GPS ログの同期の取り方

 動画に正しくメーター表示を行うためには,動画と GPS ログの同期 (タイミング合わせ) を行う必要があります.ここでは,同期の取り方の例を説明します.
  1. AviUtl を起動して,適当な動画を開きます.
  2. メニューの フィルタ→VSDメーター合成 にチェックを入れます.
  3. メニューの ファイル→インポート→VSDメーター合成 を選ぶと,ファイル選択ダイアログが表示されるので,そこで GPS で記録したログファイル (*.nmea) を選択してリードします.
  4. メニューの 設定→VSDメーター合成の設定 を選ぶと,「VSDメーター合成」ダイアログが表示されます.
     
    各設定項目の意味は以下のとおりです.
  5. 動画と走行ログの同期を取ります.まず「VSDメーター合成」ダイアログの「フレーム同期情報表示」を ON にしてください.また Vid先頭・GPS先頭 のスライダを 0 に設定します.また Vid最後・GPS最後 のスライダを最大値に設定します.
  6. AviUtl のメインスライダなどを使って,走行を開始したとき (車が動き出した瞬間) の映像を表示させ,同期情報の「Vid」直後の値を「Vid先頭」スライダにセットします.

  7. 「GPS先頭」スライダを調整して,走行を開始したとき (車が動き出した瞬間) のスピードグラフを表示させます.スピードグラフが 0km/h から立ち上がった箇所と画面下中央の縦棒が重なるよう,「GPS先頭」スライダを調整します.
  8. 同期情報の 2つの時間表示が最も近くなるよう,「Vid最後」または「GPS最後」スライダを調整します. (表示の意味は画面表示説明を参照してください.)
    完全に値を一致させる必要はありません.「Vid最後」か「GPS最後」どちらか一方のスライダを調整すれば十分です.
  9. AviUtl メニューの表示→再生ウィンドウの表示 で実際に再生してみて,同期にずれがないか確認します.動画とメーターがずれているときは,以下を参考にスライダを微調整してください.
    Vid先頭 付近のずれ Vid最後 付近のずれ
    動画よりメーターが早い GPS先頭 の数値を下げる or
    Vid先頭 の数値を上げる
    GPS最後 の数値を下げる or
    Vid最後 の数値を上げる
    動画よりメーターが遅い GPS先頭 の数値を上げる or
    Vid先頭 の数値を下げる
    GPS最後 の数値を上げる or
    Vid最後 の数値を下げる
  10. ラップタイムを計測・表示する場合は,下の「簡易ラップタイム計測」を行ってください.
  11. 必要であれば,メニューのファイル→エクスポート→VSDメーター合成 で,各種設定・mark 情報 (ラップタイム情報) をセーブすることができます.また,*.cfg を *.nmea と拡張子以外を同じファイル名にすることで,*.nmea 読み込み時に *.cfg も読み込まれます.(例: hoge.nmea と同じディレクトリに hoge.cfg があれば,hoge.nmea を読み込むと hoge.cfg も読み込まれます)
  12. すべての調整が終わったら,「VSDメーター合成」ダイアログの「フレーム同期情報表示」を OFF にしてください.後はメニューの ファイル→AVI出力 で avi ファイルの書き出しを行ってください.

簡易ラップタイム計測

 VSD では,簡易的にラップタイムを計測し,画面に表示することができます.2種類の計測モードがあります.

自動計測モード

  1. 「VSDメーター合成」ダイアログの「ラップタイム」チェックボックスにチェックを入れます.
  2. 「VSDメーター合成」ダイアログの「Start幅」スライダでスタートラインの幅を設定します.幅[m]×10 の値を設定します.(必ず 0 以外の値を設定してください)
  3. AviUtl のスライダバーを使うなどして,スタートラインなどの目印になる場所を通過する瞬間のフレームを表示させます.
  4. 「M」キーを押します.タイトルバーに [mark] と表示され,またラップタイム表示が更新されるのを確認してください.マークを解除するには,もう一度「M」キーを押します.

    ※「M」キーを AviUtl のショートカットキーに割り当てている場合は,別のキーに割り当てなおしてください.
  5. スタートラインを通過し損ねている,または間違って通過したと認識されたラップがないか確認します.必要であれば「Start幅」を調整したり,マークするフレームを別のラップに変えてみてください (マークするフレームを変えるときは,マーク済みのフレームのマークを解除してください).
    また「フレーム同期情報表示」ON 時は,走行軌跡にスタートラインが表示されますので,調整の目安にしてください.
    ちなみに,自車方位が ±45度以上ずれているときは,スタートラインを通過しても新しいラップとは認識されません.

手動計測モード

  1. 「VSDメーター合成」ダイアログの「ラップタイム」チェックボックスにチェックを入れます.
  2. 「VSDメーター合成」ダイアログの「Start幅」スライダを 0 に設定します.
  3. AviUtl のスライダバーを使うなどして,スタートラインなどの目印になる場所を通過する瞬間のフレームを表示させます.
  4. 「M」キーを押します.タイトルバーに [mark] と表示され,またラップタイム表示が更新されるのを確認してください.マークを解除するには,もう一度「M」キーを押します.
    ※「M」キーを AviUtl のショートカットキーに割り当てている場合は,別のキーに割り当てなおしてください.
  5. 次にスタートラインを通過するフレームを表示させ,マークをつけます.動画のスタートラインを通過するフレームごとに,この作業を繰り返します.

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" 簡易ラップタイム計測で,マークしたフレーム番号を「,」で区切ってつなげた文字列を指定します.

既知のバグ

変更履歴

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さん

戻る