版面规则
提问时请注意:尽量详细描述操作过程、AVS脚本内容等,最好能写出片名,只贴图有时无法看出问题原因。
提示:发布原创内容请尽量使用附件上传。使用网盘会出现过期失效的问题,请注意。
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

Re: Contra-Sharpen mod 2.7 —— EP锐化/还原用脚本

更新2.7,一堆更新——新参数ssout允许输出super sampling分辨率、preblur添加3、默认参数的调整、将non-ringing Spline64Resize用于全过程的resize、filter_ss="AA"时自动使用SangNom做反锯齿处理、limit=true且thr>=1时允许使用Slimit和Soft、bug修复、其他乱七八糟的调整……avsi里添加了一些英文的注释。

更新2.8,Minblur中用RemoveGrainHD替代MedianBlur,默认对HD输入使用mode=20的RemoveGrain为unsharp的kenerl,SD输入和原来一样用mode=11。

更新2.9,调整一些预设值。

更新3.0,调整一些预设值,修复bug。

更新3.1,之前的版本在CSmod_nrSpline64Resize中一不小心用到了SeparateResize 1.6里的GetCSP这个函数(以及GetCSP用到的Separate_Y8_YV411),于是把这个函数加到CSmod的脚本里。

更新3.2,调整一些预设值,修复bug。增加参数edgemode、edgemask、edgethr、tcannysigma,edgemode默认为0也就是不使用mask进行保护,1为用edgemask保护flat区域不被处理,2为用edgemask保护edge区域不被处理(并且会自动调整一些参数的预设值用于增强噪点与细节),edgemask目前总共12种模式,并且也可以指定clip型变量来使用外部的自定义mask,edgethr和tcannysigma则为用于调整内置mask的参数。取消参数RGmode和RGmodeU,kernel可以为int或string变量,int指定内置的1-5共五种模式(5为特殊的细节、噪点增强模式),string指定自定义的模式。

更新3.3,调整一些预设值。改进Tlimit部分,在有pre-filter的情况下分别生成用于MAnalyse和MCompensate的Super Clip,并且支持chroma的Tlimit,增加bool型参数chromamv,决定是否使用chroma的信息生成Motion Vector。同时去除我自己看着都不顺眼的SlimitY参数……Slimit部分改进,在使用了pre-filter的情况下,sharpen method部分使用pre-filter的clip生成min/max avg,Spatial Limit部分使用clip "filtered"来生成dark limit与bright limit,以防止在pre-filter的处理改变较大时导致Slimit之后的clip也发生这种改变(LSFmod中就存在此问题)。Smode除了原本的int型之外还允许使用string型以自定义在mt_lut里使用的expr。增加bool型参数mergesrc,默认false,决定在最后用mask merge的部分使用输入的clip "source"还原还是clip "filtered"还原。增加string型参数filter_nr,把kernel部分处理之后的clip上做filter_nr处理再加回sharpdiff,相当于在降噪的clip后做处理并加回噪点,能避免噪点对此处理的干扰以及此处理对噪点的影响,例如deband处理,使用此参数时会自动将处理后的clip当成filtered clip,也就是允许使用Contra-Sharpen还原以配合此种处理方式。

更新3.4,优化以及一些参数改进。preblur增加-1到-4四种模式,直接用RemoveGrain处理,比MinBlur快不少,精确度略低,默认为-1。取消蛋疼的参数choversh,换为thrc,默认等于thr,决定在limit后允许chroma锐化超过多少值,同时在limit=false时这2个参数也起作用,硬性限制锐化的绝对改变量不超过thr和thrc。
上次由 mawen1250 在 2012-09-22 12:59,总共编辑 10 次。
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

Re: Contra-Sharpen mod 3.0 | CSmod16 1.0 —— EP锐化/还原用脚本,增加16b

2012.9.3添加16bit版本,内部全程16bit处理(除了当ss_hq=true时用的nnedi3_rpow2为8bit输入输出,不过我觉得这个没必要所以默认为false),可以减小8bit处理过程rounding error造成的锐化结果不平滑,从实际对比中也能比较明显看得出来区别。更高的处理精度是CSmod16的主要优势,至于是否输入输出16bit对于edge部分并没有那么大区别,对于non-edge部分的话16bit输入输出的意义更大一些(lsb_in和lsb控制输入输出是否为stack 16bit)。
同时thr、thrc、Sovershoot、Sundershoot、Tovershoot、Tundershoot、Soft、strength等参数都改为float,以配合16bit精度(1.0对应16bit下的256)。
另外部分功能未能16bit化于是去除(Soothe)。如果用filter_ss那也是要在16bit下进行处理。

