Проверка порядка полей (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