VSD for GPS

目次

  1. ダウンロード
  2. 概要
  3. インストール
  4. 使用方法
  5. 画面表示説明
  6. 簡易ラップタイム計測
  7. AviSynth 用プラグイン
  8. 既知のバグ
  9. 参考
  10. Q&A
  11. 変更履歴

ダウンロード

vsd_filter_gps106q.lzh (2011/11/12 更新)

概要

機能概要

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

VSD は,フリーの動画編集ソフトとして有名な 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. *.mp4 を読み込む場合:mp4input.aui をインストールします.こちらのリンク先の「AviUtlを使ってMP4のファイルを無圧縮でカットする」の項を参考にしてください.
  5. MPEG-2 を読み込む場合:m2v.vfp をインストールします.→こちらのリンク先の「MPEG-2 VIDEO VFAPI Plug-In」の項を参考にしてください.
  6. *.avi *.mp4 MPEG-2 以外を読み込む場合:DirectShow File Reader プラグイン for AviUtl をインストールします.→参考リンク
    その後,AviUtl メニューの ファイル→環境設定→入力プラグイン優先度の設定 を選択し,「入力プラグインの優先度」ダイアログを表示します.そこで DirectShow File Reader を選択し,「下に移動」ボタンを押し一番下にした後,OK ボタンを押します.
     
    ※DirectShow File Reader で読み込んだファイルは,正しくシークできないことがあり,同期作業に支障が出ます.このような場合,いったん AviUtl で *.avi に変換・保存した後,その動画に対して VSD 同期処理を行ってください.

使用方法

VSD 使用の流れは,主に以下のようになっています.
  1. 動画と GPS ログを開き,VSD の設定を行う
  2. 動画と GPS ログの同期を取る
  3. (任意で) ラップタイムを計測・表示する
  4. (任意で) メーター合成した動画を保存する
以下で,各項目についての説明をします.

動画と GPS ログを開き,VSD の設定を行う

  1. AviUtl を起動して,適当な動画を開きます.
  2. メニューの フィルタ→VSDメーター合成 にチェックを入れます.
  3. メニューの 設定→VSDメーター合成の設定 を選ぶと,「VSDメーター合成」ダイアログが表示されます.
  4. 設定ダイアログの GPS ログオープンボタンを押すと,ファイル選択ダイアログが表示されるので,そこで GPS で記録したログファイル (*.nmea *.dp3) を選択してリードします.
  5. 「VSDメーター合成」ダイアログの「スピードグラフ表示」を ON に設定します.

動画と GPS ログの同期を取る

動画と GPS ログの同期を取るには,動画と GPS ログのオフセットを「ログ位置調整」スライダで設定します.

以下では,設定のコツを説明します.

  1. 動画とログを読み込んだだけの状態では,下の図のように動画とログがずれている状態です.
  2. AviUtl のメインスライダ・カーソルキーなどを使って,走行を開始したとき (車が動き出した瞬間) や加速→減速した瞬間などの,車速が変化しやすい (スピードグラフの形に特徴が出やすい) 瞬間の映像を表示させます.
  3. 「ログ位置調整」スライダを調整して,先ほどの映像に対応する箇所のスピードグラフを表示させます.縦棒の箇所がスピードグラフに重なるよう,「ログ位置調整」スライダを調整します.
  4. この状態で,ほとんどの場合は同期が完了しています.ただし動画によっては,動画の前半だけ同期を取った場合,まれに動画の後半の同期が取れていない場合があります.
  5. この場合,動画の後半でもう一度「ログ位置調整」スライダを調整し,同期を取る必要があります.
    メインウィンドウで動画の後半を表示させ,先ほどと同じ要領で「ログ位置調整」スライダを調整してください.
    2回目の同期では,1回目の同期を保ったまま (ログの再生速度を変えることで) 動画全体の同期を取ることができます.
  6. 以上で同期作業は終わりです.
    AviUtl メニューの表示→再生ウィンドウの表示 で実際に再生してみて,同期にずれがないか確認してください.ずれがある場合は,再び「ログ位置調整」スライダを調整してください.

    「ログ位置調整」スライダを調整する場合は必ずメインスライダなどを使ってずれがあるシーンを表示させてから,「ログ位置調整」スライダを調整してください.
    再生ウィンドウの映像とログ位置調整スライダは連動していませんので,(メインウィンドウで違うシーンを表示させたまま) 再生ウィンドウでずれがあるシーンを表示しつつログ位置調整スライダを調整しても,望む結果は得られません.

    ※「ログ位置調整」スライダは一度に約±10分しかずらせません.それ以上ずらしたいときは,メインスライダで 1フレーム分映像を進めると,「ログ位置調整」スライダが 0 に戻ります.

  7. 同期作業が終わったら,「VSDメーター合成」ダイアログの「スピードグラフ表示」を OFF にしてください.