由于内部精度的提升,CSmod16版能将一些CSmod难以增强的细节也增强,相同设置下的锐化强度也明显更高,再加上没有Soothe temporal stabilization,所以对于动画可能会出现一些很细小的锯齿,这时可以选择开启Tlimit=true,让输出的结果更加柔和,时域上也更稳定。


更新1.1,调整一些预设值,修复bug。增加参数edgemode、edgemask、edgethr、tcannysigma,edgemode默认为0也就是不使用mask进行保护,1为用edgemask保护flat区域不被处理,2为用edgemask保护edge区域不被处理(并且会自动调整一些参数的预设值用于增强噪点与细节),edgemask目前总共12种模式,并且也可以指定clip型变量来使用外部的自定义mask,edgethr和tcannysigma则为用于调整内置mask的参数。取消参数RGmode和RGmodeU,kernel可以为int或string变量,int指定内置的1-5共五种模式(5为特殊的细节、噪点增强模式),string指定自定义的模式。MinBlur16增加至5种模式,详见avsi,其中mode=4/5所用到的Dither_median16尚未优化,速度非常慢,目前极不建议使用(用这个还不如用MDegrain之类的MC降噪作为pclip快)。

更新1.2,调整一些预设值。改进Tlimit部分,在有pre-filter的情况下分别生成用于MAnalyse和MCompensate的Super Clip,并且支持chroma的Tlimit,增加bool型参数chromamv,决定是否使用chroma的信息生成Motion Vector。同时去除我自己看着都不顺眼的SlimitY参数……Slimit部分改进,在使用了pre-filter的情况下,sharpen method部分使用pre-filter的clip生成min/max avg,Spatial Limit部分使用clip "filtered"来生成dark limit与bright limit,以防止在pre-filter的处理改变较大时导致Slimit之后的clip也发生这种改变(LSFmod中就存在此问题)。Smode除了原本的int型之外还允许使用string型以自定义在Dither_lut16里使用的expr。增加bool型参数mergesrc,默认false,决定在最后用mask merge的部分使用输入的clip "source"还原还是clip "filtered"还原。增加string型参数filter_nr,把kernel部分处理之后的clip上做filter_nr处理再加回sharpdiff,相当于在降噪的clip后做处理并加回噪点,能避免噪点对此处理的干扰以及此处理对噪点的影响,例如deband处理,使用此参数时会自动将处理后的clip当成filtered clip,也就是允许使用Contra-Sharpen还原以配合此种处理方式。

更新1.3,优化以及一些参数改进。preblur增加-1到-4四种模式,直接用Dither_removegrain16处理,比MinBlur16快不少,精确度略低,默认为-1。取消蛋疼的参数choversh,换为thrc,默认等于thr,决定在limit后允许chroma锐化超过多少值,同时在limit=false时这2个参数也起作用,硬性限制锐化的绝对改变量不超过thr和thrc。改进super sampling时用的non-ringing Spline64Resize16,经过测试得知Dither_resize16(kernel="Gauss")特别慢,于是将nr中用于repair的source clip改为在8bit下用GaussResize处理,速度能快很多。在我的笔记本上测试1920x1080的视频,CSmod16默认参数下,1.2版为1.32fps,1.3版为1.84fps。
gloryhussar
帖子: 23
注册时间: 2013-10-01 16:23

Re: Contra-Sharpen mod 3.4 | CSmod16 1.3 —— EP锐化/还原用脚本,增加16b

我用这个脚本压制的时候有1s卡死在某一帧上了,不知道是怎么回事,大神帮忙看看avs有没有问题?
FFVideoSource("E:\Temp\00013+00027+00026.track_4113.mkv", threads=1).Crop(240,0,-240,0)
source=last
denoised=last.SMDegrain().SMDegrain()
denoised.CSMod(chroma=false,source)
TextSub("E:\Temp\00013+00027+00026.track_4113.ssa", 1)
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

