2016年3月16日水曜日

RemoveGrain解説 導入

RemoveGrainはkassandroことRainer Wittmann氏が書いた有名なavisynthプラグインです。
Didée氏のscriptなんかではほぼ確実に使われていたりと使用頻度は極めて高いプラグインなのですが、その使い方は自分にとって極めて難解なものでした。

難解な理由その1: ドキュメントが極めて読みにくい。
RemoveGrainのドキュメントはすべて英語で書かれています。
まあ英語だけならある程度気合いを入れれば読めないことはないのですが、なんと改行がほとんどありません。

数行読むだけでも息が詰まってくる上に、すぐにどこまで読んだのかわからなくなってしまうことの連続でいつも10分経たぬうちに挫折してしまいます。
まったく読みづらいったらありゃしねえ…。
RTFM(Read The Fine/F○○kin' Manual)なんて言葉がありますが、ここまでF○○kin'なマニュアルも珍しいんじゃないかと思います。

難解な理由その2: コードが極めて読みにくい。
「マニュアルがダメならソースコードを読んで理解すればいいじゃない」
そんな風に考えていた時期が俺にもありました。
CやPythonを少し覚えてちょぼちょぼとは書けるようになった頃だったと思います。
しかしその考えが甘かった。

RemoveGrainのバイナリパッケージにはRemoveGrain,Repair,DenoiseSharpen,RSharpenという4種類のDLLがCPUアーキテクチャやMSVCRTのスタティックリンク等の別に合計で13個(!)入っているわけですが、これらをビルドするためのソースコードはなんと約8900行からなるRemoveGrain.cppというたった一つのファイルしかありません。
いや、普通は複数のファイルで一つのバイナリなのに、一つのファイルで複数のバイナリっておかしいやろ…はじめて中身を覗いたときはそりゃもうびっくりしましたよ。

数行おきに現れる#ifdef~#elif~#endif、inline asm、そしてCPPマクロの嵐。
もはや狂気を感じるレベルです。
まあ、自分が書いたコードも(特に数年くらい前のやつとか)いま見直すと結構アレなんですが、このレベルになるともう、わざと書こうと思っても書けるものではありません。
実はわたくし、ドイツ人というものになんというかちょっとネガティブな偏見を持っているのですが、そのうちの半分くらいはこのRemoveGrainのドキュメントとコードに起因するものだったりします。

その後の展開
で、RemoveGrainのドキュメントとコードの解読はすっかり諦めていたわけですが、そのうちにFiresledge(cretindesalpes)氏がDitherPackage用に改造したりVapourSynthに移植されたりといったことが起こり、avisynthのほうでもtp7氏がRgToolsとしてrewrite版を出したおかげで大変わかりやすいソースコードが手に入るようになりました。
でもあいかわらずドキュメントは…。
で、自分用の備忘録も兼ねて解説でも書いてみようかなーとか思ったわけです。

tp7氏のRGToolsにはRemoveGrain、Repair、Clense、FowerdClense、BackwordClense、VerticalCleanerの計5つのフィルタが入っていますが、これらはすべてKassandro氏が書いたもののrewrite versionです。
解説はRGToolsのRemoveGrainをもとに行いますので、オリジナル(Kassandro版)とは違うところもあるかもしれません。

では次回よりRemoveGrainの解説を行います。

目次:
RemoveGrain解説 導入
RemoveGrainの基本事項
RemoveGrain mode1~mode4
RemoveGrain mode5~mode12
RemoveGrain mode13~mode16
RemoveGrain mode17~mode22
RmoveGrain mode23/mode24 及び総評
Repair
Clense
Clense 応用

0 件のコメント:

コメントを投稿