ラップタイムを計測する

ラップタイム計測・表示機能の詳細は「
簡易ラップタイム計測」を参照してください.
ここではごく簡単に自動ラップタイム計測機能を使用してみます.
  1. 「VSDメーター合成」ダイアログの「ラップタイム表示」チェックボックスにチェックを入れます.
  2. 「VSDメーター合成」ダイアログの「計測地点幅」スライダに 150 を設定します.
  3. AviUtl のスライダバーを使うなどして,コントロールラインなどの目印になる場所を通過する瞬間の映像を表示させます.
  4. 「M」キーを押します.するとラップタイムが計測されて表示されます.

メーター合成した動画を保存する

メーター合成後の動画は,AviUtl の機能を使用して *.avi ファイルに保存することができます.
ここでは簡単に動画の保存方法について説明します.すでに AviUtl を使いこなしている方は,ここは読まなくてけっこうです.
  1. 範囲指定して保存したい場合,キーボードの [ キーで開始点,] キーで終了点を指定します.
  2. AviUtl メニューの ファイル→AVI 出力 を選びます.
  3. AVI 出力場所を指定するダイアログボックスが開きます.
  4. 動画の圧縮 Codec を選びます.好みの Codec を使ってください.よくわからない方はひとまず以下のように設定してみることをお勧めします.
    1. 「ビデオ圧縮」ボタンをクリック
    2. 圧縮プログラムのリストから「ffdshow Video Codec」を選びます
    3. 「設定」をクリック
    4. 「Encoder」をタブをクリックします
    5. 「エンコーダ」「モード」「品質」を図のとおりに設定.「品質」の数値は,ファイルサイズと画質のトレードオフになりますので,いろいろ試してみてください.数値が高いほど画質がよいですが,ファイルサイズが大きくなります.
    6. OK をクリック
    7. OK をクリック
  5. 保存する場所を選んだ後,「保存」をクリックします.

画面表示説明


メニューの 設定→VSDメーター合成の設定 を選ぶと,「VSDメーター合成」ダイアログが表示されます.設定ダイアログの各設定項目の意味は以下のとおりです.

簡易ラップタイム計測

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

自動計測モード

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

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

手動計測モード

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

AviSynth 用プラグイン

概要

 vsd_filter_avs.dll は,AviSynth 用プラグイン DLL です.AviSynth の概要についてはこちらなどを参照してください.
AviSynth を使うメリットを簡単に紹介すると,動画の範囲指定・子画面合成・モザイク処理等の強力な編集機能を使用でき,また MediaPlayerClassic 等の *.avs (AviSynth スクリプト) を直接再生できるプレイヤーを使うと,AviUtl で再エンコード出力せずにメーター合成後の動画を再生できます.

インストール

  1. AviSynth をインストールします→参考
  2. AviSynthインストールディレクトリ\plugins ( 通常は C:\Program Files\AviSynth 2.5\plugins ) に vsd_filter_avs.dll をコピーします.
  3. こちらでも解説されているとおり,AviSynth 自体は完結したアプリケーションではなく,他のアプリケーションから呼び出されて動作します.VirtualDub や MediaPlayerClassic 等が有名です.とりあえず手軽に AviSynth を試したい場合は MediaPlayerClassic をインストールしてみてください.

簡単な使用法

大まかな流れは,AviSynth スクリプトを作成し,AviSynth を呼び出すアプリケーションにそのスクリプトを読み込ませます.
スクリプト作成は煩雑な作業ですが,(AviUtl 用の) VSD にはスクリプト作成を大幅に簡略化する機能があります.
ここでは MediaPlayerClassic で AviSynth スクリプトを直接再生する例を挙げます.
  1. AviUtl の VSD を使って同期作業を行った後,「*.cfg ロード・セーブボタン」で *.cfg を保存します.*.cfg はほぼそのまま AviSynth スクリプトとして使用できるようになっていますので,*.cfg の拡張子を *.avs に変更します.
  2. MediaPlayerClassic を立ち上げ,MediaPlayerClassic に *.avs をドラッグ & ドロップすると,再生が始まります.
  3. AviSynth の機能を使って,子画面合成をしてみます.*.avs をメモ帳などで開き,ファイルの最後に次の 3行を追加後に保存・終了して,再び MediaPlayerClassic で再生してみてください.同じ動画が子画面合成されて再生されると思います.
    c1 = last
    BilinearResize( last.width / 3 / 8 * 8, last.height / 3 / 8 * 8 )
    Overlay( c1, last, 0, 0 )
    
    ここでは簡単に説明するため同じ動画を入れましたが,もちろん別の動画を入れることもできます.

フィルタ解説

 vsd_filter_avs.dll がサポートするフィルタは VSDFilter だけです.ここでは VSDFilter の引数を説明します.
