# Проверка порядка полей (CheckParity)

Два скрипта, которые помогут Вам увидеть, имеет ли Ваш клип верхнее полем первое (Top-Field-First) или нижнее полем первое (Bottom-Field-First).
(Прим. ред.: при необходимости Вы можете преобразовать цветовой формат клипа).

### Для YUY2 и RGB материала (автор скрипта trbarry):

    function CheckTopFirst(clip v1) {
    v2 = v1.subtitle(v1.GetParity()?"TF":"BF")
    v3 = v2.GetParity()?v2.ComplementParity():v2
    t0 = v3.ComplementParity()
    t1 = t0.separatefields()
    t2 = compare(t1.trim(1,0),t1)
    b1 = v3.separatefields()
    b2 = compare(b1.trim(1,0),b1)
    return stackvertical(t2,b2)
    }

Использование:

    v=AviSource("file.avi")
    CheckTopFirst(v)

Для проверки замените имя файла на нужное вам и загрузите скрипт в VirtualDub.
Затем просмотрите (прокрутите) несколько кадров. Скрипт будет использовать `Compare` чтобы оценить две возможности и вертикально разложит результаты. Это покажет две полезные детали информации. Сначала просмотрите (при прокрутке), верхняя или нижняя половина экрана вероятно дергается, и выберите другую половину.
Еще тоже достоверна величина среднего отклонения "Avg Mean Abs Dev", которая отображается для каждой половины. Выберите верхний (TopFirst=1) или нижний (TopFirst=0) клип, который имеет меньшую величину отклонения (Avg Mean Abs Dev).

### Для YV12 материала (требует AviSynth выше 2.52, автор скрипта sh0dan)

    function CheckTopFirst3(clip v1){
    global top_hits=1
    global bot_hits=1
    global text = ""
    global text2 = ""
    v1 = assumeframebased(v1)
    global tff=assumetff(v1).separatefields().bob()
    global bff=assumebff(v1).separatefields().bob()
    istff = tff.subtitle("Is frame TFF: TRUE").frameevaluate("top_hits=top_hits+1.0")
    isnottff = tff.subtitle("Is frame TFF: FALSE").frameevaluate("bot_hits=bot_hits+1.0")
    outclip = conditionalfilter(tff,istff, isnottff, "yDifferenceFromPrevious(tff)+ydifferenceToNext(tff)","<","yDifferenceFromPrevious(bff)+yDifferenceToNext(bff)",false)
    outclip = frameevaluate(outclip,"text = "+chr(34)+"STATS: TFF = "+chr(34)+" + string(100.0*top_hits/(top_hits+bot_hits)) + " + chr(34) + "%"+chr(34))
    outclip = frameevaluate(outclip,"text2 = "+chr(34)+"STATS: BFF = "+chr(34)+" + string(100.0*bot_hits/(top_hits+bot_hits)) + " + chr(34) + "%"+chr(34))
    outclip = scriptclip(outclip, "Subtitle(text,y=50)")
    outclip = scriptclip(outclip, "Subtitle(text2,y=70)")
    return outclip
    }

    AVISource("file.avi")
    ConvertToYV12()
    CheckTopFirst3()

(прим.ред. - в оригинале второй скрипт тоже называется CheckTopFirst, но в интернете встречается и с тройкой в конце.)
Этот скрипт позволяет в полуавтоматическом режиме определить порядок полей в клипе.
Для проверки замените имя файла на нужное вам и загрузите скрипт в VirtualDub. Прокрутите вперёд несколько кадров, - и вы тогда увидете статистику (STATS) в процентах (в виде надписи поверх клипа), сколько кадров выглядят подобно TFF, и сколько выглядят подобно BFF.
Если STATS: TFF близко к 100%, то клип имеет верхнее поле первым, если STATS: BFF близко к 100%, то нижнее поле первым.
Порядок (TFF) присущ и передаваемой дальше этой части клипа, так что если она дергается, это тоже показывает, что Ваш клип - BFF.

Страница на сайте Avisynth: http://www.avisynth.org/CheckParity
Обсуждение на форуме doom9: http://forum.doom9.org/showthread.php?t=34511

`$English Date: 2004/03/08 (на сайте, нет в документации AviSynth) $
Русский текст Eugene Vasiliev 25.06.2005 (eugvas@mccme.ru)
Редакция Fizick 26.06.2005 http://bag.hotmail.ru`