Bob

Bob (clip, float "b", float "c", float "height")

Bob はクリップを受け取って、Bob 方式によるインターレース解除を行います。Bob 方式では、ライン間を補間することによって、各フィールドをそれ自身がフレームとなるように拡大します。トップフィールドは、ボトムフィールドに比べて、ほんの少し上にずらされます。このため、実際に画像が上下に動いているようには見えないでしょう。しかし静止した場面では、補間によってもう一方のフィールドをあまり正確に再現できないため、「ゆらめく」ように見えるでしょう。

このフィルタは、その肝となる補間作業に BicubicResize を使用します。bc の値は、調整することができます。さらに height パラメータを使って、垂直解像度を変更することも可能です。

Bob フィルタは、実際にフィールドの物理的な位置を移動させるわけではありません。ただフィールドを元々あった位置に戻すだけです。単に SeparateFields() でフィールドを分離すると、半分の高さのフレームが 2 つ得られます: 分離前のライン 0 は分離後のフレーム 0 の ライン 0 に、分離前のライン 1 は分離後のフレーム 1 のライン 0 になります。したがって、分離前のライン 0 とライン 1 は同じ位置になるのです!Bob は、さらに分離後のフレームを基本的に垂直方向に 2 倍にリサイズしますが、ちょうど元々あった位置に合わる形で、最初のフレームでは偶数ラインに対してオリジナルのラインを使用し、2 番目のフレームでは奇数ラインに対してオリジナルのラインを使用します。もし SeparateFields() の後に各フレームを垂直方向に 2 倍に拡大するなら、フィールドの物理的な位置が移動するため、正しい結果が得られないでしょう。

概要:
ライン 0o、1o、2o、3o、... がオリジナルのライン、0i、1i、2i、3i、... が補間されたラインであると仮定します。

ソース

ライン番号フレーム 0
0)0o
1)1o
2)2o
3)3o

フィールド分離後

ライン番号フレーム 0フレーム 1
0)0o1o
1)2o3o

縦に 2 倍に拡大

ライン番号フレーム 0フレーム 1
0)0o1o
1)1i2i
2)2o3o
3)3i4i

しかし、フィールドの物理的な位置が変化するため、これは間違いです。

一方、Bob はこれを正しく行います

ライン番号フレーム 0フレーム 1
0)0o0i
1)1i1o
2)2o2i
3)3i3o

オリジナルのフィールドを厳密に保持し、失われたラインを埋めるだけにするには

bob(0.0, 1.0)

Bob(0.0, 1.0) は、RGB と YUY2 に関してはオリジナルのフィールドを保持します。YV12 に関しては輝度は保持しますが、色差は保持しません。

b=0.0 かつ c=1.0 の場合のフィルタ係数は、x1.0/2.0 なら 0、x=0 なら 1 となります。オリジナルのフィールド位置で起こる ±0.25 のシフトのどちらでも、もう一方のフィールドについては、x=0.5/1.5 タップに対して -1/8 5/8 5/8 -1/8 という係数を伴う非常に簡潔なキュービックフィルタになります。

しかしながら、色差平面でのシフトは YV12 の場合は 0.125 だけなので、結局、タップが正確に同じ距離になりません。詳しくは、こちらの議論を参照してください。


註: このページは、AviSynth 2.5.8 RC1 に同梱されている英語版ヘルプの日本語訳です。原文は、AviSynth をインストールしたフォルダ内の Docs/english/corefilters/bob.htm にあります。なお、このページのテキストおよび画像のライセンスは、オリジナルのそれに準じます。詳しくは、AboutLicense を参照してください。

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