ほとんどは AviUtl 用 VSD の設定ダイアログで設定できるパラメータと同じですが,lap_start 等 AviSynth 版にしかないパラメータもあります.
VSDFilter (clip, string "gps_file", string "font",
	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", int "font_size",
	int "lap_start", int "lap_end", string "mark")
パラメータ名説明
string "gps_file" 読み込む GPS ログファイル名 (*.nmea *.dp3) を指定します.
string "font" 表示に使用するフォント名を指定します.
int "video_start"
int "video_end"
int "gps_start"
int "gps_end"
動画とログの同期情報です.
video_start の時刻の映像が gps_start の時刻のログに,
video_end の時刻の映像が gps_end の時刻のログに対応することを示します.
int "speed_meter" 設定スライダの「最大スピード」と同じ値・意味です.
int "map_length" 設定スライダの「走行軌跡長さ」と同じ値・意味です.
int "map_size" 設定スライダの「走行軌跡サイズ」と同じ値・意味です.
int "map_angle" 設定スライダの「走行軌跡回転」と同じ値・意味です.
int "g_length" 設定スライダの「G軌跡表示長さ」と同じ値・意味です.
int "start_width" 設定スライダの「計測地点幅」と同じ値・意味です.
int "aspect_ratio"設定スライダの「アスペクト比」と同じ値・意味です.
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 ボールがメーター外周に位置します.
int "font_size" フォントサイズをピクセル数で指定します.
int "font_attr" 1: 太字 2:斜体 3:太字+斜体 を指定します.
int "lap_start" ラップタイム表示の開始ラップ数を指定します.
int "lap_end" ラップタイム表示の終了ラップ数を指定します.
string "mark" 簡易ラップタイム計測で,マークしたフレーム番号を「,」で区切ってつなげた文字列を指定します.

既知のバグ

参考

とあるサーキットで,コース公式計測器の記録と,自動計測モードでのタイム差は以下のようになりました.

 コース公式のラップタイム計測地点と自動計測モードの計測地点には位置のズレがあると思われることから,ラップタイムの遅い (コントロールライン通過速度が遅い) 周とその前後の周は計測誤差が大きくなります.
 それ以外の周では,おおむね ±0.03秒以内の誤差といえます.

Q&A

変更履歴

v1.06q ・ラップタイム手動計測にジムカーナ用のモードを追加
v1.06p ・Windows7 での設定ダイアログ表示を調整
v1.06o ・1Hz 等周期が長い GPS ログで,停車中もスピードが 0km/h にならないことがあるのを修正
v1.06n ・フォント選択ダイアログで,TrueType フォント以外を選択できないようにした
・太字・斜体を正式サポートし,*.cfg に font_attr パラメータ追加
v1.06m ・フォントアンチエイリアスを有効にし,特に解像度が低い動画でのフォントの見栄えを改善した
※フォント・環境によっては見栄えが変わらない場合もあります
v1.06l ・Windows7 等でデフォルトのフォント表示が乱れるのを修正
v1.06k ・ラップタイム自動計測モードで不正終了する場合があるのを修正
v1.06j ・同期作業を簡略化した
・いつからか,AviUtl のサイズ変更フィルタが効かなくなっていたのを修正
v1.06i ・走行軌跡の G 色分けが緑になりにくいので,そのログの最大加速/減速 G のときに緑/赤になるようにした
v1.06h ・走行軌跡の G 色分けが逆になってた
v1.06g ・走行軌跡の G 色分けを縦 G のみで色分け (ブレーキングポイントがわかりやすいかと思って)
v1.06f ・自動計測モードで M キーを押したとき,他のマークを全部解除するようにした
v1.06e ・G 長さ = 0 のとき G 数値が出てなかったのを修正
・その他細かい bux fix
v1.06d ・横 G の演算に GPS の方位データを使用しないようにすることで,横 G の乱れを改善した(?)
 →Photomate887 は,進行方向が真北のときに正しくない方位を記録するようです.
v1.06c ・*.cfg ロード時に不正終了する場合があるのを修正
v1.06b ・速度・方位が記録されていない NMEA ファイルに対応
・タイム差分表示の精度を改善
v1.06a ・細かいバグ修正
・default フォントを Arial にしてみた
v1.06 ・設定ダイアログを見直し
v1.05 ・解像度によってフォントの大きさを変え,高解像度の動画でのメーターパネルの見栄えを改善した.
・フォントを変更可能にした (方法わっかりにくいけど)
・[AviSynth] font パラメータ追加
v1.04c ・解像度の小さい動画で同期情報のフォントサイズが小さくならないバグ修正
v1.04b ・2本に分かれているスライダバーを 1本にした
・同期情報の表示を変更
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さん

戻る