Bob
Bob (clip, float "b", float "c", float "height")
Bob はクリップを受け取って、Bob 方式によるインターレース解除を行います。Bob 方式では、ライン間を補間することによって、各フィールドをそれ自身がフレームとなるように拡大します。トップフィールドは、ボトムフィールドに比べて、ほんの少し上にずらされます。このため、実際に画像が上下に動いているようには見えないでしょう。しかし静止した場面では、補間によってもう一方のフィールドをあまり正確に再現できないため、「ゆらめく」ように見えるでしょう。
このフィルタは、その肝となる補間作業に BicubicResize を使用します。b と c の値は、調整することができます。さらに 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) | 0o | 1o |
1) | 2o | 3o |
縦に 2 倍に拡大
ライン番号 | フレーム 0 | フレーム 1 |
0) | 0o | 1o |
1) | 1i | 2i |
2) | 2o | 3o |
3) | 3i | 4i |
しかし、フィールドの物理的な位置が変化するため、これは間違いです。
一方、Bob はこれを正しく行います
ライン番号 | フレーム 0 | フレーム 1 |
0) | 0o | 0i |
1) | 1i | 1o |
2) | 2o | 2i |
3) | 3i | 3o |
オリジナルのフィールドを厳密に保持し、失われたラインを埋めるだけにするには †
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 を参照してください。