古いタイプの日記ブログです。気まぐれに更新してます。【AviUtl】SSFの動画キャプ用に「間引ける1/2縮小フィルタ」を作った※このブログ記事は古いので、何か間違ったことを書いているかもしれません。AviUtlのフィルタ「間引ける1/2縮小」というのを作ったのでそれに関する薀蓄です。フィルタはいつものページにアップしてあります。うえぽんこのフィルタはセガサターンのエミュレータ「SSF」の動画を編集するために作りました。セガサターンの画面モードは320x224~704x480と幅広くあります。704x224なんてパターンもあったりします。SSFでは画面モードが320x224の時でも二倍の640x448で表示していたりします(遊ぶだけならその方が良いのですが)。動画にする場合は本来の320x224の方が容量の節約になります。そこでこのフィルタを作ってみました。この程度のことは既存のフィルタでも同じことができるかもしれません。●SSFの画面は縦方向に補間されている?下の画像はSSFの同じ場面をキャプしたものです。左はPrintScreenでキャプ、右はSSFのスナップショットでキャプしたものです。見ると左側の方が少しぼやけています。縦方向にだけ補間されているようです。WindowsのAPIか何かで縦に引き伸ばしているのだと思います。ディスプレイドライバーが親切に補間しているようです。FilteringをOFFにしても変化はなく同じ状態です。これをそのまま縮小してしまうとさらにぼやけた映像になります。言ってラインを間引いて縮小しても右側と同じになりません。した映像が欲しいなら、スキャンラインをONにしてキャプし、当フィルタで加工すると良いと思います。●インタレース解除にも使える?バーチャファイター2のフレームは下のようにブレブレしてます。テレビのNTSC方式が奇数ラインと偶数ラインを交互に表示しているのを利用して、解像度を上げつつ処理を半分にするためだったと思います。この動画をキャプするには、間引いて1/2に縮小すればいいようです。下の画像が単純に間引いたものです。テロップのWのあたりなどがギザギザしています。これはテロップが704x448なのに単純に間引いてしまったからです。そこで横方向だけはブレンドして縮小することにします。これでだいぶマシになりました。見るとギザギザしている部分もありますが、動画にしてしまえばあまり気にならないかと思います。●ベンチマーク「間引ける1/2縮小」には簡単なベンチマーク機能がついてます。マルチスレッドの効果があるのか調べるために付けてみました。4200+(AM2)、2.2GHzを約2.4GHzにオーバークロック、メモリはDDR2で約800MHz動作です。これで1280x720の画像を縮小した際の結果は以下の通りです。18.3%興味深いのは、縦ブレンドと横ブレンドは同じ計算量なのに横ブレンドの方が処理時間が短いことです。横ドット同士の方が連続したメモリなのでCPUの内部キャッシュにヒットしやすいためだと思います。メモリ転送量も減っているはずです。マルチスレッドで12%~25%ぐらい速度アップしてます。X2のL2キャッシュは非共有なのでマルチスレッドにすると都合L2キャッシュが2倍になるため、それによる速度アップがほとんどではと考えています。計算速度が倍になったことによる速度アップはそれほど無いと推測しています。L2キャッシュが大きいCPUだとマルチスレッドによる速度アップ率は少ないのではないでしょうか。あとマルチスレッドにしても処理時間が同じになってしまうのは、もしかしたらメモリ転送量の壁があるのかもしれません。四捨五入は0.5して小数点以下切捨てという処理が一般的です。-2.5のようにマイナス時が厄介です。これは-2.0にしても-3.0でも良いようですが、YUVの場合、-2.0の方に丸めてしまうと全体的に色が偏ってしまいます。気にならないレベルですが、そういう計算をしているフィルタがいくつも重なっていくと誤差が蓄積していき気になるレベルになるかもしれません。当フィルタではマイナスの値をとらない輝度情報は四捨五入、色情報はマイナスもあるので単純に切り捨てるようにしています。cal[i][j]%>">プロフィール名前:うえぽん自己紹介:セガのゲーム(主にメガドライブやセガサターン)が大好きです。