|
本帖最后由 fifth 于 2009-7-18 21:49 编辑
血龙、缘下推荐的好东西,勉力翻了一下,顺便推荐,有能力的还是看原文比较好。
基于0.92b的英文帮助,和doom9作者原帖。
欢迎讨论。
PS. 附件是word文档。
感谢血龙、缘下,特别是血龙对本文的修订。
简介
本AVS支持resize和滤镜。不同的滤镜可以应用到同一帧画面的不同区域(细节边缘,静态区,动态区,高亮区与低暗区):
HybridFuPP是一个自适应工具,可以提高画面质量和压缩率。
其基本思想是处理画面中不太可见的部分,而对可见部分则尽量少处理。HybridFuPP通过区块来判断上述区域的分布并处理。
标准的建议流程包括:resize,静态区域去噪,动态区去噪,高亮区域去噪、低暗区域去噪,色度去噪(U和V通道),边缘锐化或柔化(水平和垂直设置不同),边缘亮度控制,deringging(去掉边缘的瑕疵),以及deblocking(去掉mpeg压缩生成的色块堆积效应)
虽然HybridFuPP最初是设计处理画面干净的素材,但这个过滤包非常灵活和强大,足可用于处理带噪点的素材(取决于噪点类型)。
HybridFuPP为新手提供了一些预设选项,老鸟可以基于此做修改。进一步,HybridFuPP允许用户自定义处理流程。
运行环境
1. 通过了Avisynth2.56 beta1测试
2. 把HybridFuPP.avsi和附带的滤镜解压到avisynth plugin目录(默认为C:\Program Files\AviSynth 2.5\plugins)
3. 确认你的主脚本载入了UnFilter.dll (v1.5), msharpen.dll (v1.10b2), Deen.dll (v1.0 beta 1), MVTools.dll (0.9.9.1) 和 Masktools.dll (v1.5.6)
语法
HybridFuPP( clip, int width, int height, bool Fast, bool Dering, bool Deblock, int MP_Mode, int EM_Mode, int DB_Q, int DB_Off_a, int DB_Off_b, int M_Thr, int M_SCD, int
E_Thr, int D_Thr, int B_Thr, int Resizer , int S_Str, int T_Str, int S_Radius, int S_Dist, int C_Str, int M_Str, int E_Str_X, int E_Str_Y, int E_Str_B, int LP_Str, int DR_Str, int DR_Radius, string show, int N1, int N2, int M, int E1, int E2, int LP, int DR, string Preset )
参数
所有参数都是可选的
普通参数
参数
| 值
| 注释
| Resizer
| 0 – 5
| Reisze算法:
0 : bilinear ( sharpness - - - / compressibility + + + )
1 : bicubic ( sharpness - - / compressibility + + )
2 : bicubic ( sharpness - / compressibility + )
3 : bicubic ( sharpness + / compressibility - )
4 : bicubic ( sharpness + + / compressibility - - )
5 : lanczos ( sharpness + + + / compressibility - - - )
| Width
|
| 目标宽度。 最终的大小必须被4整除(或者8,如果你需要使用动景处理)。但建议size被16整除,以提高速度。
| Height
|
| 目标高度。 最终的大小必须被4整除(或者8,如果你需要使用动景处理)。但建议size被16整除,以提高速度。
| Fast
| True/False
| True, 低暗区,亮亮区和动景(仅当MP_Mode = 2)的区块计算将基于已经去噪和resize的画面。(这样HybridFuPP更节约时间)
False, 区块计算仅基于resize的画面。
| Preset
| Very low
Low
Medium
High
Very High
HybridQ
Anime1
Anime2
| Presets提供了便捷的方式,同时所有参数依然可调。
“Very Low”或“Very High”和质量相关。例如,very low生成的画面去噪很强,弱锐化(相应的,压缩率就更好)
HybridO在锐化边缘时,使用bilinear resize。它生成更生动的画面,同时保持了良好压缩率。
Anime1和Anime2为动画设计的。Anime2对含噪点非常多的素材很管用,但有时候对细节有损失。
| Show
| E, M, D, B, R, P
| 显示区块和值:
E:边缘区块 M:动态区块 D:低暗区块 B:高亮区块 R Deringing区块
P:显示Show使用的值 (若一些默认参数改变了,«mod»将显示在靠近preset名字处)
例子:HybridFuPP(448, 320, Show="MDB"),显示出动景块,暗和亮的区块。
|
静态区去噪
S_Str
| 0..100
| Spatial滤镜强度值
| S_Radius
| 0..3
| Spatial滤镜半径值
| S_Dist
| 0.0 ..1.0
| 影响Spatial阀值,越弱,保留更多的边缘
| T_Str
| 0..100
| Temporal滤镜强度值
| C_Str
| 0..100
| 色度(UV)
|
动态区去噪
MP_Mode
| 0..2
| 动景处理模式:
0 不处理
1 动态补偿临时去噪
2 Spatial去噪
| M_Thr
| 0..255
| 移动侦测阀值
| M_SCD
| 0..999
| 场景变化侦测阀值
| M_Str
| 0..300
| Spatial强度(MP_Mode = 2 有效)
|
边界边缘处理(强化和消除扭曲)
EM_Mode
| 1..2
| 边缘区块模式:1. 电影模式 2. 动画模式
| E_Thr
| 0..255
| 边缘探测阀值
| E_Str_X
| -50..50
| 水平锐化强度
| E_Str_Y
| -50..50
| 垂直锐化强度
| E_Str_B
| -200..200
| 边缘亮度
| Dering
| True / false
| True,消除边缘扭曲。默认这个值是关闭,因为它严重影响速度
| DR_Radius
| 0..10
| Deringing半径
| DR_Str
| 0..100
| Deringing强度
|
亮暗区域
D_Thr
| 0..255
| 暗区域探测阀值
| B_Thr
| 0..255
| 亮区域探测阀值。默认为0,即关闭亮区域处理。推荐160-180。
| LP_Str
| 0..30
| 明暗亮暗区域过滤强度
|
去块
Deblock
| True/False
| 启用deblocking。注意:如果你裁剪了输入大小,必须模4
| DB_Q
| 0…51
| Deblocking强度
| DB_Off_a
| 0…51
| 边缘灵敏度
| DB_Off_b
| 0…51
| 影响探测阀值和处理强度
|
预设值
以下预设值均可以修改。
预设值名字和质量相关,high表示高质量。质量越高,压缩率越小。
presets
parameters
| Very Low
| Low
| Medium
| High (default)
| Very High
| HybridQ
| Anime1
| Anime2
| Resizer
| 0
| 2
| 3
| 4
| 5
| 0
| 1
| 1
| Fast
| True
| True
| True
| True
| True
| True
| True
| True
| S_Str
| 12
| 12
| 10
| 5
| 7
| 5
| 20
| 20
| S_Radius
| 1
| 1
| 1
| 1
| 1
| 1
| 1
| 2
| S_Dist
| 0.1
| 0.1
| 0.1
| 0.1
| 0.1
| 0.1
| 0.1
| 0.1
| T_Str
| 5
| 5
| 3
| 3
| 2
| 3
| 15
| 15
| C_Str
| 20
| 20
| 20
| 20
| 20
| 20
| 20
| 20
| MP_Mode
| 2
| 2
| 2
| 2
| 2
| 2
| 0
| 0
| M_Thr
| 10
| 10
| 10
| 10
| 10
| 10
| 10
| 10
| M_SCD
| 260
| 260
| 260
| 260
| 260
| 260
| 260
| 260
| M_Str
| 120
| 120
| 120
| 120
| 80
| 120
| 0
| 0
| EM_Mode
| 1
| 1
| 1
| 1
| 1
| 1
| 2
| 2
| E_thr
| 14
| 14
| 14
| 12
| 12
| 10
| 7
| 7
| E_Str_X
| 0
| 0
| 0
| 0
| 0
| 36
| 30
| 40
| E_Str_Y
| 0
| 0
| 0
| 0
| 0
| 36
| 30
| 40
| E_Str_B
| 0
| 0
| 0
| 0
| 0
| 0
| -3
| -3
| dering
| False
| False
| False
| False
| False
| False
| False
| False
| DR_Radius
| 2
| 2
| 2
| 2
| 2
| 2
| 4
| 4
| DR_Str
| 30
| 30
| 30
| 30
| 30
| 30
| 30
| 30
| D_Thr
| 39
| 37
| 35
| 32
| 31
| 32
| 30
| 30
| B_Thr
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| LP_Str
| 30
| 30
| 30
| 30
| 30
| 30
| 40
| 40
| Deblock
| false
| False
| False
| False
| False
| False
| False
| False
| DB_Q
| 25
| 25
| 25
| 25
| 25
| 25
| 25
| 25
| DB_Off_a
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| DB_Off_b
| 0
| 0
| 0
| 0
| 0
| 0
| 0
| 0
|
高级参数
HybridFuPP可以自定义过滤链,这些自定义的过程可以放在动景,明、暗处理的resizer后,或者边缘和静态区域的resizer前后。
Resize保持被标准脚本处理(但可以使用Resizer参数定义)
N1
| 普通区域的处理链,放在resizing前面
| N2
| 普通区域的处理链,放在resizing后面
| E1
| 边缘的处理链,放在resizing前面
| E2
| 边缘的处理链,放在resizing后面
| M
| 动景的处理链
| LP
| 高亮、低暗区域的处理链
| DR
| Deringing的处理链
|
注意:
过滤链必须用双引号定义,例如
HybridFuPP(640, 480, preset = "medium", N2 =
"deen()" )
如果该链包含引号,则使用三重引号
ex : HybridFuPP(640, 480, preset = "medium", N2 ="deen()" , Dering = true, DR = """BlindPP(quant= 2, cpu2 = "xxxxxx", moderate_h = 40, moderate_v = 80)""")
所有没有显式定义的高级参数将使用默认值。如,你只定义了N1, N2, LP,则其他的M, E1, E2, DR,就使用默认的。
若不启用默认的处理链,并且也没有自定义,必须用双引号,XX = “”,XX是某个高级参数。例如E2 = “”.
默认处理链的参数
N1
| ""
| N2
| """Deen("a3d", S_Radius, S_Str, 3*C_Str, T_Str, C_Str, S_Dist, 9)"""
| E1
| "UnFilter(E_Str_X, E_Str_Y)"
| E2
| “ColorYUV(off_Y = E_Str_L)”
| M*
| """Deen("a2d", 1, M_Str, 0, 0, 0, 0, 0)"""
| LP
| """Deen("a2d", 2, LP_Str, 0, 0, 0, 0, 0)"""
| DR
| """Deen("a2d", 2, DR_Str, 0, 0, 0, 0, 0)"""
|
注意:M只有在MP_Mode =2时才生效
例子
HybridFuPP( 448, 320 )
| 448x320, 使用默认值,等效于 HybridFuPP(448, 320, preset = "high")
| HybridFuPP( 448, 320, preset="low" )
| 448x320, 低质量预设值
| HybridFuPP( 448, 320, preset="medium", E_Str_X= 40, E_Str_Y = 10 )
| 448x320, medium preset, 使用了oversharpening(水平轴的值更大,是为了SVCD更好效果)
| HybridFuPP(preset = "very high", S_Str = 8, T_Str = 5, C_Str = 0, D_Str = 0 )
| 448x320, preset "very high", 但更改了ST_Str (spatio-temporal filtering strength). 没有处理色度和暗区域。
| HybridFuPP( 448, 320, M_Str = 160, dering = true )
| 448x320, 使用了preset high默认值,但重载了M_Str (motion filtering strength) 和 dering
| HybridFuPP( 448, 320, M_Str = 160, dering = true, show = "M" )
| 和上一个相同,但显示了动景区块
| HybridFuPP( 448, 320, preset = "very high", LP = "" )
| 448x320, preset “very high”. 亮、暗区域处理均未激活.
| HybridFuPP( 448, 320, show = "MDB", B_Thr = 165 )
| 448x320, 显示动景(M)、高亮(B)、低暗(D)区块。高亮区域侦测阀值设为165
| HybridFuPP( 448, 320, N2 = "temporalsoften(2,3,3,6,2)"", deblock = true)
| 448x320. 用temporalsoften替换了HybridFuPP的默认N2。Deblock启用.
|
0.98
新参数
ARadjust = true/false
自动resizer调节:激活该参数时,如果脚本判断有此必要性,则已采用的resizer可能会自动调低等级,例如,即使你选择了lanczos, bisubic也可能被使用在画面的某些部分(由脚本评估)
E_Auto_Str : true / false
边缘增强自动设置:启用时,脚本会根据源、目标大小和resizer类型,自动计算最佳边缘增强配置。这样即使在缩小画面时(如720*432 -> 608->256,也可以自动保持锐利的画面)
DB_M_Only = true / false
仅在动景时Deblock:如果源只有中等质量,有时你可能会在动态画面时看到色块。这个选项允许你仅仅在画面的动态部分使用deblock。静态区域不变。
Skin = true / false
Skin_Type: 0,自动;1,暖色调肤色;2,冷色调肤色 (取决于场景中的光)
皮肤处理:通常你的眼睛会先注意到画面上的人脸,因此我实现了这个参数,强制编码分配更多的像素给人脸,从而保留更多细节。
DS_Enh_Thr :
暗场景增强:一些codec(如MPEG4-ASP)对暗场景效果不好,编码后的画面异常模糊。这个新功能可以改善此项。
注意:
1.
由于某些性能因素,控制暗场景和皮肤增强的强度参数是同一个: Enh_Str
2.
所有预设值中,DB_M_Only和DS_Enh_Thr默认都不启用。
3.
目前只有0.92b的文档
4.
可以在多核机器上使用MT (SetMTMode(2,))),以大幅提高速度
总结:
如果你想要尝试最新的功能,建议使用preset HybridQ,一开始不用改变参数,除非你想要激活Motion Only Deblocking [deblock=true, DB_M_Only=true] or dark scenes enhancer [DS_Enh = true]
HybridQ已经为2 pass编码和低码率做了优化(例如 500 - 700 XVID)
链接
http://forum.doom9.org/showthread.php?t=131920
名词解释
Blocking和Ringing瑕疵
理想情况下,有损图像和视频压缩算法只应该丢弃可感知但无价值的信息,然后人眼才可以重构出和原始未压缩相同的图像。但在实践中,一些可见的瑕疵是存在的,这可能是劣质编码器造成的,或者码率相对于分辨率和帧率来说太低了。后者是常见的行为,因为经常会因存储或带宽的原因降低码率。
Blocking和ringing瑕疵在视频压缩中尤其常见。Blocking是因为压缩算法把每帧分割为8*8像素的方块。但每个小方块在重构时会有点小错误,当这些错误在方块边缘时,邻近的方块间彼此对比,就使得方块边缘可见,这就是Blocking瑕疵。Ringing是因为编码器在量化高频DCT是丢弃了过多信息,其现象是在图像的边缘出现变形扭曲。
Deblocking 和 Deringing 滤镜
Deblocking滤镜作用在色块边缘,通过混合这些色块间的边缘来达到消除blocking的效果。Deringing经常使用自适应的滤镜。首先,它探测出图像的边缘,然后使用低通滤波器在这些边缘及其邻近区域产生平滑的效果,但是边界的像素不会被滤掉,以免模糊。
注意,Deblocking和Deringing非常耗费计算量,尤其二者一起使用。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|