Показать сообщение отдельно
Старый 03.12.2010, 13:07   #497
lion57
Зритель
Медаль пользователю. ЗОЛОТО Новичок
Регистрация: 22.02.2008
Адрес: Донецк
Сообщения: 50
Репутация: 23
Теперь о техническом аспекте. 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 мы можем крупно-зернистый шум исходника подменить на мелко-дисперсионный шумок с регулируемой долей динамического шума не потеряв в детализации изображения, но существенно после всех манипуляций с шумоподавлением, сжав видеоряд.
  Ответить с цитированием