Последние обсуждения Поиск
Новые форумы
Общие форумы
Форумы поддержки портала iXBT.com
Специализированные форумы
ПроцессорыРазгон и охлаждениеСистемные платыМодули памятиВидеосистемаКриптовалюты, майнинг, blockchain-технологии, NFTИскусственный интеллект: технологии, практика, развитиеTV- и FM-тюнеры, видеовход, видеовыходЦифровое видео: захват, монтаж, обработкаМониторы и другие устройства отображенияЦифровое фотоБеспилотные летательные аппаратыЦифровой звукProAudio: Профессиональное звуковое оборудованиеСтереосистемыДомашний кинотеатр: проигрыватели и источники сигналаДомашний кинотеатр: аудиосистемаДомашний кинотеатр: ТV и проекторыМагнитные и SSD накопителиОптические носители информацииСетевые носители информацииПериферияКорпуса, блоки питания, UPSСети, сетевые технологии, подключение к интернетуСистемное администрирование, безопасностьСерверыНоутбуки, нетбуки и ультрабукиПланшеты и электронные книгиМобильные телефоны, смартфоны, кпк, коммуникаторыМобильные гаджетыОператоры и технологии мобильной связиТелефония, телекоммуникации, офисные АТСБытовая техника
Программы
Игры
Авторские форумы
Прочие форумы
Архивы конференции
Архив "О Конференции"Архив "Процессоры"Архив "Разгон и охлаждение"Архив "Системные платы"Архив "Модули памяти"Архив "Видеосистема"Архив "Видеозахват"Архив "Мониторы и другие устройства отображения"Архив "Цифровое изображение"Архив "Цифровой звук"Архив "Периферия"Архив "Корпуса, блоки питания, UPS"Архив "Коммуникации: сети и сетевые технологии"Домашний интернет, модемы (архив)Архив "Системное администрирование, безопасность"Архив "Мобильная связь"Программы Microsoft: Windows, Office, Server, Windows LiveАрхив "OС и системное ПО"Архив "Программы: Интернет"Архив "Программирование"Форум прикладных программистовАрхив "Электронные устройства и компоненты"Архив "Околокомпьютерный Флейм & Общий"Архив "Полемика (Злобный Флейм)"Околоавтомобильный ФлеймФорум ремонтниковВопросы компании IntelФотокамеры SamsungФорум о магазине приложений RuStoreФорум по продукции компании Huawei
Справка и сервисы
Другие проекты iXBT.com
Страницы:Кликните, чтобы указать произвольную страницуназад15далее
pugrudik: Обработка в AviSynth видео, полученного после оцифровки с VHS и других аналоговых кассет
Howler
Member
2119/7385 ответов, #7 в рейтинге
22 года на iXBT, с января 2003
Чаще пишет Р Р† "Игры" (58%)
Инфо Ответить
H
Howler Member
30 дней назад / 29 января 2025 17:53
Иван Гордиенко
я занимаюсь оцифровкой домашнего видео архива
почему бы вам не попробовать обработку в Vapoursynth. С теми же фильтрами это в 2,5 раза быстрее. Скрипты под HyBrid написаны, если требуется дополнительная обработка Spotless, можно подключить скрипт Killerspot для удаления мелких пятен с последующим восстановлением граней с помощью Shader. Для снижения мерцания по яркости есть возможность подключить ReduceFlicker:
001# Imports
002import vapoursynth as vs
003# getting Vapoursynth core
004import ctypes
005import sys
006import os
007core = vs.core
008# Import scripts folder
009scriptPath = 'F:/Hybrid/64bit/vsscripts'
010sys.path.insert(0, os.path.abspath(scriptPath))
011# Loading Support Files
012Dllref = ctypes.windll.LoadLibrary("F:/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
013# Loading Plugins
014core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/vsznedi3.dll")
015core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libdescale.dll")
016core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/Bilateral.dll")
017core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/RemoveDirt/RemoveDirtVS.dll")
018core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DebandFilter/Flash3kDeband/flash3kyuu_deband.dll")
019core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/FrameFilter/ReduceFlicker/ReduceFlicker.dll")
020core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/TTempSmooth/TTempSmooth.dll")
021core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/TCanny.dll")
022core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/ZSmooth/zsmooth.dll")
023core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/CTMF/CTMF.dll")
024core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DeblockFilter/Deblock/Deblock.dll")
025core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/DCTFilter.dll")
026core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/MiscFilter/EdgeFixer/EdgeFixer.dll")
027core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libtemporalmedian.dll")
028core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libvs_placebo.dll")
029core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/CCD/ccd.dll")
030core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/SharpenFilter/CAS/CAS.dll")
031core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/GrainFilter/RemoveGrain/RemoveGrainVS.dll")
032core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/GrainFilter/AddGrain/AddGrain.dll")
033core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll")
034core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/NEO_FFT3DFilter/neo-fft3d.dll")
035core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/EEDI3m_opencl.dll")
036core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/SharpenFilter/AWarpSharp2/libawarpsharp2.dll")
037core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/NNEDI3CL.dll")
038core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
039core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/scenechange.dll")
040core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
041core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/MiscFilter/MiscFilters/MiscFilters.dll")
042core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DeinterlaceFilter/Bwdif/Bwdif.dll")
043core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/SourceFilter/LSMASHSource/LSMASHSource.dll")
044# Import scripts
045import edi_rpow2
046import fvsfunc
047import muvsfunc
048import killerspots
049import SpotLess
050import mclean
051import G41Fun
052import chromashift
053import havsfunc
054  
055clip = core.lsmas.LWLibavSource(r'E:/Tests/myfile.avi', format="YUV420P8", stream_index=0, cache=0, prefer_hw=0)
056  
057# Setting detected color matrix (470bg).
058clip = core.std.SetFrameProps(clip, _Matrix=5)
059# Setting color transfer info (470bg), when it is not set
060clip = clip if not core.text.FrameProps(clip,'_Transfer') else core.std.SetFrameProps(clip, _Transfer=5)
061# Setting color primaries info (), when it is not set
062clip = clip if not core.text.FrameProps(clip,'_Primaries') else core.std.SetFrameProps(clip, _Primaries=5)
063# Setting color range to TV (limited) range.
064clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
065  
066# making sure frame rate is set to 5
067clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
068  
069clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=2) # tff
070  
071# Deinterlacing using QTGMC
072#clip = havsfunc.QTGMC(Input=clip, Preset="Fast", TFF=True, opencl=True) # new fps: 50
073clip = havsfunc.QTGMC(Input=clip, Preset='Slow', TFF=True, NoiseTR=2, SourceMatch=3, Sharpness=0.1, opencl=True)
074  
075# Making sure content is preceived as frame based
076clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=0) # progressive
077  
078# Chroma adjustment using ChromaShiftSP
079#clip = chromashift.ChromaShiftSP(clip=clip, Y=2.50)
080  
081# Spot removal using SpotLess
082clip = SpotLess.SpotLess(clip=clip, radT=1, pel=1)
083clip = core.std.CropRel(clip=clip, left=10, right=10, top=2, bottom=14)# cropping
084  
085# rainbow removal, chroma denoising using CCD, Variant 3
086clip = core.resize.Bicubic(clip=clip, format=vs.RGBS, range_s="limited")
087clip = core.ccd.CCD(clip=clip, threshold=7.00)
088clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P8, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
089  
090# removing grain using MLDegrain
091clip = G41Fun.MLDegrain(clip=clip, thSAD=400, tr=2, chroma=False, soft=[0,0,0])
092  
093#  denoising  using MCTemporalDenoise, TemporalDegrain2, SMDegrain or mClean
094#clip = havsfunc.MCTemporalDenoise(i=clip, settings="high", stabilize=True, ncpu=6, chroma=False)# Variant 1
095#clip = G41Fun.TemporalDegrain2(clip=clip, degrainTR=3, degrainPlane=0, meAlgPar=False, postFFT=0, fftThreads=6)# Variant 2
096#clip = havsfunc.SMDegrain(input=clip, tr=3, thSAD=400, RefineMotion=True, interlaced=False, chroma=False, plane=0, prefilter=2)# Variant 3
097clip = mclean.mClean(clip=clip, thSAD=400, sharp=10, rn=14, deband=4, depth=0, strength=20, icalc=True, rgmode=18, chroma=False)# Variant 4
098  
099# removing flickering using ReduceFlicker
100#clip = core.rdfl.ReduceFlicker(clip=clip, strength=3, aggressive=1)
101  
102# applying dehalo using DeHalo_alpha or FineDehalo
103#clip = havsfunc.DeHalo_alpha(clip, rx=2.40, ry=2.40, darkstr=0.0, brightstr=1.5)
104clip = havsfunc.FineDehalo(clip, darkstr=0.3, brightstr=1.5, showmask=0, thmi=50, thma=100, rx=2.4)
105  
106# contrast sharpening using AWarpSharp2 & LSFmod
107clip = core.warp.AWarpSharp2(clip=clip, depth=4)
108clip = havsfunc.LSFmod(clip, strength=40)
109  
110clip = killerspots.KillerSpots(clip=clip, advanced=False)
111#clip = core.std.CropRel(clip=clip, left=10, right=10, top=8, bottom=8) # removing borders (vsKillerSpots)
112  
113# Resizing using 10 - bicubic spline
114clip = core.resize.Bicubic(clip=clip, format=vs.RGBS, range_s="limited")
115clip = core.fmtc.resample(clip=clip, kernel="spline16", w=784, h=576, interlaced=False, interlacedd=False)
116  
117# adjusting color space from RGBS to YUV444P16 for vsGLSLFilmGrain
118clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P16, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
119with open("F:/Hybrid/64bit/vsfilters/GLSL/parameterized/filmgrain.glsl") as glslf:
120  glsl = glslf.read()
121glsl = glsl.replace('#define INTENSITY 0.05', '#define INTENSITY 0.01')
122clip = core.placebo.Shader(clip=clip, shader_s=glsl, width=clip.width, height=clip.height)
123  
124# debanding using GradFun3 or f3kdb
125#clip = fvsfunc.GradFun3(src=clip)
126clip = core.f3kdb.Deband(clip, dynamic_grain=True, keep_tv_range=True, preset="veryhigh", dither_algo=2, grainy=32, grainc=16, output_depth=16)
127  
128# adjusting output color from: YUV444P16 to YUV420P10 for NVEncModel or x265-10bit
129#clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
130  
131# adjusting output color from: YUV444P16 to YUV420P8 for NVEncModel or x264
132clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P8, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
133  
134# set output frame rate to 50fps (progressive)
135clip = core.std.AssumeFPS(clip=clip, fpsnum=50, fpsden=1)
136# Output
137clip.set_output()
Вам остаётся только подключить свой исходник, подобрать кроп, перепроверить адреса плагинов. Например, у меня Hybrid установлен на диск F. Разумеется надо под свой исходник подключить вариант деинтерлейса QTGMC и основной фильтр шумоподавления.

