DebugFields

これは、かつて「にーやんのAviSynthのぺーじ」で公開されていたものを転載したものです。かなり前に作った関数ですので、動作の保証はできません。

トップ・ボトムフィールド表示関数(DebugFields)

 Welcome to jumper's homepage.にあるmopuさん作のトップ・ボトムフィールド表示フィルタ(AviUtl用)風の関数を作ってみました。実際にはjumperさんのホームページにある画像をヒントに作成しただけですので、mopuさんのフィルタとは別物です。

 使用するには、まず、次のDebugFields関数をコピーし、スクリプト内の任意の位置に貼り付けてください。

コード

# DebugFields関数

function DebugFields(clip clip, string "filter", int "matrix", int "x")
{
#//--- デフォルト値の設定 ---//
filter = default(filter,"")
matrix = default(matrix, 0)
x = default(x, 0)
font = "MS P Gothic"
fcolor = $ffffff
size = 16
tff = GetParity(clip)
width = Width(clip)
height = Height(clip)
#//--- エラーチェック ---//
assert(x%2==0,"xの値は2の倍数にしてください。")
assert(x<=width/2,"xの値は画像の幅の2分の1以下にしてください。")
#//--- メイン ---//
c1 = clip.SeparateFields()
e1 = tff ? SelectEven(c1) : SelectOdd(c1)
o1 = tff ? SelectOdd(c1) : SelectEven(c1)
e3 = Crop(e1,x,0,width/2,height/2)
o3 = Crop(o1,x,0,width/2,height/2)
c2 = (filter == "") ? clip : Eval("clip." + filter)
c3 = c2.SeparateFields()
e2 = tff ? SelectEven(c3) : SelectOdd(c3)
o2 = tff ? SelectOdd(c3) : SelectEven(c3)
e4 = Crop(e2,x,0,width/2,height/2)
o4 = Crop(o2,x,0,width/2,height/2)
e1 = Subtitle(e1,"フィルタ適用前(トップフィールド)",font=font,size=size,text_color=fcolor)
e2 = Subtitle(e2,"フィルタ適用後(トップフィールド)",font=font,size=size,text_color=fcolor)
e3 = Subtitle(e3,"フィルタ適用前(トップフィールド)",font=font,size=size,text_color=fcolor)
e4 = Subtitle(e4,"フィルタ適用後(トップフィールド)",font=font,size=size,text_color=fcolor)
o1 = Subtitle(o1,"フィルタ適用前(ボトムフィールド)",font=font,size=size,text_color=fcolor)
o2 = Subtitle(o2,"フィルタ適用後(ボトムフィールド)",font=font,size=size,text_color=fcolor)
o3 = Subtitle(o3,"フィルタ適用前(ボトムフィールド)",font=font,size=size,text_color=fcolor)
o4 = Subtitle(o4,"フィルタ適用後(ボトムフィールド)",font=font,size=size,text_color=fcolor)
f1 = Crop(clip,x,0,width/2,height)
f1 = Subtitle(f1,"フィルタ適用前(フレーム)",font=font,size=size,text_color=fcolor)
f2 = Crop(c2,x,0,width/2,height)
f2 = Subtitle(f2,"フィルタ適用後(フレーム)",font=font,size=size,text_color=fcolor)
clip = (matrix == 1) ? StackHorizontal(f1,StackVertical(e3,o3)) :
\ (matrix == 2) ? StackHorizontal(f1,f2) :
\ (matrix == 3) ? StackVertical(e1,e2) :
\ (matrix == 4) ? StackVertical(o1,o2) :
\ (matrix == 5) ? StackHorizontal(StackVertical(e3,o3),StackVertical(e4,o4)) :
\ StackHorizontal(f2,StackVertical(e4,o4))
return clip
}

シンタックス

 書式は以下のとおりです。

DebugFields(clip clip, string "filter", int "matrix", int "x")

パラメータ

  • filter:フィルタ
  • matrix:表示方法の切り替え(0〜5)
  • x:表示位置の調整(0〜画像の幅の1/2まで)

 filterに適用するフィルタを記述します。二重引用符(")で囲んでください。ただし、フィルタ内に二重引用符が含まれる場合は、「"""フィルタ"""」のように二重引用符を3つ連ねて囲みます。ただし、クロップやリサイズなど画像サイズが変化するフィルタには対応していません(リサイズフィルタを使用する方法については後述)。

 matrixには0から5までの数値が入り、それぞれ異なる表示方法に切り替わります。

 xは2の倍数で、画像の幅の2分の1以下にしてください。

 なお、画像の横幅は4の倍数であることが前提です。 以下の使用例は、古いバージョンの関数を使用したものです。 現在のバージョンとは、画像上のテロップや拡大モードの有無など、異なる点があります。

使用例

使用例(1)

DebugFields("KenKunNR(256,3,40)", 5, 30)
debugfields2.png
  • filter:"KenKunNR(256,3,40)"(実験用に強めの設定)
  • matrix:5(4分割画面)
  • x:右へ30ずらす。

 左半分がフィルタ適用前の画像で、右半分がフィルタ適用後の画像です。

 KenKunNRはフィールド別の処理に対応していないため、各フィールドの画像がブレンドされたようになっています。

使用例(2):画像サイズの変更をともなうフィルタの場合

LanczosResize(320,240)
DebugFields("", 0, 30)
debugfields3.png
  • filter:""(フィルタなし)
  • matrix:0(3分割画面1)
  • x:右へ30ずらす。

 画像サイズの変更をともなうフィルタを指定することはできないので、チェックしたいフィルタの直後にフィルタ指定なしでDebugFields関数を実行します。

debugfields4.png
SeparateFields()
LanczosResize(320,120)
Weave()
DebugFields("", 0, 30)

 比較のためにパターン1の方法でフィールド別に処理してみました。

 なお、この方法の場合、「フィルタ適用前」という表示が出ていても、実際には「フィルタ適用後」の画面になります。

最終更新日 2004年9月30日

最終更新日時: 2014-03-11 (火) 03:47:36 (3692d)