Р В Р’ВВВВВнфо
ОтветРСвЂВВВВть
Иван Гордиенко
я занимаюсь оцифровкой домашнего видео архива
почему бы вам не попробовать обработку в Vapoursynth. С теми же фильтрами это в 2,5 раза быстрее. Скрипты под HyBrid написаны, если требуется дополнительная обработка Spotless, можно подключить скрипт Killerspot для удаления мелких пятен с последующим восстановлением граней с помощью Shader. Для снижения мерцания по яркости есть возможность подключить ReduceFlicker:
Вам остаётся только подключить свой исходник, подобрать кроп, перепроверить адреса плагинов. Например, у меня Hybrid установлен на диск F. Разумеется надо под свой исходник подключить вариант деинтерлейса QTGMC и основной фильтр шумоподавления.
я занимаюсь оцифровкой домашнего видео архива
почему бы вам не попробовать обработку в Vapoursynth. С теми же фильтрами это в 2,5 раза быстрее. Скрипты под HyBrid написаны, если требуется дополнительная обработка Spotless, можно подключить скрипт Killerspot для удаления мелких пятен с последующим восстановлением граней с помощью Shader. Для снижения мерцания по яркости есть возможность подключить ReduceFlicker:
001 | # Imports |
002 | import vapoursynth as vs |
003 | # getting Vapoursynth core |
004 | import ctypes |
005 | import sys |
006 | import os |
007 | core = vs.core |
008 | # Import scripts folder |
009 | scriptPath = 'F:/Hybrid/64bit/vsscripts' |
010 | sys.path.insert(0, os.path.abspath(scriptPath)) |
011 | # Loading Support Files |
012 | Dllref = ctypes.windll.LoadLibrary( "F:/Hybrid/64bit/vsfilters/Support/libfftw3f-3.dll" ) |
013 | # Loading Plugins |
014 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/vsznedi3.dll" ) |
015 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/libdescale.dll" ) |
016 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/Bilateral.dll" ) |
017 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DenoiseFilter/RemoveDirt/RemoveDirtVS.dll" ) |
018 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DebandFilter/Flash3kDeband/flash3kyuu_deband.dll" ) |
019 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/FrameFilter/ReduceFlicker/ReduceFlicker.dll" ) |
020 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DenoiseFilter/TTempSmooth/TTempSmooth.dll" ) |
021 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/TCanny.dll" ) |
022 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DenoiseFilter/ZSmooth/zsmooth.dll" ) |
023 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DenoiseFilter/CTMF/CTMF.dll" ) |
024 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DeblockFilter/Deblock/Deblock.dll" ) |
025 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/DCTFilter.dll" ) |
026 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/MiscFilter/EdgeFixer/EdgeFixer.dll" ) |
027 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/libtemporalmedian.dll" ) |
028 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/libvs_placebo.dll" ) |
029 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DenoiseFilter/CCD/ccd.dll" ) |
030 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/SharpenFilter/CAS/CAS.dll" ) |
031 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/GrainFilter/RemoveGrain/RemoveGrainVS.dll" ) |
032 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/GrainFilter/AddGrain/AddGrain.dll" ) |
033 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DenoiseFilter/DFTTest/DFTTest.dll" ) |
034 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DenoiseFilter/NEO_FFT3DFilter/neo-fft3d.dll" ) |
035 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/EEDI3m_opencl.dll" ) |
036 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/SharpenFilter/AWarpSharp2/libawarpsharp2.dll" ) |
037 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/ResizeFilter/nnedi3/NNEDI3CL.dll" ) |
038 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/libmvtools.dll" ) |
039 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/scenechange.dll" ) |
040 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/Support/fmtconv.dll" ) |
041 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/MiscFilter/MiscFilters/MiscFilters.dll" ) |
042 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/DeinterlaceFilter/Bwdif/Bwdif.dll" ) |
043 | core.std.LoadPlugin(path= "F:/Hybrid/64bit/vsfilters/SourceFilter/LSMASHSource/LSMASHSource.dll" ) |
044 | # Import scripts |
045 | import edi_rpow2 |
046 | import fvsfunc |
047 | import muvsfunc |
048 | import killerspots |
049 | import SpotLess |
050 | import mclean |
051 | import G41Fun |
052 | import chromashift |
053 | import havsfunc |
054 | |
055 | clip = 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). |
058 | clip = core.std.SetFrameProps(clip, _Matrix=5) |
059 | # Setting color transfer info (470bg), when it is not set |
060 | clip = 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 |
062 | clip = clip if not core.text.FrameProps(clip, '_Primaries' ) else core.std.SetFrameProps(clip, _Primaries=5) |
063 | # Setting color range to TV (limited) range. |
064 | clip = core.std.SetFrameProp(clip=clip, prop= "_ColorRange" , intval =1) |
065 | |
066 | # making sure frame rate is set to 5 |
067 | clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1) |
068 | |
069 | clip = 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 |
073 | clip = 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 |
076 | clip = 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 |
082 | clip = SpotLess.SpotLess(clip=clip, radT=1, pel=1) |
083 | clip = core.std.CropRel(clip=clip, left=10, right=10, top=2, bottom=14)# cropping |
084 | |
085 | # rainbow removal, chroma denoising using CCD, Variant 3 |
086 | clip = core.resize.Bicubic(clip=clip, format=vs.RGBS, range_s= "limited" ) |
087 | clip = core.ccd.CCD(clip=clip, threshold=7.00) |
088 | clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P8, matrix_s= "470bg" , range_s= "limited" , dither_type= "error_diffusion" ) |
089 | |
090 | # removing grain using MLDegrain |
091 | clip = 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 |
097 | clip = 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) |
104 | clip = 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 |
107 | clip = core.warp.AWarpSharp2(clip=clip, depth=4) |
108 | clip = havsfunc.LSFmod(clip, strength=40) |
109 | |
110 | clip = 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 |
114 | clip = core.resize.Bicubic(clip=clip, format=vs.RGBS, range_s= "limited" ) |
115 | clip = 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 |
118 | clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P16, matrix_s= "470bg" , range_s= "limited" , dither_type= "error_diffusion" ) |
119 | with open( "F:/Hybrid/64bit/vsfilters/GLSL/parameterized/filmgrain.glsl" ) as glslf: |
120 | glsl = glslf.read() |
121 | glsl = glsl.replace( '#define INTENSITY 0.05' , '#define INTENSITY 0.01' ) |
122 | clip = 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) |
126 | clip = 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 |
132 | clip = 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) |
135 | clip = core.std.AssumeFPS(clip=clip, fpsnum=50, fpsden=1) |
136 | # Output |
137 | clip.set_output() |
Исправлено: Howler, 29.01.2025 20:49