|
Tim68
Стаж: 14 лет 9 месяцев Сообщений: 712
|
Tim68 ·
13-Янв-13 19:06
(11 лет 10 месяцев назад, ред. 13-Янв-13 21:41)
Tempter57
Чем была вызвана столь резкая реакция? Не имел ни малейшего желания чем-либо обидеть, наоборот огромное спасибо за желание помочь.
Tim68 писал(а):
57343519Потому Я и отключал ее в MSRmod.avs.
В MSRmod.avs Я комментировал строку 8 bit ного вывода
Код:
#Dither_convert_rgb_to_yuv (r, g, b, matrix="709", lsb=false, mode=7, ampn=1, ampo=0) # 8 bit output
Чтоб не допускать повторения в DitherPost (mode=7, ampn=1, ampo=0) скрипта.
Tim68 писал(а):
57344689Ответ см.выше.
Ответ в этом - же посту чуть выше
Tim68 писал(а):
57344689Самоподключаемые функции ХХХ.avsi расположенны в папке AviSynth 2.5\plugins, больше там ничего нет, все dll и avs-ки Я загружаю из отдельной папки другого (рабочего) диска. Какого либо другого софта, в том числе и XviD4PSP 5, способного устанавливать AviSynth-библиотеки на PC нет.
Т.е. повторения одних и тех же плагинов в разных папках недопускаю.
Tempter57 писал(а):
57345305вы там чего-то химичите, экспериментируете, а потом мне мозг взрываете. Есть скрипт, есть пресет, они прекрасно работают.
Без химии. Провел опыт и над Вашим вариантом, невнося даже малейших изменений прописал только необходимые пути.
скрипт
LoadPlugin("E:\Work\Filters\RemoveGrainSSE2.dll")
LoadPlugin("E:\Work\Filters\RepairSSE2.dll")
LoadPlugin("E:\Work\Filters\nnedi3.dll")
LoadPlugin("E:\Work\Filters\mvtools2mod.dll")
LoadPlugin("E:\Work\Filters\AddGrainC.dll")
LoadPlugin("E:\Work\Filters\mt_masktools-26.dll")
LoadPlugin("E:\Work\Filters\dfttestmod.dll")
LoadPlugin("E:\Work\Filters\aWarpSharp2.dll")
LoadPlugin("E:\Work\Filters\dither.dll")
LoadPlugin("E:\Work\Filters\flash3kyuu_deband.dll")
#dither.avsi
#mt_xxpand_multi.avsi
Import("E:\Work\Filters\MSRmod.avs")
Import("E:\Work\Filters\func_HighPassSharp.avs") #setmtmode(2)
setmemorymax(768) mpeg2source("E:\Videos\THE GREAT RACE\RACE.d2v",cpu=4)
# MSR_mod( W=1280, H=544, HPS=true, r=0.15, smode=2, radius=12, var=6, uvar=0)
# MSR_mod( W=1280, H=720, HPS=true, r=0.15, smode=2, radius=12, var=6, uvar=0) MSRmod( W=1280, H=544, HPS=true, r=0.15, GF3=false)
# MSRmod( W=1280, H=720, HPS=true, r=0.15, GF3=false)
# MSRmod( W=1280, H=720, HPS=true, r=0.15, GF3=true, smode=0, thr=0.5, radius=12) OUTPUT_BIT_DEPTH = 8 # изменить 10 на 8 при отладке или установить 16 без обрезания верхних битов скриптом (OUTPUT_BIT_DEPTH == 16) ? Eval("""
Dither_convey_yuv4xxp16_on_yvxx() #16-бит
""") : (OUTPUT_BIT_DEPTH == 10) ? Eval("""
Dither_quantize(10, mode=6,reducerange=true) #10-бит
Dither_convey_yuv4xxp16_on_yvxx() #
""") : DitherPost() #8-бит
MSRmod
## http://forum.doom9.org/showthread.php?t=142704
## ==== plugins ===
## RemoveGrainSSE2.dll
## RepairSSE2.dll
## nnedi3.dll
## mvtools2.dll
## mt_masktools-26.dll
## dfttest.dll v.1.9.2
## dither.dll
## dither.avsi
## flash3kyuu_deband.dll
## mt_xxpand_multi.avsi
## HighPassSharp.avs
function MSRmod(clip clp, int "W", int "H", float "thr", float "r", int "smode", int "radius", bool "HPS", bool "GF3")
{
# Change those constants to tune for the best result of interpolation
# Resize
W = Default( W, 1280 )
H = Default( H, 720 )
# MSuper
hpad = 8 # 4
vpad = 8
pel = 2 # 1 or 4
rfilter = 4 # 2
sharp = 2 # 2
isse = true
# MAnalyse
blks = 16
blksV = 8
overlap = blks / 2
overlapV = blksV / 2
search = 5
searchparam = 3
dct = 5
# MCompensate
tSAD = 10000
tCD1 = 400
tCD2 = 130
# GradFun3
GF3 = Default( GF3, false )
smode = Default( smode, 0 ) # GradFun3 "smode" parameter
thr = Default( thr, 0.5 ) # GradFun3 "thr" parameter
radius = Default( radius, 12 ) # GradFun3 "radius" parameter
# Overlay
opacity = 0.5
# Sharpening
HPS = Default( HPS, true )
r = Default( r, 0.15 )
ox = clp.width
oy = clp.height
brc = BilinearResize(clp, ox * 2, oy * 2)
super = MSuper(brc, hpad=hpad, vpad=vpad, pel=pel, sharp=sharp, rfilter=rfilter)
vec1 = MAnalyse(super, truemotion=true, isb=true, delta=2, blksize=blks, blksizeV=blksV, overlap=overlap, overlapV=overlapV, search=search, searchparam=searchparam, pelsearch=pel, lambda=768, dct=dct)
vec2 = MAnalyse(super, truemotion=true, isb=true, delta=1, blksize=blks, blksizeV=blksV, overlap=overlap, overlapV=overlapV, search=search, searchparam=searchparam, pelsearch=pel, lambda=768, dct=dct)
vec3 = MAnalyse(super, truemotion=true, isb=false,delta=1, blksize=blks, blksizeV=blksV, overlap=overlap, overlapV=overlapV, search=search, searchparam=searchparam, pelsearch=pel, lambda=768, dct=dct)
vec4 = MAnalyse(super, truemotion=true, isb=false,delta=2, blksize=blks, blksizeV=blksV, overlap=overlap, overlapV=overlapV, search=search, searchparam=searchparam, pelsearch=pel, lambda=768, dct=dct)
clp = NNEDI3_rpow2(clp, rfactor=2, cshift="lanczosresize", qual=2, nsize=4, nns=4)
clp = (HPS == true ) ? clp.HighPassSharp(r).AddGrainC(12) : \
clp.Sharpen(1.0).AddGrainC(12)
super = MSuper(clp, hpad=hpad, vpad=vpad, pel=pel, sharp=sharp, rfilter=rfilter)
c1 = MCompensate(clp, super, vec1, thSAD=tSAD , fields=false, thSCD1=tCD1, thSCD2=tCD2)
c2 = MCompensate(clp, super, vec2, thSAD=tSAD , fields=false, thSCD1=tCD1, thSCD2=tCD2)
c3 = MCompensate(clp, super, vec3, thSAD=tSAD , fields=false, thSCD1=tCD1, thSCD2=tCD2)
c4 = MCompensate(clp, super, vec4, thSAD=tSAD , fields=false, thSCD1=tCD1, thSCD2=tCD2)
t1 = Overlay(clp, c1, opacity=opacity)
t2 = Overlay(clp, c2, opacity=opacity)
t3 = Overlay(clp, c3, opacity=opacity)
t4 = Overlay(clp, c4, opacity=opacity)
f1 = Overlay(t1, t2, opacity=opacity)
f2 = Overlay(t3, t4, opacity=opacity)
Overlay(f1, f2, opacity=opacity)
mergechroma( awarpsharp2(depth=12,thresh=255,blur=3) )
# DEBANDING
(GF3 == true ) ? GradFun3(smode=smode, thr=thr, radius=radius, lsb=true): \
f3kdb(sample_mode=2,dynamic_grain=false,keep_tv_range=false,dither_algo=3,output_mode=1,output_depth=16,y=64,cb=48,cr=48,grainY=52,grainC=36)
Dither_resize16 (W, H)
Dither_convert_yuv_to_rgb (matrix="601", output="rgb48y", lsb_in=true)
r = SelectEvery (3, 0)
g = SelectEvery (3, 1)
b = SelectEvery (3, 2)
Dither_convert_rgb_to_yuv (r, g, b, matrix="709", lsb=true, mode=7, ampn=1, ampo=0, output="YV16") # 16 bit output
# Dither_convert_rgb_to_yuv (r, g, b, matrix="709", lsb=false, mode=6, ampn=1, ampo=0) # 8 bit output
return (last)
}
В окне предпросмотра как VD, так и AvsP - "зелень".
Вывод. Как бы Я не химичил, не эксперементировал со скриптами проблемма заключается не в этом, а скорее всего в
Tim68 писал(а):
57317612Какая-то карусель с версиями применяемых фильтров в том числе и mt_masktools
как и указал в первоначальном посте.
Незнаю, если Вы являетесь автором MSRmod.avs, будет ли Вам интересно почему функция имеет нестабильный результат? Хотя возможно устраивает, что она работает у Вас?
|
|
george$t
Стаж: 14 лет 8 месяцев Сообщений: 4296
|
george$t ·
13-Янв-13 23:51
(спустя 4 часа)
Tim68
У меня тоже всё нормально работает. Запускал BlowUp Dither, MSR, MSRmod, MSRmod MD-MC. Зелень наблюдается только на 16 бит выводе, но так и должно быть. На 8 бит полёт штатный.
|
|
Tempter57
Стаж: 16 лет 1 месяц Сообщений: 4960
|
Tempter57 ·
14-Янв-13 01:11
(спустя 1 час 20 мин., ред. 14-Янв-13 15:57)
Tim68
Может хватит уже во всех огрехах винить кого-то, давайте начните с себя. Лично у меня два плагина масок: mt-masktools-25.dll и mt-masktools-26.dll из v.2.0.48.0. Присутствуют и старые MaskTools.dll и MaskTools149.dll. Но думаю дело не в масках , а в RemovegrainSSE2.dll, который у вас бог весть откуда от разных издателей со всевозможными оптимизациями под работу в предпоследней версии AviSynth 2.6 MT (таким вероятным пакетом плагинов является пакет от Vit). Как вариант: стоит ещё может у вас Win8, предназначенная для планшетов, а не для нормальной работы по обработке и кодированию видео, я уже молчу про игры...
Свой архив plugins_filtering я никогда ни от кого не скрывал и частенько выкладываю. Поищите его на ветке XviD 4PS5 или обработке видео или, просто установите последнюю версию XviD 4PSP5.10.305. Пусть там пакет plugins не столь новый, как у меня на компе, но рабочий. Если потребуется, скину вам и последний.
Я целый день пытался спровоцировать ситуацию с 16 битным выходом в MSRmod.avs в самом элементарном скрипте
Код:
MSRmod( W=1280, H=544, HPS=true, r=0.15, GF3=false)
DitherPost(mode=6, ampn=1, ampo=0)
Но мне так и не удалось получить зелень. Даже правильно для этой глупой затеи изменял строку выхода в скрипте MSRmod.avs, если вы уж так пожелали сделать суммарный выход 8 битным (хотя, что это меняет в сравнении с тем, что по умолчанию?):
Код:
Dither_convert_rgb_to_yuv (r, g, b, matrix="709", lsb=true, mode=-1, output="YV16") # 16 bit output
Ведь строка то предназначалась именно для 16 битного выхода для кодирования х264-10bit.exe, по тому и имела вид
Код:
Dither_convert_rgb_to_yuv (r, g, b, matrix="709", lsb=true, mode=7, ampn=1, ampo=0, output="YV16") # 16 bit output
и там вообще не предусматривалось подключение функции DitherPost(), а она служила для отладки, чтобы временно подключить и показать людям: всё нормально, ребятки, не бойтесь зелени, вот она ушла, так и должно быть и потом включить назад 10 битную или 16 битную обработку и смело начинать кодирование х264-10bit.exe
|
|
Tim68
Стаж: 14 лет 9 месяцев Сообщений: 712
|
Tim68 ·
14-Янв-13 18:39
(спустя 17 часов, ред. 14-Янв-13 18:39)
Уф-ф-ф.... Всетаки интуиция - дело серьезное. Получил нормальный кадр.
Tim68 писал(а):
57317612Какая-то карусель с версиями применяемых фильтров в том числе и mt_masktools
Tempter57
Как Вы могли забыть? На Videorip Вы сами обращаете внимание на то, что "б) Обязательно потребуюся плагины Masktools2 версии A48 или выше".
"Зелень" в Моем случае была вызвана использованием ненадлежащего плагина mt_masktools.
|
|
Tempter57
Стаж: 16 лет 1 месяц Сообщений: 4960
|
Tempter57 ·
14-Янв-13 19:01
(спустя 21 мин., ред. 14-Янв-13 19:01)
Tim68
скрытый текст
Manao ввёл MaskTools 2.0a48 31 декабря 2010 года. Кто мог догадаться, что Tim68 два года не обновлял плагины по маскам ? Хотя я не вижу ваших извинений за отобранное у меня понапрасну время...
|
|
Tim68
Стаж: 14 лет 9 месяцев Сообщений: 712
|
Tim68 ·
14-Янв-13 20:55
(спустя 1 час 54 мин.)
Tempter57
скрытый текст
Зачем Мне было обновлять плагины по маскам, если Я ими не пользовался?
Tempter57 всегда следит за тем, что ему не нужно?
Я много чем не пользуюсь, по причине непонимания. Маски Я не понимаю.
Я готов принести свои извинения за потраченное на меня время, если вы действительно считаете, что помощь другим, это "тратить время зря".
Мы взрослые люди и прекрасно понимаем, каково это, зная ответ водить человека за нос вокруг да около, заставляя его многократно с разных сторон пояснять, что-же ему нужно.
Я конечно по любому извиняюсь, т.к. возможно Я и не прав, но у каждого своя правда.
Надеюсь без обид, а инцидент исчерпан.
|
|
Tempter57
Стаж: 16 лет 1 месяц Сообщений: 4960
|
Tempter57 ·
14-Янв-13 21:39
(спустя 44 мин.)
|
|
Tim68
Стаж: 14 лет 9 месяцев Сообщений: 712
|
Tim68 ·
09-Фев-13 22:06
(спустя 26 дней, ред. 12-Фев-13 06:54)
Интересуют изменения в синтаксисе встроенных фильтров Levels, RGBAdjust & Tweak в связи с выходом AviSynth 2.6.0 Alpha4. Добавленный дизер управляемый или нет?
Так же интересует инфа по:
Код:
* Added "Global OPT_VDubPlanarHack=True" to flip YV24 and YV16 chroma planes for old VDub's.
* Added Custom band setting to SuperEQ to allow all 16 bands to be set from script. Usage: SuperEQ(clip,band1, band2, band3....) values are dB in float.
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
14-Апр-13 11:08
(спустя 2 месяца 4 дня, ред. 14-Апр-13 11:08)
Подскажите, пожалуйста, есть ли какой-то плагин для AviSynth, который может удалять цветные полосы (помехи VHS) длительностью в 1-2 кадра?
Пример:
Пробовал удалять CamCD - удаляет общие мелкий цв. шум, а такие остаются;
DeGrainMedian - если задать порядка limitY=40, limitUV=50, norow=true а затем ещё пару раз пройти с меньшими значениями, то эти помехи удаляются, но и другие кадры превращаются не пойми во что, цветность как-бы вырывается местами.
BadFrames - вообще не пойму смысла этого плагина, дублирует кадры или интерполирует, применяя размытие, полосы убираются, а вот качество кадра остается, мягко говоря не очень...
Чего-то другого не нашёл. Может кто сталкивался с этим?
Наверное, лучший способ избавления - это Фотошоп
|
|
Xpюша
Стаж: 15 лет 4 месяца Сообщений: 3635
|
Xpюша ·
14-Апр-13 12:19
(спустя 1 час 11 мин.)
Handino писал(а):
58851207Чего-то другого не нашёл. Может кто сталкивался с этим?
Есть, например, вот такое: http://avisynth.org/mediawiki/DeVCR
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
14-Апр-13 13:35
(спустя 1 час 15 мин., ред. 14-Апр-13 13:35)
Xpюша
Большое спасибо за инфу. Сейчас поэкспериментирую, отпишусь о результатах. P.S. Этот фильтр не помогает вообще никак, какое значение порога не поставил бы, как были эти полосы так и остались, видимо такой вид помех он не может обнаружить. Зато в других кадрах "находит помехи" и заменяет их какими-то непонятными квадратными блоками...
Последняя надежда - видимо DeSpot, дальше уже похоже только Фотошоп поможет править покадрово...
|
|
Lenchik
Стаж: 18 лет 4 месяца Сообщений: 854
|
Lenchik ·
14-Апр-13 14:38
(спустя 1 час 3 мин.)
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
14-Апр-13 15:09
(спустя 31 мин., ред. 14-Апр-13 15:09)
Lenchik
примерно понял механизм работы алгоритмов: найти область с помехой и заменить чем-то подобным из соседних кадров или какой-то интерполяцией из соседних точек. Только такие фильтры не могут предугадать того, что хочет пользователь.
В моём случае - 4 раза пройтись DeGrainMedian с разными значениями и полосы почти исчезают, зато удаляется яркость и цветность тех областей, где это не нужно в других кадрах.
Одно лечишь - другое калечишь.
Фильтры или плагины зернистость чистят неплохо, а толстые помехи-полосы - это своего рода потеря части информации и имхо, чтобы её восстановить надо всё-таки повозиться в фотошопе, там хотя бы сам наглядно всё видишь откуда чего взять с соседних кадров и чем заменить, хлопотно конечно, но это самый надежный способ именно для таких цветных помех...
Где не спрашивай - результат всё-равно будет один, идеальных алгоритмов восстановления не бывает, это - эксперимент, пойду по самому непростому пути
P.S. В указанной теме нашёл подобного рода вопрос, но он там так и остался без ответа. Видимо, с VHS мало кто возится
|
|
Tempter57
Стаж: 16 лет 1 месяц Сообщений: 4960
|
Tempter57 ·
14-Апр-13 21:27
(спустя 6 часов, ред. 16-Апр-13 21:37)
Handino
скрытый текст
#ccd_sse2.vdf
#vdf_arguments:CamCD:0
#RemoveGrainSSE2.dll
#RemoveGrainTSSE2.dll
#RemoveDirt.dll
#RepairSSE3.dll
#Warpsharp.dll
#mvtools2.dll
#Deblock.dll
#DctFilter.dll
#medianblur.dll
#mt_masktools-26.dll
#Deblock_QED_MT2.avs
#deen.dll
#VagueDenoiser.dll
#degrainmedian.dll
#fft3dgpu.dll
#DePulse.dll
#awarpsharp2.dll
#focus.avs
#minblur.avs
#AddGrainC.dll
#Gradfun2DB.dll
#deVCR.avs
#SeeSaw.avs
#Soothe.avs
#RemoveColorBleeding.avs
#RemoveDirtMC.avs
#LimitedSharpenFaster.avs
#Gradfun2dbmod 1.5.avsi setmtmode(2)
# setmemorymax(768) ColorYUV(gain_y=0,cont_y=0,cont_u=0,cont_v=0,gain_v=0,gain_u=-0,off_y=1,off_u=-0,off_v=-0) # коррекция яркости при кодировании XviD # ==== Подавление цветового шума и радужности изображения ====
# setmtmode(5)
# fft3dgpu(bw=32,bh=32,ow=16,oh=16,bt=1,sigma=2.5,sigma2=1.75,sigma3=8.0,sigma4=2.0,plane=3,sharpen=0.3) # вариант 1
# setmtmode(2) ConvertToRGB32().CamCD(5,1) # вариант 2 # ==== удаление белых и чёрных стрелок VHS ====
ConvertToYUY2().DePulse(h=180, l=60, d=30, debug=false).ConvertToYV12() # Удалить Colorbleeding (размытость цветовых контуров)
RemoveColorBleeding() # ==== Устранение VHS цветового сдвига (colorshift), требует ручной подстройки ====
Vshift=2 # 2 пикселя на ленте
Hshift=0
mergechroma(last.crop(Hshift,Vshift,0,0, align=true).addborders(0,0,Hshift,Vshift)) # ==== Deblocking ====
# Deblock_QED(uv=3) # подключить при блочности исходника # ==== Многокаскадный фильтр ремонта горизонтальных линий затиров VHS ====
deVCR(30)#.deVCR(0)#.deVCR(0) # ==== Ремонт полосы нарезки и наложение её на исходник ====
# source = last
# filtered = source.RemoveDirtMC(false,10).RemoveDirt().RemoveDust(3)
# top = filtered.crop(0,300,0,-144,true) # где в данном случае 300-высота в клипе выше полосы нарезки,-160 -высота в клипе ниже линии нарезки приведены для примера
# Overlay(source,top,y=300).tweak(sat=1.05) # привязку сопоставить с кропом сверху # ==== Двухкаскадный временнОй и пространственно-временнОй шумоподавитеь ====
rdr = last
psup = rdr.RemoveDirtMC(false,10).MSuper(pel=2, sharp=2, rfilter=4) # закрыть при ремонте полосы нарезки
# psup = filtered.MSuper(pel=2, sharp=2, rfilter=4) # открыть при ремонте полосы нарезки
rsup = rdr.MSuper(pel=2, sharp=2, rfilter=2, levels=1)
vb2 = MAnalyse(psup, isb=true, truemotion=false, delta=2, blksize=16, overlap=4, dct=5)
vb1 = MAnalyse(psup, isb=true, truemotion=false, delta=1, blksize=16, overlap=4, dct=5)
vf1 = MAnalyse(psup,isb=false, truemotion=false, delta=1, blksize=16, overlap=4, dct=5)
vf2 = MAnalyse(psup,isb=false, truemotion=false, delta=2, blksize=16, overlap=4, dct=5)
NR = rdr.MDegrain2(rsup,vb1,vf1,vb2,vf2,thSAD=400,plane=3)
den = NR.MDegrain2(rsup,vb1,vf1,vb2,vf2,thSAD=400,plane=0)
dsup = den.MSuper(pel=2,levels=1,chroma=true)
cf2 = MCompensate(den, dsup, vf2, thSCD1=500)
cf1 = MCompensate(den, dsup, vf1, thSCD1=500)
cb1 = MCompensate(den, dsup, vb1, thSCD1=500)
cb2= MCompensate(den, dsup, vb2, thSCD1=500)
interleave(cf2, cf1, den, cb1, cb2)
MedianblurT(0,0,0,2)
SelectEvery(5,2)
NR2 = last # Повышение резкости
a = NR2.degrainmedian(mode=2,limity=5,limituv=6).VagueDenoiser(threshold=0.8, method=1, nsteps=6, chromaT=0.8)
SeeSaw(NR2, a, NRlimit=3, NRlimit2=4, Sstr=1.5, Slimit=5, Spower=5, Sdamplo=6, Szp=16)
dull = last
sharp = dull.LimitedSharpenfaster(ss_x=2.0,ss_y=2.0,smode=3,strength=240,overshoot=3)
#sharp = dull.Limitedsharpenfaster(strength=300,overshoot=0, Smode=3, soft=-1)
Soothe(sharp,dull,15) focus(sharp, sharp.width, sharp.height) # Дебандинг
GradFun2DBmod(thr=1.4,thrC=1.6,mode=2,str=1.0,strC=0.0,temp=50,adapt=64) # Назначение:для обработки старых проблемных DVD
# Тип предварительного шумоподавителя: CamCD, DePulse, blur, RemoveDirtMC, RemoveDirt и RemoveDust
# Тип основного шумоподавителя: на основе векторного анализа оценки движения на MDegrain2+ MCompensate c MedianblurT
# Тип шарпера: LimitedSharpenfaster
# наличие фильтра DeBanding: включен
# Скорость обработки: медленная
В этом пресете важно подстроить под свой исходник Ремонт полосы нарезки и наложение её на исходник. Сейчас эти строки в скрипте закрыты, откройте их в случае необходимости.
Ну, и здорово поможет в вашей беде MedianblurT(0,0,0,1) или MedianblurT(0,0,0,2) совместно с MCompensate. На DeSpot можно особо не рассчитывать. Если таковой полосы нарезки нет, то этот раздел скрипта можно не использовать, достаточно будет многоступенчатого deVCR и MCompensate+MedianblurT(0,0,0,1) Если исходник черно-белый, то скрипт надо несколько изменить.
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
14-Апр-13 23:57
(спустя 2 часа 30 мин., ред. 14-Апр-13 23:58)
Tempter57
Видео только в начале черно-белое, дальше цветное, исходник загублен изрядно, хоть и студийная кассета, но ей уже 23 года всё-таки.
Отчасти проблему решил так:
скрытый текст
ConvertToRGB32()
ACOBW(50,0,0)
CamCD(7,1)
ConvertToYV12(interlaced=true)
Letterbox(58,62,20,16)
Crop(2,2,0,0).AddBorders(0,0,2,2)
#DeGrainMedian в два прохода
DeGrainMedian(mode=0, interlaced=true, norow=true, limitY=5, limitUV=7)
DeGrainMedian(mode=1,interlaced=true,norow=true,limitY=2,limitUV=4)
super = MSuper(hpad=36, vpad=120, pel=2, levels=0, chroma=true, sharp=2, rfilter=4)
#вектора
backward_vec1 = MAnalyse(super, isb = true, delta = 1, overlap=4)
forward_vec1 = MAnalyse(super, isb = false, delta = 1, overlap=4)
backward_vec2 = MAnalyse(super, isb = true, delta = 2, overlap=4)
forward_vec2 = MAnalyse(super, isb = false, delta = 2, overlap=4)
backward_vec3 = MAnalyse(super, isb = true, delta = 2, overlap=4)
forward_vec3 = MAnalyse(super, isb = false, delta = 2, overlap=4)
MDegrain3 (super, backward_vec1,forward_vec1,backward_vec2,forward_vec2,backward_vec3,forward_vec3,thSAD=400)
от цветных полос остались небольшие контуры белых,
ещё раз отфильтровал яркость
fft3dfilter(sigma=2, plane=0, interlaced=true)
но всё-равно некоторые места видео остались с цв. полосами
Хоть и написано, что MSuper применительно для прогрессива, но почему-то в моём случае работает и очень даже хорошо чистит запись.
VHS закодировал в avi (DV)
Большое спасибо!
Мне с этим скриптом разбираться не один день Посмотрю, что получится. Tempter57, про полосу нарезки вообще ничего не понял, что это.
Можете в двух словах объяснить? Это так цветная помеха называется?
А это так каждая полоса обрабатывается?
top = filtered.crop(0,300,0,-144,true)
Ну меня их просто не одна сотня...наверное таких полос
|
|
HortonEN
Стаж: 16 лет 10 месяцев Сообщений: 6333
|
HortonEN ·
14-Апр-13 23:58
(спустя 19 сек.)
Handino писал(а):
про полосу нарезки вообще ничего не понял, что это.
Имеются ввиду координаты кропа в 300 и 144. ( в каменте почему-то 160)
Которые у Вас, ессно, могут отличаться.
Handino писал(а):
Это так цветная помеха называется?
Это полоса (содержащая помеху), которая и задаётся вышеозначенными координатами кропа.
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
15-Апр-13 00:07
(спустя 9 мин.)
HortonEN писал(а):
58864123Это полоса (содержащая помеху), которая и задаётся вышеозначенными координатами кропа.
HortonEN
Ого! У меня таких полос не одна сотня... это выходит так каждый раз нужно указывать координаты кропа для каждого кадра с полосой? Не очень удобно, однако...
|
|
Tempter57
Стаж: 16 лет 1 месяц Сообщений: 4960
|
Tempter57 ·
15-Апр-13 00:14
(спустя 7 мин.)
Handino писал(а):
58863375про полосу нарезки вообще ничего не понял, что это.
VHS ленты всегда подвергались механической нарезке, в результате на изображении появлялась жирная полоса, судя по всему у вас её нет и этот раздел скрипта стоит заблокировать #.
Ваш вариант никогда не решит проблем с мелкими стрелками и полосами VHS, только частично сгладит за счёт мощного шумодава типа Molotov3 и я понял вы хотите оставить в интерлейсном виде. Если так, то для моего варианта выполните боб-деинтерлейс, например, TDeInt(mode=1, order=-1) # смотрите ордер по полю, какое там первым
А в конце скрипта допишите строки
Код:
# Преобразование назад к интерлейсному виду 25i при кодировании в Carbon Coder
AutoYUY2()
AssumeTFF().SeparateFields().SelectEvery(4, 0, 3).Weave() # TFF
Не забудьте подключить плагин AutoYUY2.dll
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
15-Апр-13 00:49
(спустя 34 мин.)
Tempter57
спасибо за полезные советы. Буду экспериментировать.
Деинтерлейс делать надо, изображение при просмотре на компе двоится порой. (Вариант для рипа xvid)
Только когда лучше это сделать перед или после подавления шумов и помех?
TDeInt применял в конце скрипта, почему-то местами получаю ярко выраженную серую окантовку при движении , пока остановился всё-таки на Yadif может ещё что-то подберу более подходящее к исходнику... Если качество картинки устроит, то можно будет и в mpeg-2 перекодировать другой вариант для DVD.
У меня BFF ввиду того, что закодировал DV-кодеком. Картинка основана на полях, полукадрах...
при смене полей в конце скрипта проблем не будет, в смысле нарушения порядка полей, если выполню вышеуказанную строку скрипта?
|
|
Tempter57
Стаж: 16 лет 1 месяц Сообщений: 4960
|
Tempter57 ·
15-Апр-13 08:24
(спустя 7 часов, ред. 15-Апр-13 08:24)
Handino
Порядок фильтров в скрипте:
1. Конвертация в необходимое цветовое пространство, например, в YV12, если исходник находится в ином
2. Колориметрия , если только не кодировать х264
3. Деинтерлейс
4. Шумоподавитель
5. Для шумодава, построенном на пакете dither, здесь место 16-битного дебандинга
6. Шарпер
7. Дебандинг для случая с применением GradFun2DBmod
8. Ресайзер (В случае обработки HD разрешений при даунскейле место ресайзера сразу за деинтерлейсом, в этом случае меньше площадь обработки, а для фильтров на векторном анализе оценки движения -это громадный выигрыш во времени обработки).
Тот фильтр, который я вам дал, писался для конвертера XviD 4PSP5.10.330 и называется VHS RemoveDirt. Советую его вам поставить. Только перед его установкой я вас прошу не ставьте никакие k-lite codecs pack, а установите последний СССР (он построен на LavFilters) и инсталлируйте в систему кодек XviD 1.3.2.exe (он вам понадобится для VirtualDub). Возьмите его в варианте сборки от Koepi.
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
15-Апр-13 09:07
(спустя 43 мин., ред. 15-Апр-13 09:07)
Tempter57
огромное вам спасибо что делитесь своим колоссальным опытом и направляете в нужное русло по обработке. Мне остаётся только во всем разбираться и осмыслить.
Информации к размышлению хватит на неделю, а то и более...
|
|
HortonEN
Стаж: 16 лет 10 месяцев Сообщений: 6333
|
HortonEN ·
15-Апр-13 15:48
(спустя 6 часов)
Handino писал(а):
58852579
Этот фильтр не помогает вообще никак
Он заточен под сравнительно контрастное отделение. А у Вас (судя по скрину) не особо светлые полосы. =)
Надо колдовать.
Возможно, стоит SeparateFields() cделать. Возможно, у конволюции матрицу с 3х3 заменить на 5х5. Возможно, перед Levels() надо отдельно кого-то из R-G-B усилить. Возможно, задетектированная полоса плохо распознаётся после сжатия в 16. Попробуйте в 32 сжимать.
Вобщем... =)))
Цитата:
какое значение порога не поставил бы, как были эти полосы так и остались
видимо такой вид помех он не может обнаружить. Зато в других кадрах "находит помехи" и заменяет их какими-то непонятными квадратными блоками...
Вам вспомогательная функция генерит опорную клип-маску. Посмотрите её отдельно. Правильно ли работает на проблемных кадрах.
Это то, что PointResize(st_data4, c.width, c.height) выдаёт.
И да, наложение идёт со сдвигом в 1. На двух последовательных помехо-кадрах такое, конечно, не сработает.
Надо на двойку (в Trim'е) двигать.
-
Вы б сделали сэмпл метров на 75-100, да залили б куда-нибудь...
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
15-Апр-13 17:01
(спустя 1 час 13 мин.)
HortonEN писал(а):
58871173Возможно, задетектированная полоса плохо распознаётся после сжатия в 16. Попробуйте в 32 сжимать.
HortonEN
Кодек DV - согласно его описанию компрессия 8х8 пикселей... если речь конечно же об этом...
HortonEN писал(а):
58871173Возможно, стоит SeparateFields() cделать.
Т.е Взять кадр и разделить на поля... у меня уже картинка разделена на поля, опять же DV-кодек так кодирует
AssumeFieldBased().AssumeBFF()
deVCR - всё-таки так и не работает ничего вообще не происходит ни одной полосы не распознает.
В общем, наверное, самый оптимальный вариант - взять и перекодировать заново без сжатия, и тогда дело пойдёт быстрее, скорее всего.
HortonEN писал(а):
58871173И да, наложение идёт со сдвигом в 1. На двух последовательных помехо-кадрах такое, конечно, не сработает.
Надо на двойку (в Trim'е) двигать.
Ничего не понял, что за наложение? Про цветовой сдвиг? Про него тоже не понял, зачем двигать картинку на несколько пикселов, а затем накладывать на неё яркость от старого клипа?
Сэмпл сделаю, только позже, может поздним вечером, сейчас на работу надо...
Скрипт ещё не прошел, может и уйдут эти полосы с MCompensate...
|
|
Xpюша
Стаж: 15 лет 4 месяца Сообщений: 3635
|
Xpюша ·
15-Апр-13 18:47
(спустя 1 час 46 мин., ред. 15-Апр-13 18:47)
Handino писал(а):
58872188
HortonEN писал(а):
Возможно, задетектированная полоса плохо распознаётся после сжатия в 16. Попробуйте в 32 сжимать.
Кодек DV - согласно его описанию компрессия 8х8 пикселей... если речь конечно же об этом...
Там в коде присутствует BilinearResize(spacial_data,16,c.height). Что у BilinearResize означают последние два параметра из трёх - догадаться несложно.
Handino писал(а):
58872188
HortonEN писал(а):
Возможно, стоит SeparateFields() cделать.
Т.е Взять кадр и разделить на поля... у меня уже картинка разделена на поля, опять же DV-кодек так кодирует
Но декодер из этих полей создаёт полноценный кадр, с которым потом AviSinth и воюет. А SeparateFields() из каждого кадра делает два последовательно идущих, но половинной высоты. Т.е. каждое поле становится самостоятельным кадром.
Handino писал(а):
58872188
HortonEN писал(а):
И да, наложение идёт со сдвигом в 1. На двух последовательных помехо-кадрах такое, конечно, не сработает.
Надо на двойку (в Trim'е) двигать.
Ничего не понял, что за наложение?
Этот фильтр находит в кадре помеху и подставляет на её место пикселы из следующего кадра. Но если помеха длится два кадра, тот поставлять в первый из них пикселы следующего - смысла не имеет: там всё ещё помеха. Для таких случаев пикселы надо бы брать из кадра, стоящего ещё дальше по фильму.
|
|
Tempter57
Стаж: 16 лет 1 месяц Сообщений: 4960
|
Tempter57 ·
15-Апр-13 22:25
(спустя 3 часа, ред. 16-Апр-13 10:10)
Handino
Вам ребята рассказывают сейчас о параметрах настройки функции deVCR.avs:
Код:
function DetectVCRLines(clip c,int threshold)
{
spacial_data = GeneralConvolution(ConvertToRGB(c),0,"0 -1 0 0 2 0 0 -1 0")
bar_data = ConvertToRGB(BilinearResize(spacial_data,16,c.height))
st_data = Overlay(bar_data,Trim(bar_data,1,0),mode = "subtract")
st_data2 = Greyscale(Levels(st_data,threshold,10.0,threshold+1,0,255,coring = false))
st_data3 = Greyscale(Levels(st_data2,127,10.0,128,0,255,coring = false))
st_data4 = Overlay(st_data3,st_data3,y = -1, mode = "add")
return PointResize(st_data4,c.width,c.height)
} function deVCR(clip c,int threshold)
{
mybars = DetectVCRLines(c,threshold)
return Overlay(c,Trim(c,1,0), mask = mybars,greymask = true)
}
Стоит прислушаться к их советам тоже. Просто я почувствовал, что вы не понимаете о чём они говорят, вот и вмешался. То, о чём они говорят, касается изменения параметров данной функции, а для этого потребуется ввести некоторые дополнительные переменные, чтобы можно было задавать и изменять параметры настройки функции. А так у нас среди переменных параметров в настоящее время существует только порог threshold.
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
16-Апр-13 12:48
(спустя 14 часов)
Tempter57 писал(а):
58877704Стоит прислушаться к их советам тоже. Просто я почувствовал, что вы не понимаете о чём они говорят, вот и вмешался.
Tempter57
Прислушиваться к совету отпытных людей нужно всегда, спору нет.
Теперь понимаю хотя бы о чем написал HortonEN... HortonEN, Xpюша
Уровень владения фунциями AviSynth у всех разный, я в этом деле можно сказать только начинающий и
в конволюции матрицу с 3х3 заменить на 5х5 это пока что выше моих познаний...
точно также как строка в скрипте "0 -1 0 0 2 0 0 -1 0" - разобраться с таким вот прямо так с ходу - думаю, мало таких людей найдётся...
Да поменял 16 на 32, да Trim увеличил на 2, при пороге "0" ну совсем минимум полосы уходит, увеличение порога ни к чему не приводит и не решает проблему. И поля разделял AssumeFrameBased().AssumeTFF()..SeparateFields()... всё это не то...
Полоса не всегда два кадра, а если и два кадра - то во втором кадре её спектр другой...
Xpюша писал(а):
58873712Этот фильтр находит в кадре помеху и подставляет на её место пикселы из следующего кадра.
Насколько понимаю, с ваших слов, фильтр не учитывает динамику, находит аналогичное место в следующем кадре и заменяет, а следующий кадр уже другой изображение переместилось и каков должен быть результат HortonEN, сделал сэмпл, там эти полосы разные и во всей красе.
Имхо, deVCR не решит эту проблему, не за что не поверю
http://yadi.sk/d/EU5Xd-oy45U8j
Попытаюсь применить интерполяцию с соседних кадров MFlowInter, может что и получится...
|
|
HortonEN
Стаж: 16 лет 10 месяцев Сообщений: 6333
|
HortonEN ·
16-Апр-13 13:40
(спустя 51 мин.)
Handino писал(а):
строка в скрипте "0 -1 0 0 2 0 0 -1 0"
Это и есть наша матрица конволюции. =)
0 -1 0 0 2 0 0 -1 0
Берётся точка, умножается на 2 и складывается с инвертированными соседями. Верхним и нижним.
Кстати, думаю, поэтому Ваши полосы и не "цепляет". Мне сейчас не попробовать, но что-то мне кажется, что это на сильный контраст рассчитано. А у Вас совсем другой случай.
Печаль, что.
Цитата:
Насколько понимаю, с ваших слов, фильтр не учитывает динамику, находит аналогичное место в следующем кадре и заменяет
Всё верно.
Это не аля-MVTools и, конечно, с недостатками.
Цитата:
deVCR не решит эту проблему, не за что не поверю
Я тоже уже не верю. =))
Но исходники Ваши гляну. Спасибо.
|
|
Xpюша
Стаж: 15 лет 4 месяца Сообщений: 3635
|
Xpюша ·
16-Апр-13 19:03
(спустя 5 часов)
Handino писал(а):
58883813Насколько понимаю, с ваших слов, фильтр не учитывает динамику, находит аналогичное место в следующем кадре и заменяет, а следующий кадр уже другой изображение переместилось и каков должен быть результат
Да вот такой и будет - подставятся несколько "левые" пикселы. (Или "правые". Это уж смотря в какую сторону движение будет. )
Автор, скорее всего, так рассуждал: "Подменяется только небольшая часть изображения и ненадолго - на один кадр. Если в этом месте кадра есть движение - из-за него возникнет неправильность, но именно из-за него же она и промелькнёт незамеченной. Всё ж лучше, чем куда более заметная помеха."
|
|
Handino
Стаж: 13 лет 7 месяцев Сообщений: 2984
|
Handino ·
17-Апр-13 05:56
(спустя 10 часов)
Xpюша писал(а):
58889218"Подменяется только небольшая часть изображения и ненадолго - на один кадр. Если в этом месте кадра есть движение - из-за него возникнет неправильность, но именно из-за него же она и промелькнёт незамеченной. Всё ж лучше, чем куда более заметная помеха."
Да так оно и есть. Действительно этот скрипт - мягко говоря, не лучший вариант, если что-то там в итоге будет мелькать не в тему даже один или два кадра.
Это не решение или точнее, решение на скорую руку, всё-таки хочется выжать с исходника максимально возможное...
HortonEN писал(а):
58884419Но исходники Ваши гляну. Спасибо.
HortonEN, не тратьте время на устранение этих полос, это, по всей видимости, явление редкое, при этом исходник должен быть "убит" хотя бы как у меня.
В моем случае, дальше есть 3 участка почти непроходимых, там в динамических сценах выброс помех в виде белых горизонтальных линий аж на полэкрана и в несколько секунд, их не одним фильтром не возьмёшь 100 %. Такое восстановить можно, например, связкой фотошоп + after effects, занятие это по времени очень трудоёмкое, и его лучше применять только в случае безысходности. Заказал ещё один исходник, не может быть, чтобы оба исходника были с одними и теми же деффектами...
Из двух один нормальный уж точно соберу. Пока потренируюсь на другом видеоматериале.
Спасибо за советы.
Подскажите, пожалуйста, а есть какие-то особые отличия в обработке цветного видео от чёрно-белого? , хотя бы тезисно.
Есть ч/б рип с VHS редкого фильма, хотелось бы привести его в более нормальный вид...
|
|
Tempter57
Стаж: 16 лет 1 месяц Сообщений: 4960
|
Tempter57 ·
17-Апр-13 08:16
(спустя 2 часа 19 мин.)
Handino писал(а):
58895543моем случае, дальше есть 3 участка почти непроходимых, там в динамических сценах выброс помех в виде белых горизонтальных линий аж на полэкрана и в несколько секунд, их не одним фильтром не возьмёшь 100 %.
Когда вам советуешь ремонт полосы нарезки, надо его попытаться выполнить, а не питаться догадками сколько процентов будет, также следует изменять параметры настройки фильтра DePulse на подобных строчных выбросах в начале развёртки, советовал применить вместо MedianblurT(0,0,0,1) ->MedianblurT(0,0,0,2) после функций MCompensate. Специально подправил для вас тот скрипт, что давал, вернитесь к нему и попытайтесь открыть строки с ремонтом полосы нарезки для самой жирной статической полосы, а такая у вас имеется. Хотя с MedianblurT(0,0,0,2) и открытой строкой RemoveColorBleeding() и она практически исчезает.
|
|
|