## Pulldown

`Pulldown` (clip, int a, int b)

`Pulldown` フィルタは、ソースビデオから 5 フレームごとに 2 フレームずつを単純に選択します。フレームレートは、オリジナル値の 2/5 に減少します。
例えば、`Pulldown`(0,2) はフレーム 0, 2, 5, 7, 10, 12 などを選択します。

このフィルタは `DoubleWeave` の後に使用することを想定して作られており、そしてその目的は 3:2 プルダウン*1処理を使ってビデオに変換された映画のオリジナルのフレームを取り出すことにあります。

先に `DoubleWeave` を使う必要がある理由は、キャプチャーカードが間違った方法でフィールドを合成することにあります。フィールドの点から見ると、3:2 プルダウンのシークエンスは単に「A A B B B C C D D D ...」です（ここで A から D はオリジナルのフィルムのフレームを表します）。しかし、キャプチャカードは、プルダウンのパターンを尊重せずにこれらのフィールドを合成してフレームにします。そして、次のようなフレームが得られます:

    A   B   C   D   D       (30fps)
    A   B   B   C   D

このパターンでは、フレーム C は単独で表示されることはありません。`DoubleWeave` の後、フィールドのすべての組み合わせはそれぞれのフレームを得ます。そのため、ビデオストリームはこのように開始されます:

    A A B B C C D D D       (60fps)
    A B B B B C C D D
    *     *   *     *

今、映画の各フレームは、それぞれ少なくとも 1 つのビデオフレームを持っています。この時点で、``0,3`` という実引数を渡して `Pulldown` フィルタを適用すると、*（アスタリスク）で印を付けたフレームが選択されます。そして、以下のフレームが得られます:

    A     B   C     D       (24fps)
    A     B   C     D

... まさに求めた通りのものです。

説明するには非常に複雑ですが、実際のところ、プルダウンを元に戻すのは、ただ単にボイラープレートコード*2を挿入するだけの問題です。``ShowFiveVersions`` の例を参照してください。

`Pulldown`(a,b) は、内部的には `SelectEvery(5,a,b).AssumeFrameBased` として実装されています。

`原文 Date: 2008/01/02 01:13:14`
`日本語訳 $Date: 2008/06/22 07:41:18 $`

- 訳者註:
  - *1 参考: 24Pと24PAの違い、3:2 および 24Pa プルダウンについて
  - *2 定型コード。原文では boilerplate code。boilerplate には「決まり文句」などの意味がある。