Исправлено: Howler, 29.01.2025 20:49

Игорь Киселёв
Member
573/586 ответов, #16 в рейтинге
8 лет на iXBT, с октября 2016
Чаще пишет Р Р† "Видеозахват" (95%)
Web-страница
Инфо Ответить
Игорь Киселёв Member
30 дней назад / 29 января 2025 18:20
Howler

Протестировал следующий скрипт для обработки исходников VHS Cam под Vapoursynth с Upscale в разрешение 1280х720
Для чего в строках 97-99 применяется три раза QTGMC, и для чего нужен ключ opencl?
Howler
Member
2120/7386 ответов, #7 в рейтинге
22 года на iXBT, с января 2003
Чаще пишет Р Р† "Игры" (58%)
Инфо Ответить
H
Howler Member
30 дней назад / 29 января 2025 18:29
Игорь Киселёв
Для чего в строках 97-99 применяется три раза QTGMC, и для чего нужен ключ opencl
Вы о вариантах подключения в скрипт слышали? Там, как раз, три варианта QTGMC, но два закрыты знаком # . В этом случае строка скрипта не читается. Аналогично и по выбору основного шумоподавителя ниже, там вообще 4 варианта , см. стр. 141-144.
opencl =true для максимального использования возможностей своего процессора и ускорения процесса обработки. Я понял, что вы рассматриваете верхний скрипт на 14 странице под апскейл.
Игорь Киселёв
Member
574/587 ответов, #16 в рейтинге
8 лет на iXBT, с октября 2016
Чаще пишет Р Р† "Видеозахват" (95%)
Web-страница
Инфо Ответить
Игорь Киселёв Member
30 дней назад / 29 января 2025 18:43
Howler
длинная цитата была автоматически скрыта. нажмите, чтобы её увидеть.
Понял. Спасибо за подсказку, ключ надо попробовать.

