2009年3月28日土曜日

AviSynth プラグインフィルタ自作(2)

 ほぼ移植完了.AviUtl と AviSynth の差分は,画像データに点を打つ関数と,画像のプロパティ (縦横サイズとか) 取得部分のみなので割とすんなりと実装は済んだ.

 …と思ったら,MediaPlayerClassic で映像と音声とメーターがズレてるよ_| ̄|○ MediaPlayerClassic で動画のプロパティ見るとなぜか 25fps になってた.ffdshow のオンスリーンディスプレイでは 29.970fps になってるのに,いみがわからん.
 調べてみたら,.mp4 が 25fps になってしまうのは ffdshow のけっこう有名な問題らしい.そういや,AviUtl で ffdshow 経由で .MP4 開いたときもおかしくて,mp4input.aui 経由で読むように変えた過去があったし.でも ffdshow の新しいバージョンでは改善されたとかの記述もあるし,よくわからん.
 でとりあえず Haali Media Splitter 入れたら直ったヽ(´ー`)ノ そういや昔はこれ入れてた気もするが,ffdshow が新しくなってから入れなくても .mp4 見れるようになった(?) ので,入れてなかった.Haali Media Splitter 入れてない状態で,ffdshow 再インストしたら .mp4 見れなくなったので,何らかの .mp4 スプリッタが入ってたらしく,25fps 化はこの謎スプリッタが原因みたい.

 で,いろいろ使ってみたのだが,AviSynth 対応は自分ですら予想しなかったほど便利であること発覚.例えば 320*240 で撮影した動画は,640*480 に拡大してからメーターを重ねるなんてことが簡単にできるし,↓のようなスクリプトで 2つの車載動画を並べて同時再生とかもできるし.

c1 = DirectShowSource("SANY0001.MP4").ConvertToYUY2(). \
VSDFilter( \
"vsd20090123_095934.log", \
video_start=8324, \
video_end=68034, \
log_start=4522, \
log_end=34980, \
map_length=240, \
map_size=460, \
map_angle=3406, \
lap_time=1, \
g_snake=1 \
). \
BilinearResize( 320, 240 )

c2 = DirectShowSource("SANY0002.MP4").ConvertToYUY2(). \
VSDFilter( \
"vsd20090123_111455.log", \
video_start=221, \
video_end=52536, \
log_start=8611, \
log_end=35296, \
map_length=240, \
map_size=460, \
map_angle=3406, \
lap_time=1, \
g_snake=1 \
). \
BilinearResize( 320, 240 )

StackHorizontal(c1, c2)

こりゃ便利だわヽ(´ー`)ノ

2009年3月25日水曜日

AviSynth プラグインフィルタ自作

 車載動画スーパーインポーズフィルタ (vsd_filter) を,AviSynth プラグインフィルタに改造中.なんでそんなことしてるかというと,
・AviUtl で合成した動画は,.avi に書き出さなくても AviUtl で再生することはできるが,プレーヤーとしていけてないので,DirectShow 経由で普通のプレイヤーで見たい.
・Adobe Premiere とかで合成した動画を編集したいとき,いったん .avi に書き出さないといけない.AviSynth 経由なら,いちいち .avi に書き出さなくても直に読み込める
と,それなりに利点はあるので.かつて DScaler フィルタで作ろうと思ったけど,DScaler のプラグイン SDK は有料(?) みたいなので断念していた.
 というわけでここを見ながら AviSynth のプラグインフィルタについて勉強中.

移植に当たっての問題点は,
・AviUtl でダイアログで設定してるパラメータを,AviSynth では GUI で設定できない.なので,AviUtl の設定パラメータをファイルにライト・リードする機能を付加した.これで AviUtl の GUI でパラメータ調整→パラメータ書き出し→AviSynth のスクリプト内でパラメータファイルを指定,のようにすればパラメータを読み込めるはず.
・YUY2 のオペレーション.線とか円を書くとかの関数はクラス化してるので移植は容易で,これらの関数は最終的に 1ピクセルの点を打つ関数を呼んでいるので,アプリに依存しているのはこの 1ピクセルの点を打つ処理だけ.問題は YUY2 フォーマットでは U/V が横 2ピクセルで 1データを共有しているので,1ピクセルだけ打つというのが (画質を追求すると) めんどくさいよなぁ…

