2016年5月27日金曜日

CombMask

Avisynth2.6/Avisynth+用のプラグイン、CombMask.dllの配布を開始しました。

ソースコード

バイナリ

このフィルタ、元々は3年くらい前に書いてそのままバイナリ配布とかせずにほっぽってたものなのですが、誰か別の人がビルドして配布していたようです。

書いたきっかけはたしかvapoursynthのVIVTCがオリジナルのTIVTCと違ってedeintオプションを使えないし、かといってTDeintとの連携もできない残念な仕様だったので、少しはましになるかと思ったんでしたかね。

なんでavisynth版も書いたかといえば、avisynthプラグインのほうがテストしやすく、サポートしているフォーマットも少なくて書きやすいからです。
まずavisynthプラグインを書いてみて、処理の全体的な流れや具体的な内容等のロジックを決めてある程度テストしてからでないと、なかなかvapoursynthプラグインは書けません。

で、結局作りこまずにそのまま…というのが真相なんですが、このたび誰かさんが配布してたバイナリが消えちゃったので自分のGithubレポのほうでバイナリ配布してくれないかとお願いメールが来まして、正式に配布することにしたついでにコードの見直しや機能追加もしました。

具体的には
・Avisynth+MT対応で、SetFilterMTModeが使える環境では自動的にMT_NICE_FILTERとして登録されます。
・AVX2も使えるようにしました(メモリアライメント等の都合上、Avisynth+MTのみ)。
・縞検出にTIVTC等のmetric1も使えるようにしました。
・コードがちょっと綺麗になりました(と、自分では思っている)。
といった感じです。

縞検出のmetric1は、そもそもTIVTC以前のdecombパッケージやMaskTools1のCombMask()で使われているものなんですが、はっきりいってインタレ縞検出用だと誤爆しまくって使えないんじゃないかと思います。
しかし、世の中には単に縦方向のみのノイズ検出フィルタとしていまだにMaskTools1を使っている人がいるようなので追加しました。
MaskTools1のはSIMD化されてないのでクソ遅いですし。

MaskTools版の
CombMask(clip, thY1=x, thY2=x, Y=3, U=1, V=1)
と、こっちの
CombMask(clip, cthresh=x, mthresh=0, chroma=false)
で、同じになります。
UやVだけに使いたい場合はUToY8/VToY8を併用してください。

それにしてもAVX2、なかなか速くなりませんね(HaswellではSSE2比120%弱くらいかな)。
SSE2がPen4で登場してCore2でまともになるまでに6年くらいかかったので、5年後くらいには180%くらいにはなってるんじゃないかとは思うんですが…。

2016年5月21日土曜日

TMM2

TMMをavisynth2.6/avisynth+用に書き直しました。

ソースコード

バイナリ

※ TMM2_avx2.dllはAVX2が使えるバージョンです。Nehalemとかだと多分動きません。
※ aviisynth+ではMT_NICE_FILTERとして使えます。なお、FilterModeはスクリプト初期化時に自動的に登録されますのでSetFilterMTMode()は必要ありません。

書き始めたのは結構前なのですが、8割くらいできたところで飽きてほっぽってたら某所に催促らしきものが書かれてたのでとりあえず動くようにしてみました。

元はC++(というかほぼC)のみのコードだったので、SSE2/AVX2を追加してみたら4倍弱速くなりました。
ほんとはもうちょっと早くなると思ってたんですが、フィールド別に作られた2つのモーションマスクを一つに組み立てる最終工程で大幅にスピードダウンしてしまうので、それほどでもなかったようです。
lengthを10固定にすれば多少は改善の余地はある?

あと、最後の工程で出力がオリジナルのTMMとちょっと変わってしまっているようです。
どこで変わってるのか何度もコード見直してみたんですがよくわからないし、そもそもそれでどれくらい影響が出るのかもさっぱりわかりません(エンコとかもう数年やってないし…)。

とりあえず公開しておきますので、もし不具合見つけたら教えてください。
つーか、だれかどこで違いが出てしまうのか教えてお願い…。

2016年5月11日水曜日

vsavsreader その7

ひさびさにvsavsreaderを更新しました。

Gthubページ

バイナリ

VapourSynthもプラグインがそこそこ増えたりavisynth2.6用プラグインも使えるようになったりと色々変化してるので、今では誰が使ってるのかよくわかりませんが、今回から64bit版のdllも配布することにしました。

avisynth_c.hもavisynth+の最新のやつにしようと思ったんですが、ちょっと一部が壊れてるんですな、これが。

で、替わりにavisynth.hを使うことにしたので、C++で書き直しました。

2016年5月7日土曜日

VapourSource その2

VapourSourceを更新しました。

githubページ

バイナリ

前回が2013年7月31日ですから、約3年ぶりの更新のようです。
VapourSynthもいつの間にやらr32になってますな。
使い方自体は全く変わってませんが、VS2010からVS2015になったのでコードもちょっと改善しました。
といってもスピードは変わらないと思いますが…。

あと、今回は64bitのバイナリも入ってます。

2016年5月5日木曜日

ReduceFlicker

ReduceFlickerをavisynth2.6/avisynth+用に書き直してみました。

Githubページ
バイナリ

これまでにフリッカリングが起こってるようなソースを扱ったことがないので興味もなかったのですが、muken氏がわざわざVapourSynthに移植したりしているのを見るに、需要が全くないわけではないらしい。
ひょっとすると時間軸NRフィルタとして使っている人でもいるのかしら?とも思ったわけですが、動きが大きいとけっこうアーティファクトも発生しますしなんとも微妙なフィルタです。

とりあえずオリジナルのReduceFlicker.dllに入ってる3つのフィルタ(ReduceFlicker,ReduceFluctuation,LockClense)のうち、AvsRecursionが必要ないReduceFlickerだけを実装しています。

それにしてもKassandroプラグインのわけわからなさったらほんと凄まじいわ…