Задам ещё один вопрос. Поднимал давно эту тему, но результат, честно говоря, уже забыл. Имеются оцифровки записей с телеэфира. Исходник явно прогрессивный, т.к., выраженной гребёнки нет, но есть лёгкая зубчатость на наклонных линиях из-за особенностей передачи прогрессивного сигнала чересстрочным методом. Применять фильтр деинтерлейса к такому материалу вроде как бы не имеет смысла. Пробовал таки, мелкая гребёнка уходит, но портится изображение, особенно на сильно шумных записях и падает детализация. Быть может, проще применить анти-алайзинг и не портить изображение деинтерлейсом?
К сообщению приложены файлы:
Howler
Member
2121/7387 ответов, #7 в рейтинге
22 года на iXBT, с января 2003
Чаще пишет Р Р† "Игры" (58%)
Инфо Ответить
H
Howler Member
30 дней назад / 29 января 2025 19:54
Игорь Киселёв
Начну с главного: всё эфирное телевидение пока интерлейсное. Я думаю, что речь идёт о сегментированных кадрах. Поля в системе PAL, которые подаются без сдвига по времени, называются сегментированными кадрами (sf). Сегментированные кадры в системе PAL — это метод, при котором полный HD-кадр делится на два равных поля без смещения по времени, которые затем обрабатываются и снова соединяются вместе:
нечётные строки записанного изображения располагаются в первой половине кадра, чётные строки того же изображения — во второй. Совместив две половины кадра вместе, получают полное изображение. В таких случаях деинтерлейс не производится.
Но ранее в системе телевидения PAL длина задержки между полями равна длительности строчного интервала — 64 мкс. Когда картина статичная, то гребёнка не появляется, но только появляются объекты движения или происходит панорамное движение камеры, как ту же появляется гребёнка. Чтобы не обрабатывать постоянно весь кадр на предмет деинтерлейса, в TDeint и Yadif, например, есть возможность подключать деинтерлейс по порогу движения.
1TDeint(order=1, slow=2, mthreshL=5, mthreshC=5, full=false, cthresh=7, MI=40)
1global deinterlaced_part = Yadif(order=1)#.Subtitle("deinterlaced frame", align=5)
2ScriptClip(last, "IsCombedTIVTC(last, cthresh=7, MI=40) ? deinterlaced_part : last")
Но порой следы гребёнки остаются. Их удаляют с помощью плагина vinverse. Иногда, если stripe(ступенька) остаётся применяются фильтры Destripe. Самый простейший вариант
1W = last.Width()
2H = last.Height()
3  
4spline36resize(W, H/2)
5#spline36resize(W, H/3)
6#daa3mod()
7maa2(aa=48,ss=2.0,chroma=false,threads=1) # Антиайлиазинг
8spline36resize(W, H)
То есть понижаем разрешение по высоте клипа в 2...3 раза, применяем фильтр антиайлиазинга и возвращаемся обратного к первоначальной высоте клипа.
Довольно часто приходится после vinverse() подключать обработку QTGMC в прогрессивном режиме , иногда даже с подключением EEDI3()
1vinverse() # удаление остатков гребёнки
2QTGMC(Preset="Slow",InputType=1,SLrad=3,SLMode=2,Sharpness=0.7,tr2=2,Edithreads=1,DCT=dct)
3EEDI3()#.FTurnLeft().EEDI3().FTurnRight() # для обработки старых исходников с лесенкой на контурах
В тяжелейших случаях применяется
1vinverse() # удаление остатков гребёнки
2   
3 # QTGMC(Preset="Slow", InputType=1, Sharpness=1.0, Edithreads=1, DCT=5)
4#QTGMC(Preset="Slower", InputType=2, ProgSADMask=12.0, Sharpness=1.0, Edithreads=1) 
5  
6t = QTGMC(Preset="Slower", InputType=2, ProgSADMask=12.0, Sharpness=1.0, Edithreads=1)
7b = QTGMC(Preset="Slower", InputType=3, PrevGlobals="Reuse",Edithreads=1) # Reuse motion vectors from first call for a good speed-up
8 Repair( t, b, 1 )
Иногда дело доходило до того, что при деинтерлейсе приходилось просто одно из полей интерполировать QTGMC до полного кадра, а второе поле отбрасывать:
1QTGMC(preset="Fast", sharpness=0.3, FpsDivisor=2)
Иногда помогало такое решение
1TDeint(order=1, edeint=last.AssumeTFF().QTGMC(preset="Fast", sharpness=0.3, Edithreads=1).SelectEven(), full=false, cthresh=7, MI=40)
1assumetff()
2tdeint(mode=2,edeint=QTGMC(preset="placebo", Lossless=2,SourceMatch=3,MatchPreset="placebo",MatchPreset2="placebo",MatchEdi="eedi3",EdiMode="EEDI3+NNEDI3"),slow=2,mtnmode=1, cthresh=4, MI=30, emask=TMM2(mode=1,ttype=3))
1# более быстрый деинтерлейс
2edeintted = nnedi3(field=-2, qual=2)
3TDeint(edeint=edeintted, order=-1, mode=2, sharp=true, mtnmode=3, full=false, cthresh=4, MI=30, tryWeave=false, type=2, emask=TMM2(mode=1))
1# очень медленный деинтерлейс
2edeintted = eedi3(field=-2, sclip=nnedi3(field=-2, qual=2))
3TDeint(edeint=edeintted, order=-1, mode=2, sharp=true, mtnmode=3, full=false, cthresh=4, MI=30, tryWeave=false, type=2, emask=TMM2(mode=1))
К каждому исходнику надо подходить индивидуально.
Игорь Киселёв
Member
575/588 ответов, #16 в рейтинге
8 лет на iXBT, с октября 2016
Чаще пишет Р Р† "Видеозахват" (95%)
Web-страница
Инфо Ответить
Игорь Киселёв Member
30 дней назад / 29 января 2025 20:55
Howler

