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