|
Marillion78
Стаж: 16 лет 9 месяцев Сообщений: 1031
|
Marillion78 ·
23-Май-11 00:17
(13 лет 7 месяцев назад, ред. 23-Май-11 00:18)
Расскажите, каким образом можно отреставрировать изображение на DVD?
Бывает же, что встречаются диски отреставрированные и не отреставрированные. Насколько это сложный и ресурсоемкий процесс? Вот есть, например, вот такой DVD, являющийся оцифровой с laser disk: Изображение не очень качественное, присутствуют какие-то цветные блики (заметно на белом фоне).
Можно ли применить какие-то фильтры, чтобы эти блики убрать, и изображение смотрелось бы лучше и четче?
Какой софт существует для этого, сколько требуется времени и дискового пространства для обработки полуторачасового фильма?
|
|
GarfieldX
Стаж: 19 лет 10 месяцев Сообщений: 4016
|
GarfieldX ·
23-Май-11 01:41
(спустя 1 час 23 мин.)
Советую почитать вот это... и забыть про эту идею.
Фильтрами можно исправить весьма мелкие и малозначимые дефекты. И то надо четко понимать что делаешь.
|
|
aiekszzz
Стаж: 14 лет 2 месяца Сообщений: 260
|
aiekszzz ·
23-Май-11 07:52
(спустя 6 часов)
Есть специальная профессиональная программа, на трекере она есть, правда не помню как называется. Если убрать шум и увеличить четкость, то https://rutr.life/forum/viewtopic.php?t=1397153 работает очень долго примерно 1 к 24, т.е 1час видео 24часа работы. Для домашнего оцифрованного видео применял https://rutr.life/forum/viewtopic.php?t=2079186 там есть пункт "улучшение видео", а так надо пробовать. Может что и получится.
|
|
Tim68
Стаж: 14 лет 10 месяцев Сообщений: 712
|
Tim68 ·
23-Май-11 10:33
(спустя 2 часа 41 мин., ред. 23-Май-11 10:33)
Что касается скрина.
- цветовой шум оцифровки - фильтр ccd.vdf (CamCD) под VirtualDub или AviSynth (диапазон 20-30);
- сдвинут баланс белого в красно-синий диапазон, теряются детали в темных областях и присутствуют пересветы (проблемма с динамическим диапазоном) - фильтр SmoothAdjust под AviSynth. Что еще мне не нравиться - вертикально вытянутые шумовые пикселы, ставшие артифактами - свидетельство неуместно проведенного bob- деинтерлейса со снижением вертикального разрешения кадра в 2 раза. Возможно имеется интерлейсный вариант.
|
|
Marillion78
Стаж: 16 лет 9 месяцев Сообщений: 1031
|
Marillion78 ·
23-Май-11 10:49
(спустя 16 мин., ред. 23-Май-11 10:49)
Tim68 писал(а):
Что касается скрина.
- цветовой шум оцифровки - фильтр ccd.vdf (CamCD) под VirtualDub или AviSynth (диапазон 20-30);
- сдвинут баланс белого в красно-синий диапазон, теряются детали в темных областях и присутствуют пересветы (проблемма с динамическим диапазоном) - фильтр SmoothAdjust под AviSynth.
Спасибо!
Но, насколько я помню, VirtualDub работает только с avi-файлами, а мне нужно будет восстановать mpeg-2 (.m2v-файл).
Как тут быть?
Tim68 писал(а):
Что еще мне не нравиться - вертикально вытянутые шумовые пикселы, ставшие артифактами - свидетельство неуместно проведенного bob- деинтерлейса со снижением вертикального разрешения кадра в 2 раза. Возможно имеется интерлейсный вариант.
Нет, у меня есть только этот вариант, скачанный с забугорного трекера.
А в этом варианте этот момент уже никак не исправить?
|
|
aiekszzz
Стаж: 14 лет 2 месяца Сообщений: 260
|
aiekszzz ·
23-Май-11 19:36
(спустя 8 часов, ред. 23-Май-11 19:36)
|
|
Tim68
Стаж: 14 лет 10 месяцев Сообщений: 712
|
Tim68 ·
23-Май-11 21:10
(спустя 1 час 33 мин., ред. 23-Май-11 21:10)
Marillion78 писал(а):
Но, насколько я помню, VirtualDub работает только с avi-файлами
VirtualDub может работать с любыми медиафайлами, используя фреймсервер AviSynth. Некоторые фильтры под VirtualDub, в том числе и ccd.vdf возможно использовать прямо под AviSynth-ом.
Код:
LoadVirtualDubPlugin("X:\......\ccd.vdf","CamCD",0)
..................
тыры-пыры
..................
ConvertToRGB() #преобразование в RGB
CamCD(20,2) #подавление цветового шума
ConvertToYV12() #обратное преобразование в YV12
Marillion78 писал(а):
А в этом варианте этот момент уже никак не исправить?
Обратной дороги уже нет.
Можно попробовать выполнить шумопонижение по времени, выдавая эти артифакты за шум, после чего наложить мелкий синтетический шумок, создающий имитацию более высокого разрешения в кадре.
Ах, да фильтры под AviSynth - mvtools2.dll , AddGrain.dll.
|
|
Pustovetov
Стаж: 17 лет 1 месяц Сообщений: 4254
|
Pustovetov ·
23-Май-11 21:29
(спустя 19 мин.)
Marillion78 писал(а):
Бывает же, что встречаются диски отреставрированные и не отреставрированные.
"реставрированые" диски делают как минимум с бетакамов, а приличные люди сканируют кинопленку.
|
|
Tempter57
Стаж: 16 лет 2 месяца Сообщений: 4963
|
Tempter57 ·
24-Май-11 09:28
(спустя 11 часов, ред. 24-Май-11 09:28)
Marillion78
Такой скрипт можно подсунуть Rhozet Carbon Coder или CCE SP2, если стоит задача обработки и сохранения в интерлейсном виде в MPEG2:
скрытый текст
#ccd_sse2.vdf
#vdf_arguments:CamCD:0
#Cnr2.dll
#Warpsharp.dll
#mvtools2.dll
#MT.dll
#ColorMatrix.dll
#AutoYUY2.dll
#MDegrain2i2.avs SetMTMode(2)
setmemorymax(640) ConvertToRGB32(interlaced=true).CamCD(12,1) # удаление радужности и цветового шума # ==== цветокоррекция ====
# RGBAdjust(r=1.05, g=1.05, b=1.0, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит голубоватым, нужно убрать общий синий оттенок
# RGBAdjust(r=1.0, g=1.05, b=1.05, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит красноватым, нужно убрать общий красный оттенок
# RGBAdjust(r=1.0, g=1.0, b=1.0, rb=0, gb=0, bb=0, rg=0.95, gg=0.95, bg=1.05) # Белый цвет выглядит белым, но нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=0.95, gg=0.95, bg=1.05) # Чёрный цвет выглядит тёмно-серым, белый недостаточно светел, нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=1.05, gg=1.05, bg=1.15) # Всё то же самое, но нужно высветлить тёмные области ConvertToYV12(interlaced=true) # Cnr2("oxx",8,16,191,100,255,32,255,false) # удаление радужности и цветового шума для VHS
# Cnr2("oxx",8,14,191,75,255,20,255,false) # удаление радужности и цветового шума для Laserdisc chroma = last
MDegrain2i2(chroma,8,4,5) # ColorMatrix(mode="Rec.709->Rec.601", inputFR=false, clamp=0,interlaced=true)
# ConvertToYUY2(interlaced=true)
AutoYUY2() # ================================================== function MDegrain2i2(clip source, int "blksize", int "overlap", int "dct")
{
Vshift=2 # 2 lines per bobbed-field per tape generation (PAL); original=2; copy=4 etc
Hshift=0 # determine experimentally
overlap=default(overlap,0) # overlap value (0 to 4 for blksize=8)
dct=default(dct,0) # use dct=1 for clip with light flicker fields=source.SeparateFields() # separate by fields #This line gets rid of vertical chroma halo
fixed_fields=MergeChroma(fields,crop(fields,Hshift,Vshift,0,0).addborders(0,0,Hshift,Vshift)) super = fixed_fields.MSuper(pel=2, sharp=1)
backward_vec2 = super.MAnalyse(isb = true, delta = 2, blksize=blksize, overlap=overlap, dct=dct)
forward_vec2 = super.MAnalyse(isb = false, delta = 2, blksize=blksize, overlap=overlap, dct=dct)
backward_vec4 = super.MAnalyse(isb = true, delta = 4, blksize=blksize, overlap=overlap, dct=dct)
forward_vec4 = super.MAnalyse(isb = false, delta = 4, blksize=blksize, overlap=overlap, dct=dct) MDegrain2(fixed_fields,super, backward_vec2,forward_vec2,backward_vec4,forward_vec4,thSAD=320)
unsharpmask(60,3,0) #not sure whether to put this before or after the weave. Weave()
}
Скрипт применялся для обработки VHS, поэтому для DVD : Vshift=0 или применить MDegrain2i2_CS.avs
скрытый текст
function MDegrain2i2_CS(clip clp, int "overlap", int "dct")
{
overlap=default(overlap,0) # overlap value (0 to 4 for blksize=8)
dct=default(dct,0) # use dct=1 for clip with light flicker
fields=clp.SeparateFields() # separate by fields
super = fields.MSuper()
backward_vec2 = super.MAnalyse(isb = true, delta = 2, overlap=overlap, dct=dct)
forward_vec2 = super.MAnalyse(isb = false, delta = 2, overlap=overlap, dct=dct)
backward_vec4 = super.MAnalyse(isb = true, delta = 4, overlap=overlap, dct=dct)
forward_vec4 = super.MAnalyse(isb = false, delta = 4, overlap=overlap, dct=dct)
NR = fields.MDegrain2(super, backward_vec2,forward_vec2,backward_vec4,forward_vec4,thSAD=400)
s = NR.minblur(1,1)
allD = mt_makediff(fields,NR)
ssD = mt_makediff(s,s.removegrain(11,-1))
ssDD = ssD.repair(allD,1)
ssDD = ssDD.mt_lutxy(ssD,"x 128 - abs y 128 - abs < x y ?")
NR.mt_adddiff(ssDD,U=2,V=2)
Weave()
}
но в этом случае стоит подключить плагины removegrain.dll, repair.dll, mt_masktools-25.dll и minblur.avs
|
|
Tim68
Стаж: 14 лет 10 месяцев Сообщений: 712
|
Tim68 ·
24-Май-11 10:13
(спустя 45 мин., ред. 24-Май-11 10:13)
Tempter57 писал(а):
Такой скрипт можно подсунуть...
Приветствуем тяжелую артиллерию.
У Marillion78 на руках уже подпорченный деинтерлейснутый материал.
Tim68 писал(а):
Возможно имеется интерлейсный вариант.
Marillion78 писал(а):
Нет, у меня есть только этот вариант, скачанный с забугорного трекера.
|
|
Tempter57
Стаж: 16 лет 2 месяца Сообщений: 4963
|
Tempter57 ·
24-Май-11 11:32
(спустя 1 час 18 мин., ред. 24-Май-11 11:32)
Tim68
Тогда eщё проще просто обработать фильтрацией, как прогрессивный(во многих пресетах для SAT есть все необходимые фильтры), убрав радужность, откорректировав цветопередачу и почистив от шумов и перекодировать. Например:
скрытый текст
#ccd_sse2.vdf
#vdf_arguments:CamCD:0
#RemovegrainSSE3.dll
#RepairSSE3.dll
#fft3dfilter.dll
#SmoothAdjust-ICC-x86.dll
#mvtools2.dll
#MT.dll
#degrainmedian.dll
#mt_masktools-25.dll
#AddGrainC.dll
#Gradfun2db.dll
#medianblur.dll
#minblur.avs
#ContraHD.avs
#Gradfun2dbmod.avs setmemorymax(768)
MT(""" ConvertToRGB32().CamCD(12,1) # удаление радужности и цветового шума # ==== цветокоррекция ====
RGBAdjust(r=1.05, g=1.05, b=1.0, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит голубоватым, нужно убрать общий синий оттенок
# RGBAdjust(r=1.0, g=1.05, b=1.05, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит красноватым, нужно убрать общий красный оттенок
# RGBAdjust(r=1.0, g=1.0, b=1.0, rb=0, gb=0, bb=0, rg=0.95, gg=0.95, bg=1.05) # Белый цвет выглядит белым, но нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=0.95, gg=0.95, bg=1.05) # Чёрный цвет выглядит тёмно-серым, белый недостаточно светел, нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=1.05, gg=1.05, bg=1.15) # Всё то же самое, но нужно высветлить тёмные области
ConvertToYV12() SmoothLevels( Smode=2, useopt=true) source = last
preNR = source.degrainmedian(mode=2,limity=5,limituv=6)
preNR_super = preNR.MSuper(pel=2, sharp=2, rfilter=2)
source_super = source.MSuper(pel=2, sharp=2, levels=1)
vf2 = MAnalyse(preNR_super, isb=false, blksize=16, overlap=8, delta=2, truemotion=false, search=5, chroma=false)
vf1 = MAnalyse(preNR_super, isb=false, blksize=16, overlap=8, delta=1, truemotion=false, search=5, chroma=false)
vb1 = MAnalyse(preNR_super, isb= true, blksize=16, overlap=8, delta=1, truemotion=false, search=5, chroma=false)
vb2 = MAnalyse(preNR_super, isb= true, blksize=16, overlap=8, delta=2, truemotion=false, search=5, chroma=false) mask1 = source.mmask(vb2, ml=300, kind = 1, Ysc = 255, gamma=0.999)
mask2 = source.mmask(vb1, ml=300, kind = 1, Ysc = 255, gamma=0.999)
mask3 = source.mmask(vf1, ml=300, kind = 1, Ysc = 255, gamma=0.999)
mask4 = source.mmask(vf2, ml=300, kind = 1, Ysc = 255, gamma=0.999)
maskb = mt_lutxy(mask1,mask2,"x 255 < y 255 < x y + 2 / x ? y ?")
maskf = mt_lutxy(mask3,mask4,"x 255 < y 255 < x y + 2 / x ? y ?")
tmask = mt_lutxy(maskb,maskf,"x 255 < y 255 < x y + 2 / x ? y ? 32 - 255 * 223 /")
source2 = mt_merge(source,preNR,tmask,U=3,V=3)
NR = source2.MDegrain2(source_super,vb1,vf1,vb2,vf2,thSAD=256,plane=0)
NR_super = NR.Msuper(pel=2, chroma=true, levels=1)
cf2 = MCompensate(NR, NR_super, vf2, thSCD1=400)
cf1 = MCompensate(NR, NR_super, vf1, thSCD1=400)
cb1 = MCompensate(NR, NR_super, vb1, thSCD1=400)
cb2 = MCompensate(NR, NR_super, vb2, thSCD1=400)
interleave(cf2, cf1, NR, cb1, cb2)
#Temporalsoften(2,255,255,28,2)
Temporalsoften(2,5,6,10,2)
selectevery(5,2)
den = last # PROTECTING
threshold = 16
cutoff = 64
maxdiff = 4
rg17 = den.removegrain(17,-1)
iOB = source.mt_lut("x "+string(cutoff)+" >= x 0 ?",U=1,V=1)
mB = mt_makediff(iOB,rg17,U=1,V=1).mt_binarize(128+threshold,upper=false,U=1,V=1).removegrain(5,-1)
lB = mt_lutxy(den,source,"x y - abs "+string(maxdiff)+" <= x x y - 0 < y "+string(maxdiff)+" - x ? ?",U=1,V=1)
smB = mt_merge(den,lB,mB,U=2,V=2) # EDGECLEANING
mP = mt_edge(smB,"prewitt",0,255,0,0,V=1,U=1)
mS = mP.mt_expand(mode=mt_square(radius=2),U=1,V=1).mt_inflate(U=1,V=1)
mD = mt_lutxy(mS,mP.mt_inflate(U=1,V=1),"x y - "+string(32)+" <= 0 x y - ?",U=1,V=1).mt_inflate(U=1,V=1).removegrain(20,-1)
smE = mt_merge(smB,Eval("smB." + "Removegrain(2,0)"),mD,luma=true,U=3,V=3) # MASKING
mE = mt_edge(smE,"prewitt",0,255,0,0,V=1,U=1).mt_lut(expr="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).removegrain(20,-1)
mF = mt_logic(tmask,mE,"max",U=1,V=1).removegrain(20,-1) # SHARPENING
sharp = ContraHD(smE,source,cf1,cb1,0)
sL = mt_merge(smE,sharp,mL,U=2,V=2) # ENHANCING
GF = sL.GradFun2DBmod(thr=1.4,thrC=1.8,str=0.8,strC=0.0,temp=70,adapt=64)
Fs = mt_merge(GF,sL,mF,luma=true,U=3,V=3)
Fs#.mergechroma(den)
""",threads=4,overlap=16,splitvertical=false) # or threads=2 # Назначение: для качественной обработки SATRemux
# Тип предварительного шумоподавителя: ccd_sse2
# Тип основного шумоподавителя: на основе векторного анализа оценки движения c последовательным временнЫм и пространственно-временным шумоподавителем
# Тип шарпера: ContraHD
# Наличие фильтра DeBanding по умолчанию: включен
# Скорость обработки: медленная
А если рип-исходник выглядит вообще паскудно с флюктацией строк, что нередко для старых материалов, то лучше применить:
скрытый текст
#ccd_sse2.vdf
#vdf_arguments:CamCD:0
#RemoveGrainSSE3.dll
#RepairSSE3.dll
#ColorMatrix.dll
#mvtools2.dll
#SmoothAdjust-MSVC-x86.dll
#fft3dfilter.dll
#nnedi3.dll
#MT.dll
#FillMargins.dll
#Cnr2.dll
#Warpsharp.dll
#AddGrainC.dll
#GradFun2DB.dll
#VerticalCleaner.dll
#mt_masktools-25.dll
#QTGMC2.51.avs
#srestore.avs
#vinverse.avs
#GradFun2DBmod.avs
#LimitedSharpenFaster mod.avs vinverse() # удаление остатков гребёнки
# srestore() # обратный трансфер и устранение блендов, необходимо применить двойной боб-деинтерлейс setmemorymax(640)
MT(""" ConvertToRGB32().CamCD(12,1) # удаление радужности и цветового шума # ==== цветокоррекция ====
RGBAdjust(r=1.05, g=1.05, b=1.0, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит голубоватым, нужно убрать общий синий оттенок
# RGBAdjust(r=1.0, g=1.05, b=1.05, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит красноватым, нужно убрать общий красный оттенок
# RGBAdjust(r=1.0, g=1.0, b=1.0, rb=0, gb=0, bb=0, rg=0.95, gg=0.95, bg=1.05) # Белый цвет выглядит белым, но нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=0.95, gg=0.95, bg=1.05) # Чёрный цвет выглядит тёмно-серым, белый недостаточно светел, нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=1.05, gg=1.05, bg=1.15) # Всё то же самое, но нужно высветлить тёмные области
ConvertToYV12() # Cnr2("oxx",8,16,191,100,255,32,255,false) # подавление цветового шума VHS
SmoothLevels(Smode=2, useopt=true) # ColorYUV(gain_y=0, off_y=0, gamma_y=0, cont_y=0, cont_u=-20, cont_v=-20) # Уменьшаем насыщенность цветов
# ColorYUV(gain_y=-0, off_y=-1, gamma_y=0, cont_y=10, cont_u=10, cont_v=10) # ==== цветокоррекция при преобладании жёлто-зелёных цветов ====
# str=4
# thr=32
# SmoothCurve(Ucurve="0-0;"+string(128-2*thr)+"-"+string(128-2*thr)+";"+string(128-thr)+"-"+string(128-thr+str)+";128-128;"+string(128+thr)+"-"+string(128+thr-str)+";"+string(128+2*thr)+"-"+string(128+2*thr)+";255-255"\
# ,Vcurve="0-0;"+string(128-2*thr)+"-"+string(128-2*thr)+";"+string(128-thr)+"-"+string(128-thr-str)+";128-128;"+string(128+thr)+"-"+string(128+thr+str)+";"+string(128+2*thr)+"-"+string(128+2*thr)+";255-255") source = last
# den = source.QTGMC(2,1,1,4,0,4,InputType=1,SLrad=1,SLMode=2,Sharpness=0.8,DCT=5).unsharpmask(20,3,0) # DeFlickering прогрессивного материала
den = source.QTGMC(2,2,2,4,0,4,InputType=1,SLrad=3,SLMode=2,Sharpness=1.0,DCT=5).unsharpmask(30,3,0) # DeFlickering прогрессивного материала
# den = source.QTGMC(2,2,3,4,0,4,InputType=1,SLrad=3,SLMode=2,Sharpness=1.2,DCT=5).unsharpmask(40,3,0) # DeFlickering прогрессивного материала # PROTECTING
threshold = 16
cutoff = 64
maxdiff = 4
rg17 = den.removegrain(17,-1)
iOB = source.mt_lut("x "+string(cutoff)+" >= x 0 ?",U=1,V=1)
mB = mt_makediff(iOB,rg17,U=1,V=1).mt_binarize(128+threshold,upper=false,U=1,V=1).removegrain(5,-1)
lB = mt_lutxy(den,source,"x y - abs "+string(maxdiff)+" <= x x y - 0 < y "+string(maxdiff)+" - x ? ?",U=1,V=1)
smB = mt_merge(den,lB,mB,U=2,V=2) # EDGECLEANING
mP = mt_edge(smB,"prewitt",0,255,0,0,V=1,U=1)
mS = mP.mt_expand(mode=mt_square(radius=4),U=1,V=1).mt_inflate(U=1,V=1)
mD = mt_lutxy(mS,mP.mt_inflate(U=1,V=1),"x y - "+string(24)+" <= 0 x y - ?",U=1,V=1).mt_inflate(U=1,V=1).removegrain(20,-1)
mt_merge(smB,Eval("smB." + "Removegrain(2,0)"),mD,luma=true,U=3,V=3) # GradFun2DBmod(thr=1.2,thrC=1.6,str=0.8,strC=0.0,temp=70,adapt=64)
GradFun2DBmod(thr=1.4,thrC=1.8,str=1.0,strC=0.0,temp=70,adapt=64)
# GradFun2DBmod(thr=1.51,thrC=2.3,str=1.2,strC=0.0,temp=70,adapt=64)
|
|
Marillion78
Стаж: 16 лет 9 месяцев Сообщений: 1031
|
Marillion78 ·
26-Май-11 12:53
(спустя 2 дня 1 час, ред. 26-Май-11 12:53)
Tim68 писал(а):
Marillion78 писал(а):
Но, насколько я помню, VirtualDub работает только с avi-файлами
VirtualDub может работать с любыми медиафайлами, используя фреймсервер AviSynth. Некоторые фильтры под VirtualDub, в том числе и ccd.vdf возможно использовать прямо под AviSynth-ом.
А сохранить результат обработки в VirtualDub в .m2v, а не в .avi - каким образом? Предлагается только .avi, .ogm, и .mkv.
А мне надо обработать .m2v (почистить шумы, увеличить четкость), и в этом же формате сохранить, чтобы потом заново собрать DVD.
Этот же вопрос актуален при использовании Neat Video plug-ins + VirtualDub - как сохранить результат в формате .m2v?
Tempter57 писал(а):
Tim68
Тогда eщё проще просто обработать фильтрацией, как прогрессивный(во многих пресетах для SAT есть все необходимые фильтры), убрав радужность, откорректировав цветопередачу и почистив от шумов и перекодировать. Например:
скрытый текст
#ccd_sse2.vdf
#vdf_arguments:CamCD:0
#RemovegrainSSE3.dll
#RepairSSE3.dll
#fft3dfilter.dll
#SmoothAdjust-ICC-x86.dll
#mvtools2.dll
#MT.dll
#degrainmedian.dll
#mt_masktools-25.dll
#AddGrainC.dll
#Gradfun2db.dll
#medianblur.dll
#minblur.avs
#ContraHD.avs
#Gradfun2dbmod.avs setmemorymax(768)
MT(""" ConvertToRGB32().CamCD(12,1) # удаление радужности и цветового шума # ==== цветокоррекция ====
RGBAdjust(r=1.05, g=1.05, b=1.0, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит голубоватым, нужно убрать общий синий оттенок
# RGBAdjust(r=1.0, g=1.05, b=1.05, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит красноватым, нужно убрать общий красный оттенок
# RGBAdjust(r=1.0, g=1.0, b=1.0, rb=0, gb=0, bb=0, rg=0.95, gg=0.95, bg=1.05) # Белый цвет выглядит белым, но нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=0.95, gg=0.95, bg=1.05) # Чёрный цвет выглядит тёмно-серым, белый недостаточно светел, нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=1.05, gg=1.05, bg=1.15) # Всё то же самое, но нужно высветлить тёмные области
ConvertToYV12() SmoothLevels( Smode=2, useopt=true) source = last
preNR = source.degrainmedian(mode=2,limity=5,limituv=6)
preNR_super = preNR.MSuper(pel=2, sharp=2, rfilter=2)
source_super = source.MSuper(pel=2, sharp=2, levels=1)
vf2 = MAnalyse(preNR_super, isb=false, blksize=16, overlap=8, delta=2, truemotion=false, search=5, chroma=false)
vf1 = MAnalyse(preNR_super, isb=false, blksize=16, overlap=8, delta=1, truemotion=false, search=5, chroma=false)
vb1 = MAnalyse(preNR_super, isb= true, blksize=16, overlap=8, delta=1, truemotion=false, search=5, chroma=false)
vb2 = MAnalyse(preNR_super, isb= true, blksize=16, overlap=8, delta=2, truemotion=false, search=5, chroma=false) mask1 = source.mmask(vb2, ml=300, kind = 1, Ysc = 255, gamma=0.999)
mask2 = source.mmask(vb1, ml=300, kind = 1, Ysc = 255, gamma=0.999)
mask3 = source.mmask(vf1, ml=300, kind = 1, Ysc = 255, gamma=0.999)
mask4 = source.mmask(vf2, ml=300, kind = 1, Ysc = 255, gamma=0.999)
maskb = mt_lutxy(mask1,mask2,"x 255 < y 255 < x y + 2 / x ? y ?")
maskf = mt_lutxy(mask3,mask4,"x 255 < y 255 < x y + 2 / x ? y ?")
tmask = mt_lutxy(maskb,maskf,"x 255 < y 255 < x y + 2 / x ? y ? 32 - 255 * 223 /")
source2 = mt_merge(source,preNR,tmask,U=3,V=3)
NR = source2.MDegrain2(source_super,vb1,vf1,vb2,vf2,thSAD=256,plane=0)
NR_super = NR.Msuper(pel=2, chroma=true, levels=1)
cf2 = MCompensate(NR, NR_super, vf2, thSCD1=400)
cf1 = MCompensate(NR, NR_super, vf1, thSCD1=400)
cb1 = MCompensate(NR, NR_super, vb1, thSCD1=400)
cb2 = MCompensate(NR, NR_super, vb2, thSCD1=400)
interleave(cf2, cf1, NR, cb1, cb2)
#Temporalsoften(2,255,255,28,2)
Temporalsoften(2,5,6,10,2)
selectevery(5,2)
den = last # PROTECTING
threshold = 16
cutoff = 64
maxdiff = 4
rg17 = den.removegrain(17,-1)
iOB = source.mt_lut("x "+string(cutoff)+" >= x 0 ?",U=1,V=1)
mB = mt_makediff(iOB,rg17,U=1,V=1).mt_binarize(128+threshold,upper=false,U=1,V=1).removegrain(5,-1)
lB = mt_lutxy(den,source,"x y - abs "+string(maxdiff)+" <= x x y - 0 < y "+string(maxdiff)+" - x ? ?",U=1,V=1)
smB = mt_merge(den,lB,mB,U=2,V=2) # EDGECLEANING
mP = mt_edge(smB,"prewitt",0,255,0,0,V=1,U=1)
mS = mP.mt_expand(mode=mt_square(radius=2),U=1,V=1).mt_inflate(U=1,V=1)
mD = mt_lutxy(mS,mP.mt_inflate(U=1,V=1),"x y - "+string(32)+" <= 0 x y - ?",U=1,V=1).mt_inflate(U=1,V=1).removegrain(20,-1)
smE = mt_merge(smB,Eval("smB." + "Removegrain(2,0)"),mD,luma=true,U=3,V=3) # MASKING
mE = mt_edge(smE,"prewitt",0,255,0,0,V=1,U=1).mt_lut(expr="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).removegrain(20,-1)
mF = mt_logic(tmask,mE,"max",U=1,V=1).removegrain(20,-1) # SHARPENING
sharp = ContraHD(smE,source,cf1,cb1,0)
sL = mt_merge(smE,sharp,mL,U=2,V=2) # ENHANCING
GF = sL.GradFun2DBmod(thr=1.4,thrC=1.8,str=0.8,strC=0.0,temp=70,adapt=64)
Fs = mt_merge(GF,sL,mF,luma=true,U=3,V=3)
Fs#.mergechroma(den)
""",threads=4,overlap=16,splitvertical=false) # or threads=2 # Назначение: для качественной обработки SATRemux
# Тип предварительного шумоподавителя: ccd_sse2
# Тип основного шумоподавителя: на основе векторного анализа оценки движения c последовательным временнЫм и пространственно-временным шумоподавителем
# Тип шарпера: ContraHD
# Наличие фильтра DeBanding по умолчанию: включен
# Скорость обработки: медленная
А если рип-исходник выглядит вообще паскудно с флюктацией строк, что нередко для старых материалов, то лучше применить:
скрытый текст
#ccd_sse2.vdf
#vdf_arguments:CamCD:0
#RemoveGrainSSE3.dll
#RepairSSE3.dll
#ColorMatrix.dll
#mvtools2.dll
#SmoothAdjust-MSVC-x86.dll
#fft3dfilter.dll
#nnedi3.dll
#MT.dll
#FillMargins.dll
#Cnr2.dll
#Warpsharp.dll
#AddGrainC.dll
#GradFun2DB.dll
#VerticalCleaner.dll
#mt_masktools-25.dll
#QTGMC2.51.avs
#srestore.avs
#vinverse.avs
#GradFun2DBmod.avs
#LimitedSharpenFaster mod.avs vinverse() # удаление остатков гребёнки
# srestore() # обратный трансфер и устранение блендов, необходимо применить двойной боб-деинтерлейс setmemorymax(640)
MT(""" ConvertToRGB32().CamCD(12,1) # удаление радужности и цветового шума # ==== цветокоррекция ====
RGBAdjust(r=1.05, g=1.05, b=1.0, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит голубоватым, нужно убрать общий синий оттенок
# RGBAdjust(r=1.0, g=1.05, b=1.05, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит красноватым, нужно убрать общий красный оттенок
# RGBAdjust(r=1.0, g=1.0, b=1.0, rb=0, gb=0, bb=0, rg=0.95, gg=0.95, bg=1.05) # Белый цвет выглядит белым, но нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=0.95, gg=0.95, bg=1.05) # Чёрный цвет выглядит тёмно-серым, белый недостаточно светел, нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=1.05, gg=1.05, bg=1.15) # Всё то же самое, но нужно высветлить тёмные области
ConvertToYV12() # Cnr2("oxx",8,16,191,100,255,32,255,false) # подавление цветового шума VHS
SmoothLevels(Smode=2, useopt=true) # ColorYUV(gain_y=0, off_y=0, gamma_y=0, cont_y=0, cont_u=-20, cont_v=-20) # Уменьшаем насыщенность цветов
# ColorYUV(gain_y=-0, off_y=-1, gamma_y=0, cont_y=10, cont_u=10, cont_v=10) # ==== цветокоррекция при преобладании жёлто-зелёных цветов ====
# str=4
# thr=32
# SmoothCurve(Ucurve="0-0;"+string(128-2*thr)+"-"+string(128-2*thr)+";"+string(128-thr)+"-"+string(128-thr+str)+";128-128;"+string(128+thr)+"-"+string(128+thr-str)+";"+string(128+2*thr)+"-"+string(128+2*thr)+";255-255"\
# ,Vcurve="0-0;"+string(128-2*thr)+"-"+string(128-2*thr)+";"+string(128-thr)+"-"+string(128-thr-str)+";128-128;"+string(128+thr)+"-"+string(128+thr+str)+";"+string(128+2*thr)+"-"+string(128+2*thr)+";255-255") source = last
# den = source.QTGMC(2,1,1,4,0,4,InputType=1,SLrad=1,SLMode=2,Sharpness=0.8,DCT=5).unsharpmask(20,3,0) # DeFlickering прогрессивного материала
den = source.QTGMC(2,2,2,4,0,4,InputType=1,SLrad=3,SLMode=2,Sharpness=1.0,DCT=5).unsharpmask(30,3,0) # DeFlickering прогрессивного материала
# den = source.QTGMC(2,2,3,4,0,4,InputType=1,SLrad=3,SLMode=2,Sharpness=1.2,DCT=5).unsharpmask(40,3,0) # DeFlickering прогрессивного материала # PROTECTING
threshold = 16
cutoff = 64
maxdiff = 4
rg17 = den.removegrain(17,-1)
iOB = source.mt_lut("x "+string(cutoff)+" >= x 0 ?",U=1,V=1)
mB = mt_makediff(iOB,rg17,U=1,V=1).mt_binarize(128+threshold,upper=false,U=1,V=1).removegrain(5,-1)
lB = mt_lutxy(den,source,"x y - abs "+string(maxdiff)+" <= x x y - 0 < y "+string(maxdiff)+" - x ? ?",U=1,V=1)
smB = mt_merge(den,lB,mB,U=2,V=2) # EDGECLEANING
mP = mt_edge(smB,"prewitt",0,255,0,0,V=1,U=1)
mS = mP.mt_expand(mode=mt_square(radius=4),U=1,V=1).mt_inflate(U=1,V=1)
mD = mt_lutxy(mS,mP.mt_inflate(U=1,V=1),"x y - "+string(24)+" <= 0 x y - ?",U=1,V=1).mt_inflate(U=1,V=1).removegrain(20,-1)
mt_merge(smB,Eval("smB." + "Removegrain(2,0)"),mD,luma=true,U=3,V=3) # GradFun2DBmod(thr=1.2,thrC=1.6,str=0.8,strC=0.0,temp=70,adapt=64)
GradFun2DBmod(thr=1.4,thrC=1.8,str=1.0,strC=0.0,temp=70,adapt=64)
# GradFun2DBmod(thr=1.51,thrC=2.3,str=1.2,strC=0.0,temp=70,adapt=64)
Вот эти строчки можно пихать как есть в программу обработки (VirtualDub или Rhozet Carbon Coder), ничего там ручками править уже не надо? Потому что я в них вообще ничего не понимаю.
|
|
Pustovetov
Стаж: 17 лет 1 месяц Сообщений: 4254
|
Pustovetov ·
26-Май-11 14:11
(спустя 1 час 18 мин.)
Marillion78 писал(а):
А мне надо обработать .m2v (почистить шумы, увеличить четкость), и в этом же формате сохранить, чтобы потом заново собрать DVD.
Это делается в кодерах мпег2 типа CCE, а не в каком-то там виртуалдабе
|
|
Tempter57
Стаж: 16 лет 2 месяца Сообщений: 4963
|
Tempter57 ·
26-Май-11 15:29
(спустя 1 час 17 мин., ред. 26-Май-11 15:47)
Marillion78 писал(а):
Потому что я в них вообще ничего не понимаю.
Ключевые слова именно эти. Значит рано вам браться за обработку видео без изучения теоретических основ. Чтобы мы здесь не советовали вам, это как мёртвому припарка.
http://avisynth.org.ru/docs/russian/index.htm - теоретическая база
http://www.ixbt.com/divideo/avisynth1.shtml - прикладная база
|
|
Marillion78
Стаж: 16 лет 9 месяцев Сообщений: 1031
|
Marillion78 ·
26-Май-11 15:38
(спустя 9 мин., ред. 26-Май-11 15:38)
Tempter57 писал(а):
Marillion78 писал(а):
Потому что я в них вообще ничего не понимаю.
Ключевые слова именно эти. Значит рано вам браться за обработку видео без изучения теоретических основ. Чтобы мы здесь не советовали вам, это как мёртвому припарка.
В идеале бы просто обойтись без использования Avisynth, потому как это инструментарий для программистов.
Почти то же самое, что обрабатывать видео на ассемблере.
Хотелось бы почистить шумы и увеличить резкость с помощью наглядного GUI-софта, способного обрабатывать .m2v-файлы, и в этом же формате сохранять. И где программировать ручками не надо ничего.
|
|
Tim68
Стаж: 14 лет 10 месяцев Сообщений: 712
|
Tim68 ·
26-Май-11 18:20
(спустя 2 часа 42 мин., ред. 26-Май-11 18:20)
Pustovetov писал(а):
Marillion78 писал(а):А мне надо обработать .m2v (почистить шумы, увеличить четкость), и в этом же формате сохранить, чтобы потом заново собрать DVD. Это делается в кодерах мпег2 типа CCE, а не в каком-то там виртуалдабе
Думаете, что для "...почистить шумы, увеличить четкость..." CCE самое то, что надо, вот "...и в этом же формате сохранить..." это другое дело.
Marillion78 писал(а):
В идеале бы просто обойтись без использования Avisynth
Испытали небольшой конфуз, пройдет. Судя по дате регистрации на треккере давно, а самому поработать захотелось впервые, всегда бывает что-то в первый раз - главное не останавливаться.
Самое основное чему надо научиться -это загружать медиафайл через AviSynth.
Marillion78 писал(а):
Хотелось бы почистить шумы и увеличить резкость с помощью наглядного GUI-софта
для начала и VirtualDub наглядный GUI-софт для безпотерьного кодирования в avi-шку, а дальше без заморочек хошь в CCE, хошь в Rhozet Carbon Coder.
|
|
Pustovetov
Стаж: 17 лет 1 месяц Сообщений: 4254
|
Pustovetov ·
26-Май-11 18:58
(спустя 38 мин., ред. 26-Май-11 18:58)
Tim68 писал(а):
Думаете, что для "...почистить шумы, увеличить четкость..." CCE самое то, что надо, вот
Чистятся шумы и увеличивается резкость в ависинте. А CCE берет скрипт на вход. Ровно как виртуалдаб
|
|
Marillion78
Стаж: 16 лет 9 месяцев Сообщений: 1031
|
Marillion78 ·
27-Май-11 09:31
(спустя 14 часов, ред. 27-Май-11 09:31)
Tim68 писал(а):
Судя по дате регистрации на треккере давно, а самому поработать захотелось впервые, всегда бывает что-то в первый раз - главное не останавливаться..
Я вообще-то еще и фильмы перевожу.
|
|
Tim68
Стаж: 14 лет 10 месяцев Сообщений: 712
|
Tim68 ·
27-Май-11 09:59
(спустя 28 мин.)
Marillion78 писал(а):
Я вообще-то еще и фильмы перевожу.
извеняйте если обидел, фраза:
Tim68 писал(а):
самому поработать захотелось впервые
касалась работы с видеорядом.
|
|
Marillion78
Стаж: 16 лет 9 месяцев Сообщений: 1031
|
Marillion78 ·
29-Май-11 17:06
(спустя 2 дня 7 часов, ред. 29-Май-11 17:06)
Tempter57 писал(а):
А если рип-исходник выглядит вообще паскудно с флюктацией строк, что нередко для старых материалов, то лучше применить:
скрытый текст
#ccd_sse2.vdf
#vdf_arguments:CamCD:0
#RemoveGrainSSE3.dll
#RepairSSE3.dll
#ColorMatrix.dll
#mvtools2.dll
#SmoothAdjust-MSVC-x86.dll
#fft3dfilter.dll
#nnedi3.dll
#MT.dll
#FillMargins.dll
#Cnr2.dll
#Warpsharp.dll
#AddGrainC.dll
#GradFun2DB.dll
#VerticalCleaner.dll
#mt_masktools-25.dll
#QTGMC2.51.avs
#srestore.avs
#vinverse.avs
#GradFun2DBmod.avs
#LimitedSharpenFaster mod.avs vinverse() # удаление остатков гребёнки
# srestore() # обратный трансфер и устранение блендов, необходимо применить двойной боб-деинтерлейс setmemorymax(640)
MT(""" ConvertToRGB32().CamCD(12,1) # удаление радужности и цветового шума # ==== цветокоррекция ====
RGBAdjust(r=1.05, g=1.05, b=1.0, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит голубоватым, нужно убрать общий синий оттенок
# RGBAdjust(r=1.0, g=1.05, b=1.05, rb=0, gb=0, bb=0, rg=1.0, gg=1.0, bg=1.0) # Белый цвет выглядит красноватым, нужно убрать общий красный оттенок
# RGBAdjust(r=1.0, g=1.0, b=1.0, rb=0, gb=0, bb=0, rg=0.95, gg=0.95, bg=1.05) # Белый цвет выглядит белым, но нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=0.95, gg=0.95, bg=1.05) # Чёрный цвет выглядит тёмно-серым, белый недостаточно светел, нужно убрать общую желтизну
# RGBAdjust(r=1.1, g=1.1, b=1.1, rb=-10, gb=-10, bb=-10, rg=1.05, gg=1.05, bg=1.15) # Всё то же самое, но нужно высветлить тёмные области
ConvertToYV12() # Cnr2("oxx",8,16,191,100,255,32,255,false) # подавление цветового шума VHS
SmoothLevels(Smode=2, useopt=true) # ColorYUV(gain_y=0, off_y=0, gamma_y=0, cont_y=0, cont_u=-20, cont_v=-20) # Уменьшаем насыщенность цветов
# ColorYUV(gain_y=-0, off_y=-1, gamma_y=0, cont_y=10, cont_u=10, cont_v=10) # ==== цветокоррекция при преобладании жёлто-зелёных цветов ====
# str=4
# thr=32
# SmoothCurve(Ucurve="0-0;"+string(128-2*thr)+"-"+string(128-2*thr)+";"+string(128-thr)+"-"+string(128-thr+str)+";128-128;"+string(128+thr)+"-"+string(128+thr-str)+";"+string(128+2*thr)+"-"+string(128+2*thr)+";255-255"\
# ,Vcurve="0-0;"+string(128-2*thr)+"-"+string(128-2*thr)+";"+string(128-thr)+"-"+string(128-thr-str)+";128-128;"+string(128+thr)+"-"+string(128+thr+str)+";"+string(128+2*thr)+"-"+string(128+2*thr)+";255-255") source = last
# den = source.QTGMC(2,1,1,4,0,4,InputType=1,SLrad=1,SLMode=2,Sharpness=0.8,DCT=5).unsharpmask(20,3,0) # DeFlickering прогрессивного материала
den = source.QTGMC(2,2,2,4,0,4,InputType=1,SLrad=3,SLMode=2,Sharpness=1.0,DCT=5).unsharpmask(30,3,0) # DeFlickering прогрессивного материала
# den = source.QTGMC(2,2,3,4,0,4,InputType=1,SLrad=3,SLMode=2,Sharpness=1.2,DCT=5).unsharpmask(40,3,0) # DeFlickering прогрессивного материала # PROTECTING
threshold = 16
cutoff = 64
maxdiff = 4
rg17 = den.removegrain(17,-1)
iOB = source.mt_lut("x "+string(cutoff)+" >= x 0 ?",U=1,V=1)
mB = mt_makediff(iOB,rg17,U=1,V=1).mt_binarize(128+threshold,upper=false,U=1,V=1).removegrain(5,-1)
lB = mt_lutxy(den,source,"x y - abs "+string(maxdiff)+" <= x x y - 0 < y "+string(maxdiff)+" - x ? ?",U=1,V=1)
smB = mt_merge(den,lB,mB,U=2,V=2) # EDGECLEANING
mP = mt_edge(smB,"prewitt",0,255,0,0,V=1,U=1)
mS = mP.mt_expand(mode=mt_square(radius=4),U=1,V=1).mt_inflate(U=1,V=1)
mD = mt_lutxy(mS,mP.mt_inflate(U=1,V=1),"x y - "+string(24)+" <= 0 x y - ?",U=1,V=1).mt_inflate(U=1,V=1).removegrain(20,-1)
mt_merge(smB,Eval("smB." + "Removegrain(2,0)"),mD,luma=true,U=3,V=3) # GradFun2DBmod(thr=1.2,thrC=1.6,str=0.8,strC=0.0,temp=70,adapt=64)
GradFun2DBmod(thr=1.4,thrC=1.8,str=1.0,strC=0.0,temp=70,adapt=64)
# GradFun2DBmod(thr=1.51,thrC=2.3,str=1.2,strC=0.0,temp=70,adapt=64)
Попробовал эксперимента ради загрузить с вместе с этой программой произвольный .avi через Avisynth в VirtualDubMod.
Т.е. сначала просто в VirtualDubMod открыл через Avisynth .avi-файл, создался дефолтный .avs-файл с путями загрузки основного .avi-файла, туда я скопипастил Вашу программу.
Нажимаю F5 в VirtualDubMod - выдает Parse error: string missing closing quotation marks,
путь_к_avs.-файлу\ line 30, column 4/
line 30, column 4 - это у меня в редакторе вроде вот это: MT("""
|
|
Tempter57
Стаж: 16 лет 2 месяца Сообщений: 4963
|
Tempter57 ·
30-Май-11 09:05
(спустя 15 часов, ред. 30-Май-11 09:05)
Marillion78
Всё, что указано столбцом, в начале пресета,-это необходимые плагины для подключения. Вам необходимо иметь их в своей папке AviSynth 2.5\plugins. Вам проще установить последнюю версию конвертера XviD 4PSP 5.0, подключить там пресет DVD_SAT QTGMC MT в строке Фильтрация и конвертер сам создаст вам необходимый скрипт AviSynth, но вам надо прочесть инструкцию пользователя к данному конвертеру. Лучшая лежала на сайте videorip.info. Кроме того я уже давал вам ссылку на прикладную статью по AviSynth http://www.ixbt.com/divideo/avisynth1.shtml и повторяю вам ещё раз: без определённой базы знаний не надо соваться в обработку видео вообще. У вас просто будет возникать один вопрос за другим, которые решаются довольно легко, но нужна определённая база знаний. Кроме того рекомендую изучить описание плагина mvtools2, благо Fizick -наш человек и написано по-русски, включая все известные его фильтры. Потом заняться плагином MaskTools2 от Manao. В понимании работы масок вам поможет статья здешнего профессора аниме TurboPascal7 "Masktools для новичков и вообще" и его же статья по фильтру DeBanding "GradFun2DBmod для новичков и вообще". Ну, а на forum.doom9.org предельное внимание к скриптам обработки от Didee и толковым рекомендациям Gavino. Эти парни - гуру AviSynth.
|
|
|