Два скрипта, которые помогут Вам увидеть, имеет ли Ваш клип верхнее полем первое (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