Теперь о техническом аспекте. XviD в отличии от х264 требует довольно значительного сжатия видеоряда, чтобы не получить артефактов в виде повышенной блочности изображения или звона на контурах. Если CRT панели как-то сглаживали указанный недостаток, то LCD панели оказались явно не готовы к просмотру столь низкосортного видеоматериала. Сжать видеоряд и очистить его от шумов можно применяя шумоподавление. Но обычный пространственнный или пространственно-временной шумоподавитель убивают всё изображение целиком. Обычно мы обращаем внимание на объеты движения и менее склоны рассматривать детали фона. С этой целью и был создан ряд функций шумоподавления на основе векторного анализа, где сами объекты движения подвержены минимальному уровню воздействия, а окружающий фон значительно сжимается. Рассмотрим это на примере фильтрового пресета
DVD MDegrain2 mask4 DLS:
1) После деинтерлейса и настройки параметров цветопередачи условно принимаем это за last и строим новый исходник:
source = last
2) Создаём предварительно отфильтрованный клип для облегчения векторного анализа, чтобы не отвлекаться на детали шума:
#preNR = source.degrainmedian(mode=3,limity=10,limituv=12). fft3dfilter(wintype=1,degrid=1,bw=32,bh=32,ow=16,o h=16,bt=3,sigma=2.5,sigma2=1.8,sigma3=1.5,sigma4=0 .5,plane=0)
preNR = source.degrainmedian(mode=3,limity=10,limituv=12). fft3dgpu(bw=16,bh=16,ow=8,oh=8,bt=4,sigma=2.5,sigm a2=1.8,sigma3=1.5,sigma4=0.5,plane=0)
#preNR = source.degrainmedian(mode=3,limity=10,limituv=12). dfttest(sigma=5, ftype=1, tbsize=3)
здесь очень важно оценить уровень и характер шума исходника и правильно настроить и подобрать парметры mode и пороги по яркости и хроме в фильтре degrainmedian и все значения sigma в фильтрах fft3dfilter или dfttest. Не стремитесь в этом деле переусердствовать, чтобы не потерять в конечном счёте на детализации изображения, особенно окружающего фона вокруг движущихся объектов. К вашему вниманию здесь предоставлены три варианта создания предварительно отфильтрованного клипа. Выбор за вами.
3) Создаём два супер-клипа:
а) для векторного анализа
preNR_super = preNR.MSuper(pel=2, sharp=2, rfilter=2)
б) для функции временнОго шумоподавления MDegrain2 , достаточно по одному уровню:
source_super = source.MSuper(pel=2, sharp=2, levels=1)
4) Далее строим вектора на основе клипа preNR_super и векторного анализа оценки движения :
vb2 = MAnalyse(preNR_super, isb=true, truemotion=true, delta=2, blksize=8, overlap=4, lambda=1000, search=5)
vb1 = MAnalyse(preNR_super, isb=true, truemotion=true, delta=1, blksize=8, overlap=4, lambda=1000, search=5)
vf1 = MAnalyse(preNR_super,isb=false, truemotion=true, delta=1, blksize=8, overlap=4, lambda=1000, search=5)
vf2 = MAnalyse(preNR_super,isb=false, truemotion=true, delta=2, blksize=8, overlap=4, lambda=1000, search=5)
Здесь самое пристальное внимание следует уделить выбору размера блока
blksize. Плагин mvtools2 предлагает выбор следующих значений: 4, 8, 16 и 32. И ежу понятно, что чем меньше размер блока , тем точнее анализ, но к сожалению увеличивается и длительность самого векторного анализа. Помимо этого при больших значениях
blksize и thSAD можно нарваться в итоге на появление блендов (призраков). Особенно это характерно при обработке аниме. Плагин mvtools2 имеет ещё одно характерное свойство: практически все последующие параметры настроек практически подогнаны под размер блока
blksize=8. Параметр перекрытия блоков обычно выбирается overlap=blksize2.
Параметр search определяет тип поиска движения. По умолчанию
search=4 (поиск шестиугольниками (Hexagon) подобно x264). Но я рекомендую
search=5 -поиск Нечетными мульти шестиугольниками (UMH). Ведь в настройках х264 мы не задумываясь выбираем UMH. Почему бы не включить подобный поиск и здесь, хотя это незначительно замедлит работу.
Об остальных параметрах
truemotion, когерентность (согласованность) векторов
lambda , режиму поиска
search и многих других лучше прочитать в описании плагина mvtools2. Слава богу и аллаху, разработчик этого плагина А.Балахнин (ака
Fizick) - наш человек