2009年3月17日火曜日

カート動画分析

先日 YouTube にカートのヘルメットカメラ動画を up したのだけれど,知らない誰かが同じような動画を up していて,しかもその人のほうが早かったので,自分の弱点を知るべく素人なりにそれぞれの動画を分析してみた.


まず,コースを適当に 4つのセクターに分けてそれぞれの区間タイムを計る.(セクター分けやコーナー No. などは自分が勝手に割り振ったものなので…)
セクター1: スタートライン~3コーナー
セクター2: 4~8コーナー
セクター3: 8コーナー脱出~バックストレート
セクター4: 10コーナー~スタートライン

その結果:

セクター自分参考動画Diff
18.778.53+0.23
29.809.44+0.36
37.007.28-0.28
48.278.15+0.12

さらに,動画から走行ラインをなんとなく割り出してみて図に起こしたのが上の図.

セクター1 はそんなに差がないだろうと思っていたのに,0.2秒も差がついている.おそらく 1コーナーでブレーキを踏みすぎているのが原因かと思う.参考動画のほうが大回り傾向にあるが,大回りして速度を上げたほうがいいのだろうか?

セクター2 は自分でも苦手と思っていたが,やはりここで一番大差がついている.たぶん 4コーナーの進入がすべてではないかと.自分では 4コーナーで突っ込みすぎて 5, 6 コーナーが苦しくなってロスしていると思うが,参考動画では 4コーナの CP が割と奥にあった.
7, 8は,コンパクトに回って距離を稼ぐか,大回りして速度を稼ぐかいつも悩んでいる.結局 7-8 間はコンパクトに回って,8-9 間は大回りして速度を稼いでいたつもりだが,参考動画では逆で,7-8 間で速度を速めに立ち上げて,8は思いっきりショートカットして距離を稼いでいるんだろうか?

唯一勝っているセクター3,自分のカートが当たりだっただけかもしれないが,これまで何回か走った経験からここで前走と距離が詰まると感じたことが多かったので,セクター3 が速いってのはあながち間違いでないのかもしれない.というのも自分は体重が軽いので,加速だけはよいのだろう.

セクター4 は,ライン的には参考動画と変わらない気がしたのだけど,それでも 0.1 秒の差.ここもブレーキングの差なのかなぁ? 気になったのは,参考動画はあまりカウンターを当ててなかったこと.ライン以外に何か考慮すべき点があるのかもしれない (体重の乗せ方とか?)

とりあえず,優先順位的に,
・4 コーナーの CP を奥にとる
・8 コーナーはショートカット,8-9 は大回りせず距離を稼ぐ
・1 コーナーでなるべく速度を殺さない
・10 コーナーでなるべく速度を殺さない
でがんばってみようと思う.

2009年3月8日日曜日

