### [yv12][yuy2][rgb32][rgb24]

# Pulldown

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

a, b: dwie klatki z pięciu, które zostaną wybrane przez filtr

Filtr Pulldown wybiera dwie z każdych pięciu klatek materiału video. Prędkość odtwarzania jest zmniejszana do dwóch piątych oryginalnej prędkości. Np. Pulldown(0,2) wybiera klatki 0, 2, 5, 7, 10, 12, itd. Dlaczego? Może to wydawać się nie jasne, że przeskok pomiędzy klatkami jest różny (o dwie klatki potem o trzy), więc małe wyjaśnienie:

0 | 1 | 2 | 3 | 4
5 | 6 | 7 | 8 | 9
10 | 11 | 12 | 13 | 14
15 | 16 | 17 | 18 | 19
20 | 21 | 22 | 23 | 24
25 | 26 | 27 | 28 | 29

Czyli w przypadku a=0, a b=2 to klatki czerwone odpowiadają argumentowi a, natomiast klatki zielone odpowiadają argumentowi b.

Filtr ten został stworzony w celu użycia go po filtrze DoubleWeave i jego celem jest odtworzenie oryginalnych klatek filmu, który został poddany konwersji 3:2.
Powodem, dla którego należy użyć jako pierwszego filtru DoubleWeave jest to, że karty przechwytujące łączą ze sobą pola w nieprawidłowy sposób. W znaczeniu pól, konwersja 3:2 daje następujący ciąg klatek: "A A B B B C C D D D ...", gdzie "A" do "D" oznaczają oryginalne klatki filmu. Karty przechwytujące łączą pola w klatki nie biorąc pod uwagę powyższego wzorca i w rezultacie otrzymujemy (fps=30):

A | B | C | D | D
A | B | B | C | D

Po wykonaniu instrukcji DoubleWeave każda para pól otrzymuje własną klatkę tak więc strumień video będzie wyglądał następująco (fps=60):

A | A | B | B | C | C | D | D | D
A | B | B | B | B | C | C | D | D
* |  |  | * |  | * |  |  | *

W tym momencie filtr Pulldown z argumentami 0,3 wybierze klatki oznaczone poprzez *. W ten sposób otrzymamy (fps=24):

A | B | C | D
A | B | C | D

Puldown(a,b) jest realizowany poprzez SelectEvery(5,a,b).AssumeFrameBased.

### translated by Dj_AnT