. Если ваш исходник содержит очень незначительный шум по хроме, примените в векторном анализе
chroma=false. Это значительно облегчит анализ и ускорит процесс.
5) далее на основе данных векторов строим по каждому свою маску оценки движения и получаем на выходе среднеарифметическую маску оценки движения:
maskp1 = MMask(vf1, kind=1, ysc=255).UtoY()
maskp2 = MMask(vf2, kind=1).UtoY()
maskp3 = MMask(vb1, kind=1, ysc=255).UtoY()
maskp4 = MMask(vb2, kind=1).UtoY()
tmask = average(maskp1, 0.25, maskp2, 0.25, maskp3, 0.25, maskp4, 0.25).spline36resize(source.width, source.height)
6) Посредством суммарной маски движения накладываем предварительно отфильтрованный клип
preNR на наш исходник
source и получаем более отфильтрованный исходник
source2:
source2 = mt_merge(source,preNR,tmask,Y=3,U=3,V=3)
7) Наконец мы подобрались к основному временОму шумоподавителю, основу всего этого скрипта- функции MDegrain2, после которой и получаем отфильтрованный клип:
NR = source2.MDegrain2(source_super,vb1,vf1,vb2,vf2,thS AD=300,thSCD1=320,thSCD2=100)
Функция базируется на данных векторного анализа и на базе супер клипа исходника
source_super, который позволяет оградить объекты движения от воздействия столь мощной функции шумоподавления. Важнейшим параметром здесь является
thSAD. Собственно величина этого параметра и задает уровень шумоподавления данной функции. Вы должны правильно оценить уровеь шума вашего исходника и не переусердствовать в этом плане. Возможно значение thSAD =300 будет слишком большим для вашего клипа, что приведёт к замыленности изображения и восковым лицам, как у мадам Тюссо. Часто для современных DVD значения thSAD=160...240 вполне достаточно. При уменьшении thSAD<120 можно нарваться на эффект подавления шума в шахматном порядке. Об остальных параметрах функции MDegrain лучше прочесть в описании плагина mvtools2.
8) Последующий раздел посвящён созданию маски краёв и на её основе и основе суммарной маски движения - построению логических масок для наложения отшарпованного клипа и клипа с применением фильтра DeBanding на очищенный клип:
# MASKING
mE = mt_edge(NR,"prewitt",0,255,0,0,V=1,U=1).mt_lut(exp r="x 1.8 ^",U=1,V=1).removegrain(4,-1).mt_inflate(U=1,V=1)
mL = mt_logic(tmask.invert(),mE,"min",U=1,V=1).removegr ain(20,-1)
mF = mt_logic(tmask,mE,"max",U=1,V=1).removegrain(20,-1)
9) для увеличения резкости изображения и повышения детализации изображения применяем фильтр LSFmod к отфильтрованному клипу и накладываем полученный результат на отфильтрованный клип с помощью логической маски
mL:
# SHARPENING
cf1 = MCompensate(source_super, vf1)
cb1 = MCompensate(source_super, vb1)
pmax = source.mt_logic(cb1, "max").mt_logic(cf1, "max")
pmin = source.mt_logic(cb1, "min").mt_logic(cf1, "min")
sharp = NR.LSFmod(defaults="slow",preblur="ON", strength=100)
shrp = sharp.mt_clamp(pmax,pmin,0,0,U=2,V=2)
sL = mt_merge(NR,shrp,mL,U=2,V=2)
Здесь важнейший параметр
strength -уровень повышения резкости. При завышенных значениях можно получить звон и ореолы на контурах. Внимательно подбирайте этот параметр!!! Немного помогает убрать эти артефакты и включение параметра preblur="ON".
10) Результатом воздействия столь мощных шумоподавителей является появление на изображении градиентов цветовых переходов. Особенно это проявляется вокруг светящихся объектов: лампа, фонарь, свеча. Для этих целей применяется фильтр DeBanding на основе скрипта Gradfun2dbmod.avs и полученный результат накладывается посредством маски
mF на предыдуший, в итоге и получаем итоговый результат:
# ENHANCING
GF = sL.GradFun2DBmod(thr=1.4,thrC=1.8,str=0.8,strC=0.0 ,temp=70,adapt=64)
FSc = mt_merge(GF,sL,mF,luma=true,U=3,V=3)
FSc#.mergechroma(NR)
Описание к параметрам настройки Gradfun2dbmod.avs лучше изучить детально и отдельно. Скажу, что очень важным является параметр
str, величина которого задаёт уровень вносимого яркостного мелко-дисперсионного шума, предназначенного, как для разбивания градиента цветовых переходов, так и для улучшения общей детализации изображения на замыленных исходниках. Очень важен и параметр
temp, который задаёт процентное соотношение накладываемого статического и динамического шума. Дело в том, что на статический шум мало рассходуется битрейт, на динамический напротив. К примеру для аниме параметр temp=100, для фильмов в режиме по умолчанию temp=50, но моя точка зрения temp=70...80. Таким образом с помощью GradFun2DBmod мы можем крупно-зернистый шум исходника подменить на мелко-дисперсионный шумок с регулируемой долей динамического шума не потеряв в детализации изображения, но существенно после всех манипуляций с шумоподавлением, сжав видеоряд.