К каждому исходнику надо подходить индивидуально.
В случае оцифровки рекламных блоков встречаются и сложные варианты, когда одна реклама идёт с сегментированными кадрами, а следующая за ней с нормальными интерлейсными. Такое лечить, наверное, только выбрасыванием половины строк с последующей интерполяцией. Правда, зазубрины на сегментированных кадрах становятся ещё сильнее.
SiavaRu
Member
50/79 ответов, #35 в рейтинге
16 лет на iXBT, с июня 2008
Web-страница
Инфо Ответить
SiavaRu Member
30 дней назад / 29 января 2025 22:13
Игорь Киселёв
для подавления секамовских "факелов"
Если я правильно понял о чём речь, то с vapoursynth bifrost такое исправлял.


кто-нибудь использует в QTGMC ключ EZDenoise
В hybrid у QTGMC можно сделать Final temporal smoothing (значения от 0 до 3), которое тоже хорошо так сглаживает шумы. Но вот сегодня я похоже открыл для себя, что Yadifmod может делать деинтерлейс не хуже, чем QTGMC. И точно лучше, чем Bwdif. При этом картинка не такая пластилиновая получается. Но хорошо работает это всё только с включенным Degrain-фильтром.
Игорь Киселёв
Member
576/589 ответов, #16 в рейтинге
8 лет на iXBT, с октября 2016
Чаще пишет Р Р† "Видеозахват" (95%)
Web-страница
Инфо Ответить
Игорь Киселёв Member
30 дней назад / 29 января 2025 22:28
У меня есть "тестовое" видео ужасного качества, где последствия работы деинтерлейсера на подобном материале заметна очень хорошо. Яркостный шум из относительно мелкого превращается в жирный, шумодавить который значительно сложнее. Да и сама картинка становится рыхлой.
Слева исходник, справа результат применённого Yadif.
Кто хочет поупражняться в искусстве шумоподавления, могу выслать сэмпл.))
К сообщению приложены файлы:
SiavaRu
Member
51/80 ответов, #35 в рейтинге
16 лет на iXBT, с июня 2008
Web-страница
Инфо Ответить
SiavaRu Member
30 дней назад / 29 января 2025 22:31
Игорь Киселёв
Я такое сначала с помощью NeatVideo бы шумодавил (прям исходник), - потом будет конфетка.