2台目 DD-WRT @ WNDR3300

 ウチの自宅 LAN ネットワークは,有線 BB ルータ + La Fonera (無線 LAN AP) になっているが,そろそろ 11n MIMO + Gb Ether の 無線 LAN ルータを物色中.

 この条件に合うものはいくつかあるが,やはり DD-WRT が入れられるやつがいい.というのも,ルータがフリーズするのを避けるために定期的にリブートをかける,なんて事が簡単に出来るし,中身は素の Linux に近いだけにそのほかにも色々融通が効く.が,この条件がついたとたん,今のところ条件に合うやつがない.

 と,ふと目にとまったのが Netgear WNDR3300 の特売品 (\5,980).まさかね…と思って DD-WRT の対応機器リストを見てみたら,対応してるじゃん! 速攻でぽちっとな(笑) Gb Ether じゃないけど,11n MIMO だし,この値段なら万が一壊しても被害は最小で済む.

 というわけで,今日届いた.まずざっと正規 FW の設定項目を眺めてみる… 特に試すべき機能もないな.というわけで一度もネットに繋げることなく DD-WRT 化決行!
 最初は,筐体あけてシリアル線引っ張り出して,みたいなことを覚悟していたのだが,なんと標準の FW アップデート操作で DD-WRT が入った.箱から出してからわずか 10分足らずで DD-WRT 化完了www こりゃらくでいいわ.

 で,いろいろいじってみる.WNDR3300 は FLASH が 4MB と,LaFonera の半分なので,いくつかの機能が削られているらしいのだが,何が削られているのかわからなかった.あ,そういや CIFS マウントとかの項目がないなぁ.

 で,早速今のルータと置き換えて速度計測しようと思ったら… 外に出れねぇ_| ̄|○ DD-WRT の ssh コンソールでは外が見れるのだが,WNDR3300 の LAN ポートにつないだ PC とかから外に出れない.明日 iptables の設定でも見てみるか.

 仕方がないので,今は単なる AP と化している.

----
追記:
 iptables じゃなくて,DNS サーバの設定がまずかっただけだった orz 今のところ,何の問題もなく動いている模様.さすが,「標準 FW より安定している」と言われているだけあるw

 あんまり意味ないかもしれないけど,有線でスピードテストやってみた.(11n の LAN アダプタ持ってないので,無線はテストできないの(゜ーÅ)ほろり↓のほうで計測しました) PC対PC は,WAN・LAN にそれぞれつないだ PC 同士で iperf で計測,PC対WAN は,普通のブロードバンド速度計測サイトでの計測.

ルータPC対PCPC対WAN
Buffalo BBR-4HG53.4Mbps45Mbps
Netgear WNDR330040.9Mbps40.0Mbps
FON220113.63Mbps12.9Mbps

 素の状態 (セキュリティ関係を全部 OFF にした状態) で実測 90Mbps 出るといわれた 4HG と比べて,WAN アクセスする限りそんなに遅くはないのでまあまあ満足.
 しっかし,FON の遅さは際立ってるなぁw

 WNDR3300 の DD-WRT 化によって,FON2201 は完全に引退.SD カードでもくっつけて Web & メールサーバにでもしようかなぁ? そうしたら今の Linux サーバを引退させられるし.

----
4/5追記:
GW-US300MiniS を入手したので,こんな構成↓で 11n の速度計測してみた.
PC<--11g / 11n / 有線 -->WNDR-3300<--有線-->PC

有線11g (54Mbps)11n (135Mbps)
91.9Mbps9.5Mbps22.0Mbps

 無線 LAN の距離は 1m ほど離して.11n がなぜか 135Mbps でしかリンクできなかった.Buffalo だと「倍速リンク」なる項目があるらしいが,DD-WRT だとどの項目に相当するんだ? たぶんチャンネル帯域: 40MHz だと思うんだけど,それ設定しても 300Mbps にならなかった(´・ω・`) まぁ 20MHz に設定したら 65Mbps でリンクしたから,倍速っちゃ倍速なんだけどw
 で,実際測った見たら,意外とショボイねー.たとえ 300MHz でリンクできたとしても有線にはかなわねぇなぁ.無線 LAN で DLNA 環境構築しようとか思ってたけど,こりゃ無理かも知れんなぁ orz

2009年3月3日火曜日

簡易ラップタイム計測機能だけ使用

データロガーネタなんだけど,もはや PSP とは関係ないな…


めでたくカートでのヘルメットカメラ動画撮影に成功したので,これにラップタイムを合成表示させてみたくなった.ラップタイムのスーパーインポーズ機能自体はこのとき仕込んではあるのだが,あくまでも副次的な機能だったので,データロガーのログファイルを読み込まないとラップタイム計測機能は使えないようになっていた.

なので,さくっとメーター表示せずにラップタイム計測機能だけ使えるように改造.

ほしいひとはここからどうぞー.