Re: Contra-Sharpen mod 3.4 | CSmod16 1.3 —— EP锐化/还原用脚本,增加16b

gloryhussar 写了:我用这个脚本压制的时候有1s卡死在某一帧上了,不知道是怎么回事,大神帮忙看看avs有没有问题?
FFVideoSource("E:\Temp\00013+00027+00026.track_4113.mkv", threads=1).Crop(240,0,-240,0)
source=last
denoised=last.SMDegrain().SMDegrain()
denoised.CSMod(chroma=false,source)
TextSub("E:\Temp\00013+00027+00026.track_4113.ssa", 1)
源/源滤镜+non-linear seek的问题
飞行员_x128
帖子: 1
注册时间: 2014-10-01 20:07

Re: Contra-Sharpen mod 3.4 | CSmod16 1.3 —— EP锐化/还原用脚本,增加16b

在使用了CSmod16()以后,画面的亮度变得非常高。可能是我写的脚本有问题,也可能是滤镜有bug。麻烦各位大神鉴别一下。
原视频为8bit
脚本:
LWLibavVideoSource("source")
U16()
CSmod16()
f3kdb(input_depth=16,output_depth=8,Y=0,Cb=0,Cr=0,grainY=0,grainC=0)

图片对比:
未使用CSmod16()
图片

使用CSmod16()
图片
lwjkk666
帖子: 321
注册时间: 2012-05-29 13:43

Re: Contra-Sharpen mod 3.4 | CSmod16 1.3 —— EP锐化/还原用脚本,增加16b

f3kdb(input_depth=16,output_depth=8,Y=0,Cb=0,Cr=0,grainY=0,grainC=0)
dzx657238547
帖子: 6
注册时间: 2013-09-22 11:00

Re: Contra-Sharpen mod 3.4 | CSmod16 1.3 —— EP锐化/还原用脚本,增加16b

飞行员_x128 写了:在使用了CSmod16()以后,画面的亮度变得非常高。可能是我写的脚本有问题,也可能是滤镜有bug。麻烦各位大神鉴别一下。
原视频为8bit
脚本:
LWLibavVideoSource("source")
U16()
CSmod16()
f3kdb(input_depth=16,output_depth=8,Y=0,Cb=0,Cr=0,grainY=0,grainC=0)

图片对比:
未使用CSmod16()
图片

使用CSmod16()
图片
改成
LWLibavVideoSource("source")
U16()
CSmod16()
f3kdb(input_mode=1,input_depth=16,output_mode=1,output_depth=8,Y=0,Cb=0,Cr=0,grainY=0,grainC=0)
再试试
lwjkk666
帖子: 321
注册时间: 2012-05-29 13:43

Re: Contra-Sharpen mod 3.4 | CSmod16 1.3 —— EP锐化/还原用脚本,增加16b

src16 = src.U16()

#pre-filter
nr16 = src16.SMDegrain(tr=2, plane=4, RefineMotion=true, ContraSharp=true, TrueMotion=false, lsb_in=true, lsb=true, lsb_out=true,
\ chroma=true, prefilter=1, pel=1, search=4, thSAD=320, thSADC=160, thSCD1=200, limit=4, limitC=3, str=2.0)

#get noise diff clip
repair = CSmod16(src.U16, lsb_in=true, lsb=true, preblur=2, edgemode=2,edgemask=-5,Tlimit=true,Slimit=true,mergesrc=true)

#de-banding on pre-filtered clip

nr16
f3kdb( 16, 24, 20, 20, 0, 0, input_mode=1, output_mode=1).Dither_limit_dif16(last, ref=nr16, thr=0.40, elast=2.5, y=3, u=3, v=3)
Lmask=src.mt_lut("x 36 <= 170 255 ?",u=1,v=1)
dither_merge16_8(src16,repair,Lmask,luma=true)

重看了一下CSMOD16的脚本,想请教一下,这样写法,降噪部分nr16起到作用吗?还有一个疑问,last这个语句是继承了哪个cilp的,譬如这样:
IVTC之后的last,要是用皮神的MP的话,然后到后面降噪处理之后,再次指定last,也就是说脚本中出现了超过2次以上指定last,那么的话last是前面的还是后面处理的?
头像
mawen1250
核心会员
核心会员
帖子: 670
注册时间: 2011-07-24 20:33