Игорь Киселёв
могу выслать
Могу попробовать)
Игорь Киселёв
Member
577/590 ответов, #16 в рейтинге
8 лет на iXBT, с октября 2016
Чаще пишет Р Р† "Видеозахват" (95%)
Web-страница
Инфо Ответить
Игорь Киселёв Member
30 дней назад / 29 января 2025 22:50
SiavaRu

Могу попробовать)
https://transfiles.ru/0k6ai
SiavaRu
Member
52/81 ответов, #35 в рейтинге
16 лет на iXBT, с июня 2008
Web-страница
Инфо Ответить
SiavaRu Member
30 дней назад / 30 января 2025 00:09
Игорь Киселёв
Отличный пример!
Ну вот 3 варианта: https://disk.yandex.ru/d/KPG6-0SrNgz9MQ
Мне из них больше всего нравится -med который.
NeatVideo в принципе может и лучше, я не старался углубляться в его самые дебри. Деинтерлейс Yadifmod.

Скриншоты интерлейсного видео из VirtualDub

Исправлено: SiavaRu, 30.01.2025 00:31

К сообщению приложены файлы:
Howler
Member
2122/7388 ответов, #7 в рейтинге
22 года на iXBT, с января 2003
Чаще пишет Р Р† "Игры" (58%)
Инфо Ответить
H
Howler Member
30 дней назад / 30 января 2025 02:20
SiavaRu
Хороший результат
Я делал скриптом Vapoursynth Результат
Скрипт такой
001# Imports
002import vapoursynth as vs
003# getting Vapoursynth core
004import ctypes
005import sys
006import os
007core = vs.core
008  
009# Import scripts folder
010scriptPath = 'F:/Hybrid/64bit/vsscripts'
011sys.path.insert(0, os.path.abspath(scriptPath))
012# Loading Support Files
013Dllref = ctypes.windll.LoadLibrary("F:/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll")
014  
015# Loading Plugins
016core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/libnnedi3.dll")
017core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libdescale.dll")
018core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/Bilateral.dll")
019core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/RemoveDirt/RemoveDirtVS.dll")
020core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DebandFilter/Flash3kDeband/flash3kyuu_deband.dll")
021core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/TTempSmooth/TTempSmooth.dll")
022core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DerainbowFilter/SmoothUV/libsmoothuv.dll")
023core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/ZSmooth/zsmooth.dll")
024core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/CTMF/CTMF.dll")
025core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DeinterlaceFilter/TDeintMod/TDeintMod.dll")
026core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libvs_placebo.dll")
027core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/CCD/ccd.dll")
028core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/GrainFilter/RemoveGrain/RemoveGrainVS.dll")
029core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/GrainFilter/AddGrain/AddGrain.dll")
030core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll")
031core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/libmvtools.dll")
032core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
033core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/MiscFilter/MiscFilters/MiscFilters.dll")
034core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/SourceFilter/LSMASHSource/LSMASHSource.dll")
035  
036# Import scripts
037import fvsfunc
038import muvsfunc
039import mclean
040import G41Fun
041import chromashift
042import havsfunc
043  
044clip = core.lsmas.LWLibavSource(r'C:/Users/Asus/Downloads/Sample.avi', format="YUV420P8", stream_index=0, cache=0, prefer_hw=0)
045  
046# Setting detected color matrix (470bg).
047clip = core.std.SetFrameProps(clip, _Matrix=5)
048# Setting color transfer info (470bg), when it is not set
049clip = clip if not core.text.FrameProps(clip,'_Transfer') else core.std.SetFrameProps(clip, _Transfer=5)
050# Setting color primaries info (), when it is not set
051clip = clip if not core.text.FrameProps(clip,'_Primaries') else core.std.SetFrameProps(clip, _Primaries=5)
052# Setting color range to TV (limited) range.
053clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
054  
055# making sure frame rate is set to 5
056clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
057  
058clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=2) # tff
059  
060# Deinterlacing using TDeintMod
061deint = core.tdm.TDeintMod(clip, order=1, edeint=core.nnedi3.nnedi3(clip, field=1))
062  
063# Making sure content is preceived as frame based
064clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=0) # progressive
065  
066# rainbow removal using SmoothUV
067clip = core.smoothuv.SmoothUV(clip=clip, radius=4, threshold=270)
068  
069# Chroma adjustment using ChromaShiftSP
070#clip = chromashift.ChromaShiftSP(clip=clip, Y=2.50)
071  
072# Crop
073clip = core.std.CropRel(clip=clip, left=10, right=14, top=34, bottom=42)# cropping
074  
075# rainbow removal, chroma denoising using CCD, Variant 3
076clip = core.resize.Bicubic(clip=clip, format=vs.RGBS, range_s="limited")
077clip = core.ccd.CCD(clip=clip, threshold=12.00)
078clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P8, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
079  
080# removing grain using MLDegrain
081clip = G41Fun.MLDegrain(clip=clip, thSAD=700, tr=3, chroma=True, soft=[0,0,0])
082  
083#  denoising  using MCTemporalDenoise, TemporalDegrain2, SMDegrain or mClean
084#clip = havsfunc.MCTemporalDenoise(i=clip, settings="very high", stabilize=True, ncpu=6, chroma=True)# Variant 1
085clip = mclean.mClean(clip=clip, thSAD=700, sharp=10, rn=14, deband=0, depth=0, strength=40, icalc=True, rgmode=18, chroma=False)# Variant 2
086  
087# Resizing using 10 - bicubic spline
088clip = core.resize.Bicubic(clip=clip, format=vs.RGBS, range_s="limited")
089clip = core.fmtc.resample(clip=clip, kernel="spline16", w=768, h=512, interlaced=False, interlacedd=False)
090  
091# adjusting color space from RGBS to YUV444P16 for vsGLSLFilmGrain
092clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P16, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
093with open("F:/Hybrid/64bit/vsfilters/GLSL/parameterized/filmgrain.glsl") as glslf:
094  glsl = glslf.read()
095glsl = glsl.replace('#define INTENSITY 0.05', '#define INTENSITY 0.01')
096clip = core.placebo.Shader(clip=clip, shader_s=glsl, width=clip.width, height=clip.height)
097  
098# debanding using GradFun3 or f3kdb
099#clip = fvsfunc.GradFun3(src=clip)
100clip = core.f3kdb.Deband(clip, dynamic_grain=True, keep_tv_range=True, preset="veryhigh", dither_algo=2, grainy=16, grainc=8, output_depth=16)
101  
102# adjusting output color from: YUV444P16 to YUV420P10 for NVEncModel or x265-10bit
103#clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
104  
105# adjusting output color from: YUV444P16 to YUV420P8 for NVEncModel or x264
106clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P8, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
107  
108clip = core.std.AddBorders(clip=clip, left=0, right=0, top=32, bottom=32)
109  
110# set output frame rate to 25fps (progressive)
111clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
112# Output
113clip.set_output()
Скорость обработки и кодирования этим скриптом составила 24,5 fps.
Может с шейдером переборщил немного с восстановлением граней, тут дело вкуса, не люблю мыло.

