niiyan's blog

niiyanの個人ブログ。

ユーザー定義関数: FilterArea

2ちゃんねるAvisynthスレッドで、画面の一部分にだけフィルタをかける方法が話題に上がっていたので、試しに関数を作ってみました。

以前(AvisynthスレッドのPart15で)、同じ話が出た時に少し考えていたものなのですが、その時は、別の方がApplyZoneという関数*1を作られていたので、私は実際には作りませんでした。

では、なぜ今、(ApplyZoneがあるにも関わらず)作ったのかというと・・・気まぐれです(笑)

ApplyZoneとの違いは、LayerではなくOverlayを使ってるのでYV12でも通る点と、デバッグ(調整)モードくらいでしょうか。

十分にテストしたわけではありませんので、ApplyZoneを使った方が無難かもしれません。

更新履歴

  • ver 0.1: 2004-09-19 初版
  • ver 0.2: 2004-11-19 flipパラメータの追加

ダウンロード

FilterArea.zip - Windows Live (ver 0.2)

引数

  • filter: 使用したいフィルタ(必須)。
  • x, y: フィルタをかける位置(デフォルト: 0)。
  • width: フィルタをかける範囲の横幅(デフォルト: 32)。
  • height: フィルタをかける範囲の高さ(デフォルト: 32)。
  • flip: 反転モード。trueで指定した範囲の外側にフィルタを適用(デフォルト: false)。
  • debug; デバッグ(位置調整)モード(デフォルト: false)。

使い方

まず、使用したいフィルタ(下の例ではblur()を使っています)とdebug=trueだけ指定します。

FilterArea("blur(1)", debug="true")

すると、このように画面左上に赤い四角形が現れます。
この赤い四角形が、フィルタをかけたい範囲に来るように、x, y, width, heightを調整します。


x, y, width, heightで指定するのがどこになるのかというと、上の図のような感じ。
たとえば、x=16, y=16, width=32, height=32だとすると、次のように記述します。

FilterArea("blur(1)", 16, 16, 32, 32, debug="true") 

指定したい範囲に四角形が重なったら、debug=trueを外します(もしくはdebug=false)。

FilterArea("blur(1)", 16, 16, 32, 32) 

こんな感じです。

ちなみに、widthとheightは、念のため、8の倍数でなければエラーが出るように設定してあります。
もし、この制限が嫌な場合は、「エラー対策」の部分を削除してください。
ただし、フィルタによって16の倍数じゃないとダメなのとか、逆に何も制限がないのとかあるかもしれないので、そのあたりはフィルタの説明書を参考にしてください。

*1:ApplyZone は、AviSynth Wiki - ApplyZone にあります。また、ApplyZoneにフレーム範囲指定機能を追加するためのメタ関数 ApplyZoneRange については、AviSynth Wiki - ApplyZoneRange を参照してください。