Re: Contra-Sharpen mod 3.4 | CSmod16 1.3 —— EP锐化/还原用脚本,增加16b

首先上面锐化的一行应该这么写才是以src16作源对nr16做Contra-Sharpen,现在的写法是直接对src16做锐化。
repair = nr16.CSmod16(src16, ...)
然后f3kdb那行的结果没有在之后被用到,我不明白你是要做什么。

AVS里任何语句返回的clip没有被赋值给变量,就会自动赋值给last,例如你上面脚本里最后的nr16、Dither_limit_dif16、dither_merge16_8的输出都是赋值给last的。同一个变量可以多次赋值这是大部分程序语言中非const variable的基本特性,调用该变量时它当然是最近一次赋值的值。
至于最近一次赋值是在该语句的前面还是后面,就要看脚本编译时解析的顺序,AVS编译时是从前向后解析脚本,自然就是在前面。

题外话:
AVS运行时返回帧,则是从后向前,更具体地说是从整个脚本return的clip开始,向前依照因果关系向相应滤镜请求返回帧——这么做的原因很容易理解,需要什么就计算什么,比如向某滤镜请求第25帧,而该滤镜需要前后共3帧来处理,那么该滤镜就继续向上游请求第24-26帧,如此循环一直到源滤镜。而在请求返回帧之前AVS脚本已经解析编译完毕,所以脚本的逻辑不会受返回帧顺序影响。
但有一类特殊滤镜属于runtime filter,例如ScriptClip、ConditionalFilter、ConditionalSelect、FrameEvaluate等,这些滤镜都有一个string类型的参数,其中可以编写AVS脚本,而这些脚本是在每次该滤镜被请求返回帧时才进行解析编译的,脚本内容可以根据运行状态改变所以叫做runtime environment。而前面又说了AVS是从后向前请求返回帧的,所以这些滤镜中的runtime脚本也是从后一个runtime滤镜向前一个runtime滤镜进行解析,不同runtime滤镜中公用同一个变量时,前一个runtime滤镜的脚本中该变量受到后一个runtime滤镜的脚本中的变量影响。

例子1
BlankClip()

count = 0
Subtitle("1: "+String(count), y=10)

count = count + 1
Subtitle("2: "+String(count), y=50)

count = count + 1
Subtitle("3: "+String(count), y=90)

count = 0
Subtitle("4: "+String(count), y=130)
运行该脚本,输出内容为
1: 0
2: 1
3: 2
4: 0

例子2
BlankClip()

ScriptClip("""
count = 0
Subtitle("1: "+String(count), y=10)
""")

ScriptClip("""
count = count + 1
Subtitle("2: "+String(count), y=50)
""")

ScriptClip("""
count = count + 1
Subtitle("3: "+String(count), y=90)
""")

ScriptClip("""
count = 0
Subtitle("4: "+String(count), y=130)
""")
运行该脚本,输出内容为
1: 0
2: 2
3: 1
4: 0

注意到第二个脚本中1和2相反了,是因为第二个脚本的count实际上是从最后一个ScriptClip开始向前解析的。
头像
upyzl
帖子: 446
注册时间: 2010-12-25 18:44
来自: 湘/京
联系: 网站

Re: Contra-Sharpen mod 3.4 | CSmod16 1.3 —— EP锐化/还原用脚本,增加16bit版

扔一个小小修改的版本:
ContraSharpen_mod.zip
(15.28 KiB) 下载 198 次
当初雯姐写这个脚本时,很多新兴滤镜还没出现,所以弄了这么个微修版,视使用方式应该能有一定的效率提升(看changelog部分还有correction的样子)

具体改动:(其实就是滤镜替换,然后根据函数语法进行单纯的移植)
SangNom -> SangNom2
Turn -> FTurn
TEdgeMask -> TEMmod
TCanny -> TCannyMod, 同时引入一个参数tcannysobel, 用于edgemask=8 or 10时是否使用sobel算子

剩下的可以直接更新dll而无需更改avsi就不说明了

PS: 替换的dll合集(AVS 2.6 or AVS+):
plugins.7z
CSmod_Filters
(380.55 KiB) 下载 7254 次
相关doc移步avisynth.nl

回到 “AviSynth”