В принципе можно просто подключить скрипты фильтрации для TV из обновлённой версии XviD4PSP5.10.346, на рутрекере второй пост темы. Например, вполне подошли для этого исходника TV_SAT2, TV_SAT Molotov2 или TV Fizzkiller.

Исправлено: Howler, 30.01.2025 21:23

Игорь Киселёв
Member
578/591 ответов, #16 в рейтинге
8 лет на iXBT, с октября 2016
Чаще пишет Р Р† "Видеозахват" (95%)
Web-страница
Инфо Ответить
Игорь Киселёв Member
29 дней назад / 30 января 2025 12:59
SiavaRu

Игорь Киселёв
Отличный пример!
Отличный результат по подавлению шума, я прямо удивлён. Но на втором скрине на воротнике рубашки видны неподавленные остатки расчёски. Yadif не отработал в этом случае. На первом тоже заметны.

P.S. А не поделитесь поломанным вариантом Neat Image для VD? Искал в своё время, так и не смог найти.
Unkas
Member
1/5208 ответов
11 лет на iXBT, с августа 2013
Чаще пишет Р Р† "История" (41%)
Россия
Инфо Ответить
U
Unkas Member
29 дней назад / 30 января 2025 13:06
на рутрекере брал, можно там глянуть Neat.
SiavaRu
Member
53/82 ответов, #35 в рейтинге
16 лет на iXBT, с июня 2008
Web-страница
Инфо Ответить
SiavaRu Member
29 дней назад / 30 января 2025 13:08
Игорь Киселёв
На скринах кадры видео без деинтерлейса.
Игорь Киселёв
Member
579/592 ответов, #16 в рейтинге
8 лет на iXBT, с октября 2016
Чаще пишет Р Р† "Видеозахват" (95%)
Web-страница
Инфо Ответить
Игорь Киселёв Member
29 дней назад / 30 января 2025 13:46
SiavaRu

