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

Resize8 v1.2 - 正确处理chroma位置的8bit多功能resize脚本

2013-11-15 1:57

Resize8 v1.2
NMM碗柜:http://nmm.me/10f
我的所有avsi脚本所需滤镜(Requirements)打包下载(文件夹分享):http://pan.baidu.com/s/1Bt2fY

简要说明
函数名Resize8()
只支持AviSynth 2.6
以AviSynth内置Resizer为核心的多功能resize脚本,主要特点:
1. 修正AviSynth内置Resizer对于MPEG-2的4:2:x进行resize产生的chroma shift,具体原因及方法见此贴
2. 支持Y8、YV12、YV16、YV24、RGB24、RGB32作为输入clip的色彩空间。
3. 支持分别设置luma(Y/R/G/B)、chroma(U/V/Alpha)进行resize时使用的kernel以及参数a1、a2。
4. 支持来自SeparateResize的自适应anti-ringing算法。

核心参数的设置
前6个参数的意义和一般的resizer相同,分别为target_width, target_height, src_left, src_top, src_width, src_height。

kernel/kernel_c控制对luma/chroma使用的resize kernel,当输入为RGB时分别对应RGB/Alpha。
可以设置的kernel参数(string型参数需要加引号):
Bicubic, Catmull-Rom, Hermite, Mitchell-Netravali, Robidoux, SoftCubic, SoftCubicXX (XX表示softness:[50-100]) —— 这些kernel全是Bicubic不同的参数b/c的组合
Point, Bilinear, Gauss/Gaussian, Sinc
Blankman, Blankman2, Blankman3, Blankman4
Lanczos, Lanczos2, Lanczos3, Lanczos4
Spline16, Spline36, Spline64
默认设置:upscale时kernel/kernel_c为"Lanczos4"/"Lanczos",downscale时kernel/kernel_c为"Spline36"/"Spline36"。

a1/a2/a1_c/a2_c为对应kernel/kernel_c的参数:
对于Blackman,a1代表taps,范围1-100,默认4,a2无效;
对于Lanczos,a1代表taps,范围1-100,默认3,a2无效;
对于Sinc,a1代表taps,范围1-20,默认4,a2无效;
对于Bicubic,a1和a2分别代表b和c,默认分别为1/3.和1/3.;
对于Gauss,a1代表p,范围1-100,默认30,a2无效;
对于SoftCubic,a1代表soft,范围50-100,默认75,a2无效;
对于其他kernel,a1和a2均无效。

后处理参数的设置
noring/noring_c设置是否使用anti-ringing算法,可以设为True、False、0.0-1.0。默认对无ringing的kernel及SoftCubic设为False,其他为True。
设为True时采用SeparateResize中使用的nr自动强度控制。
kernel为Point、Bilinear、Gauss、Hermite、SoftCubic时noring默认为False,其余的kernel时noring默认为True。

处理平面的设置
Y、U、V、Alpha四个Bool型参数控制处理的平面,默认均为True
当处理的clip为Y8时,Y控制Y是否处理
当处理的clip为YV12、YV16、YV24时,Y/U/V分别控制Y/U/V是否处理
当处理的clip为RGB24时,Y/U/V分别控制R/G/B是否处理
当处理的clip为RGB32时,Y/U/V/Alpha分别控制R/G/B/A是否处理

example
下面是Resize8与AviSynth内置resizer的对比。
将输入的图片转为YV12后交给resizer进行3倍的upscale,作为对照,对比图中第一张为YV12转为RGB24后交给AviSynth内置resizer的结果(无chroma shift)。
AviSynth内置的resizer使用了Lanczos4Resize,为了公平起见Resize8里设了kernel_c="Lanczos4"保证两者使用相同的kernel。加上了无NR和有NR两种情况的对比。

Source
FGSB09a.png
Source->YV12->RGB24->Lanczos4Resize(600, 600, 700, 160, 200, 200)
RGB24 Lanczos4.png
RGB24 Lanczos4.png (274.39 KiB) 查看 5512 次
Source->YV12->Lanczos4Resize(600, 600, 700, 160, 200, 200)
Lanczos4.png
Lanczos4.png (379.58 KiB) 查看 5525 次
Source->YV12->Resize8(600, 600, 700, 160, 200, 200, noring=False, kernel_c="Lanczos4")
Resize8_NR_off.png
Resize8_NR_off.png (379.89 KiB) 查看 5525 次
Source->YV12->Resize8(600, 600, 700, 160, 200, 200, noring=True, kernel_c="Lanczos4")
Resize8_NR_on.png
Resize8_NR_on.png (376 KiB) 查看 5525 次
Source->YV12->nnedi3_resize16(600, 600, 700, 160, 200, 200, output="RGB24")
nnedi3_resize16.png
nnedi3_resize16.png (352.33 KiB) 查看 5518 次
从一二三图的对比可以看到AviSynth内置resizer对4:2:x的三倍放大导致chroma向右偏移0.5像素(在看图软件中切换两张图对比,注意红色的车窗框)
从三四图的对比可以看出anti-ringing算法的效果
从四五图的对比可以看出edge-directed interpolation的效果

Changelog

v1.0
Initial release

v1.1
修正输入RGB24时报错的问题

v1.2
增加函数Resize8_Separate(),与Resize8()主要区别在于各个平面的source position数值保持一致,并且不考虑chroma placement的影响,用于处理nnedi3、eedi3、eedi2等滤镜dh=True拉伸后产生的center shift,主要用于AA时的resize,可参考此贴
上次由 mawen1250 在 2015-02-24 1:11,总共编辑 2 次。

头像
紙飛行機
帖子: 4
注册时间: 2012-11-10 19:48

Re: Resize8 v1.1 - 正确处理chroma位置的8bit多功能resize脚本

2013-11-16 23:18

慢慢学…………


回到 “AviSynth”