Игорь Киселёв
На скринах кадры видео без деинтерлейса.
Расчёска есть и на видео. Увеличил для наглядности до 150%. На рукавах рубашки хорошо заметно.

Добавление от 30.01.2025 13:46:

Howler

Чтобы не обрабатывать постоянно весь кадр на предмет деинтерлейса, в TDeint и Yadif, например, есть возможность подключать деинтерлейс по порогу движения.
1TDeint(order=1, slow=2, mthreshL=5, mthreshC=5, full=false, cthresh=7, MI=40)
Пробовал. Результат неплохой, но на очень контрастных границах в изображении (к примеру, чёрные рамки) вылазят шевелящиеся пиксели. С чем это связано, не очень пока понятно.
К сообщению приложены файлы:
Howler
Member
2123/7389 ответов, #7 в рейтинге
22 года на iXBT, с января 2003
Чаще пишет Р Р† "Игры" (58%)
Инфо Ответить
H
Howler Member
29 дней назад / 30 января 2025 14:21
Игорь Киселёв
Подключите type=3 с нулевыми порогами, это позволит сгладить зубчики на контурной линии
TDeint(order=1, slow=2, mode=2, type=3, mthreshL=0, mthreshC=0)
Ваш ответ:

Нет значка Нет значка Р’РѕС‚ тут! Лампочка Восклицание Р’РѕРїСЂРѕСЃ Класс! Улыбка Злость Огорчение РџРѕРіРѕРІРѕСЂРёРј? Краснею Подмигивание Ругаю РћРґРѕР±СЂСЏСЋBIUdelSxsupxsuboffsp spoilerqurlimgvideo• list1. list1 codeprecenter-hr-rusQWE→ЙЦУ
файлыочистить
Ваше имя: Авторизуйтесь Предпросмотр В полную форму
вставить выделенную цитату в окно ответа
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Страницы:Кликните, чтобы указать произвольную страницуназад15далее
Последние обсуждения в Конференции
01:00Микроархитектура Lion Cove. Мобильные процессоры Intel Lunar Lake / десктопные LGA 1851 Arrow Lake Процессоры
01:00Ресиверы и усилители Denon ДК аудио
01:00Выбор SSD Накопители
00:58Украина после Евромайдана. Взгляд из России. Вход для лиц с русофобскими взглядами закрыт Политика
00:58Черный экран по 1-2 сек. без четкой зависимости от чего бы то ни было. Видеосистема
00:57 Ведьмак 3 - The Witcher 3: Wild Hunt (PS4,XONE) Консоли
00:56Зачем вам доллары $? Флуд
00:56Иммиграция. Как выжить за рубежом? Общий
00:46Женщины не способны любить? Семья
00:43На микроволновке отстают часы - возможно исправить? Р­Р». устройства
00:40S.T.A.L.K.E.R. 2 - теперь официально Игры
00:30Выбор BD-R/RE болванок Оптич. носители
00:28Электромобили - грядет революция? Авто
00:25Всё о кофе - выбор, тонкости кофеварения, покупка в интернет-магазинах и т.д. Кулинария
00:21Выбор матраса Ремонт
00:21Intel Atom и "все все все" Тех. поддержка
00:18О степени вреда сотовой связи. Влияние сотовых телефонов на здоровье. Излучение. SAR. РњРѕР±. операторы
00:18Футбол РЎРїРѕСЂС‚
00:18Выбор смартфона РњРѕР±. телефоны
00:13Выбор камеры, снимающей видео 2016 - 2024 Видеозахват
Последние темы без ответов
вчераМемориз. Лучшее из опубликованного на конференции IXBT. Юмор
вчераМутный и разноцветный шрифт на иконках и в меню. Видеосистема
вчераРазная плавность при одинаковом FPS в сюжетках Тех. поддержка
2 дняPhotoshop 2025 Фото
2 дняЗадачи с параметрами. Порекомендуйте книги Наука
3 дняКак 5G справляется с помехами? Цифр. Дом
00:55Замена Volkswagen Passat и Toyota Camry по цене Lada Aura. В продаже появились большие седаны Peugeot 508L
00:54«Легендарная» Lada Niva впервые получит фронтальную подушку безопасности: глава АвтоВАЗа рассказал, когда это случится
00:24В России начнут выпускать аналог Toyota Alphard с 8-ступенчатым «автоматом» и всего за 5,5 млн рублей. Минивэн Sollers SP7 показали на живых фото
00:08Galaxy S25, Galaxy S25 и Galaxy S25 Ultra стали суперхитом в Южной Корее — они побили рекорд продаж, установленный Galaxy Note 10
23:53вчераЗамена легендарному ГАЗ-66: стартовало производство обновленного «Урала-80», он получил 238-сильный мотор и полный привод
23:03вчераRocket Lab подтверждает запуск ракеты Neutron в 2025 году вопреки прогнозам аналитиков
21:51вчераЯпонская компания Astroscale успешно провела первое в мире сближение с неконтролируемым объектом на орбите
21:12вчераАвтоВАЗ готовит совершенно новую версию Lada Granta с топовым оснащением. Машину сняли на фото
20:41вчераКосмические аппараты Lunar Trailblazer и Odin столкнулись с техническими проблемами после запуска миссии IM-2
20:40вчераПродажи пикапов в России побили рекорд. Самая массовая модель — Toyota Hilux, а самая популярная — Great Wall Poer
20+ лет назад в этот день обсуждали
2000Как можно заработать в инете? Общий (архив)
2001Карту коллектора у кого взять можно? Сети
2002Пара вопросов по делфям Программирование
2002Какой CD-RW взять?(ваши предложения приветствуются) Оптич. носители
2002Модернизированный nForce!!!!! РЎРёСЃС‚. платы
2003HITACHI CML 174... где же? Рынок
2004Nikon Coolpix 4300 made in Japan vs made in Korea Фото
2004чтение данных из реестра, не заносится второе чтение в переменную Программирование (архив)
2005microsoft 1394 PC, где достать драйвер для этого устройства под 2К РўРµС…. поддержка
2005Как прибить старый корень DFS Администрирование