﻿AviSynth EP Script ClipSlice v1.10 beta
AviSynth EP Script ClipSlice_old v0.51 beta
AviSynth EP Script EPClip v1.00 beta
AviSynth EP Script EPSlice v1.00 beta
by 桜ノ雨

----------------------------------ClipSlice的起源----------------------------------

ClipSlice正如其名,分为Clip和Slice.当初为了处理一个某些片段为画中画
并且画中画交错,画中画外不交错的片源而头痛.起初想到了ApplyRange+slicedecomb2
但是由于ApplyRange对于参数过多的脚本或者滤镜的使用上会变得非常麻烦
再加上slicedecomb2的各种不顺手,于是边学边用写出了ClipSlice

----------------------------------ClipSlice的功能----------------------------------

ClipSlice是一个结合了Clip+Slice双重功能的蛋疼脚本
可引用外部滤镜以及脚本来进行Clip以及Slice的菊部处理
省去了您繁琐的trim和overlay等步骤
现在的ClipSlice已经包含了RRE的功能,可以进行帧段替换与帧段切片替换

----------------------------------ClipSlice的更新日志----------------------------------

2010/09/01 ClipSlice_old v 0.51 beta
修正了一处隐患BUG,解决了EP1即使帧数大于1也不能用tdecimate等必须帧数大于1的滤镜和脚本的问题
但如果是实际上帧数不能满足某些滤镜脚本的使用条件的话还是无法使用

2010/08/24 ClipSlice_old v 0.50 beta
修改了ClipSlice旧版的函数名,改为ClipSlice_old
修改了合并判断机制,现在使用新版的判断机制,解决了总帧数必须>=3的缺陷
更新了内置的ClipSlice_debug的版本到0.50
增加了自动同步帧率的功能,自动同步到处理后的cp段帧率
增加了一些错误提示 (感谢Google Translate服务的英文翻译)

2010/08/04 ClipSlice v 1.10 beta
增加了RRE的功能,并且比RRE更加强大,在帧段替换的基础上还能进行切片替换
增加了cs ce clip2 RREmode 4个RRE功能相关参数
增加了若干RRE功能相关的错误提示 (感谢Google Translate服务的英文翻译)

2010/07/26 ClipSlice v 1.00 beta (这是ClipSlice一个全新的版本)
修改了几乎全部的判断代码,整体结构重建,实现模块化,并且解决了总帧数必须>=3的缺陷
Clip+Slice,Clip部分单独作为一个函数EPClip,Slice部分单独作为一个函数EPSlice
而ClipSlice则是合体版,单独使用其中一种功能时,建议使用独立函数
当然用合体版也可以,可能会比单独函数的要慢一点(理论上)
不过要用Clip+Slice功能时,合体版可能会更快(理论上)
单独的函数也能互相结合使用
修改了ClipSlice_Debug,并对ClipSlice_Debug相关代码做了调整,详细见ClipSlice_Debug更新日志
增加了color参数,ClipSlice_Debug相关,详细见ClipSlice_Debug更新日志
增加了cpmode epmode spmode cspmode 4个控制先后次序相关参数
增加了英文错误提示 (感谢Google Translate服务)

2010/07/09 ClipSlice v 0.41 beta (这是一个未公开发布的版本)
修改了ClipSlice_Debug,并对ClipSlice_Debug相关代码做了调整,详细见ClipSlice_Debug更新日志

2010/06/30 ClipSlice v 0.40 beta
增加了"debug"参数,主要用来调试切片,开启后能更加直观的看到切片范围
debug功能可以单独用clipslice_debug调用,参数见下方使用范例
由于Layer的限制,加上写得比较仓促,所以目前只支持YV12 YUY2 RGB32输入
其中YV12输入在开启debug后会进行2次颜色空间转换
因此会产生一些颜色损失,由于只是进行切片调试,所以也没太大影响
关闭debug模式后将不会受到任何影响

2010/06/20 ClipSlice v 0.31  beta
修改了空参数的默认值,由"nop()"改回"crop(0,0,0,0)",也许是由于写法上的错误
"nop()"无法正常工作,但还是感谢cunhan的提议

2010/06/20 ClipSlice v 0.30  beta
增加了"ep1" "ep2"参数,这两个参数主要用来引用外部或内部滤镜脚本对非clip部分
进行操作(吐槽参数名什么的...都去RouRouE)
修改了空参数的默认值,由"crop(0,0,0,0)"改为"nop()"(感谢cunhan)

2010/05/20 ClipSlice v 0.20s beta (别吐槽版本号)
修改了全部代码结构,优化了整体代码,但功能不变
修改了错误提示功能,现在改用MessageClip来实现
修改了部分注释

2010/05/16 ClipSlice v 0.20 beta
增加了"cp"参数,这个参数主要用来引用外部或内部滤镜脚本对clip部分进行操作
增加这个参数主要是为了解决对clip段落进行trim等改变帧数却不改变帧率的操作
对于IVTC这类同时影响帧数帧率的操作暂时不支持
修改了"p1" "p2"参数名,改为"sp1" "sp2",纯属为了以后的扩展性
修改了一些相关注释(感谢真红的英语提示部分翻译)

2010/03/16 ClipSlice v 0.10 beta
ClipSlice诞生

----------------------------------ClipSlice的参数说明----------------------------------

注意:新版与旧版的相同参数,说明是基本通用的
但是ClipSlice_old的处理过程相当于新版的cpmode=1,epmode=1,spmode=1,cspmode=1,并且没有RRE功能

Clip(EPClip)部分参数
s            选取clip段落的开始帧,默认0 (int)
e            选取clip段落的结束帧,默认0 (int)
# s必须使用>=0的正整数,s=0表示开始帧是第一帧
# e必须使用>=-1的整数,s=0,e=-1表示选取段落为第一帧,e=0表示结束帧是最后一帧
# s=0,e=0表示选取段落为第一帧

cp           对选取的clip段落引用外部滤镜或脚本进行处理,默认无处理 (string)
ep1          对选取外的clip段落的前一段引用外部滤镜或脚本进行处理,默认无处理 (string)
ep2          对选取外的clip段落的后一段引用外部滤镜或脚本进行处理,默认无处理 (string)
# cp ep1 ep2可以使用影响帧数并且不影响帧率的滤镜脚本,比如trim
# 但不要使用影响到帧率/颜色空间/分辨率等会影响到拼接的滤镜脚本
# 或者使用后将其帧率/颜色空间/分辨率等还原

cpmode       选择cp应用先后顺序,默认0 (int)
#          0 在应用cp后再trim
#          1 在trim后再应用cp
epmode       选择ep应用先后顺序,默认0 (int)
#          0 在应用ep后再trim
#          1 在trim后再应用ep

Slice(EPSlice)部分参数
l            选取左边slice范围,正整数,默认0 (int)
t            选取上边slice范围,正整数,默认0 (int)
r            选取右边slice范围,正整数,默认0 (int)
b            选取下边slice范围,正整数,默认0 (int)
# 由于使用EPCrop,所以支持奇数切边
# 奇数切边有损,但非肉眼分辨之内

sp1          对选取的slice范围引用外部滤镜或脚本进行处理,默认无处理 (string)
sp2          对选取外的slice范围引用外部滤镜或脚本进行处理,默认无处理 (string)
# 请不要使用影响到帧数/帧率/颜色空间/分辨率等会影响到拼接的滤镜脚本
# 或者使用后将其帧数/帧率/颜色空间/分辨率等还原

spmode       选择sp1应用的先后顺序,默认0 (int)
#          0 在应用sp1后再crop
#          1 在crop后再应用sp1

ClipSlice_RRE相关参数
cs           选取clip2段落的开始帧,默认等于s (int)
ce           选取clip2段落的结束帧,默认等于e (int)
# cs必须使用>=0的正整数,cs=0表示开始帧是第一帧
# ce必须使用>=-1的整数,cs=0,ce=-1表示选取段落为第一帧,ce=0表示结束帧是最后一帧
# cs=0,ce=0表示选取段落为第一帧

clip2        第二个片段,默认等于clip (clip)
# 如果要用clip的c-d帧段来替换clip的a-b帧段,就不要填clip2,默认即可

RREmode      RRE的模式选择,默认0 (int)
#          0 帧段替换模式
#          1 帧段+切片替换模式,在slice替换时,选取范围内为clip,选取范围外为clip2
#          2 帧段+切片替换模式,在slice替换时,选取范围内为clip2,选取范围外为clip
# 如果要用别的段落进行帧替换,请用RREmode=2
# 如果要用clip的段落进行帧替换,请用RREmode=0
# 不能在cspmode=0的情况下使用RRE功能

ClipSlice独有参数
cspmode      选择cp和sp应用的先后顺序,默认1 (int)
#          0 在应用cp后再应用sp1 sp2
#          1 在应用sp1 sp2后再应用cp

debug        ClipSlice_Debug模式选择,默认0 (int)
#          0 关闭debug
#          1 选取范围正常显示,选取外半透明层覆盖
#          2 选取范围半透明层覆盖,选取外正常显示
#          3 选取范围正常显示,选取外半透明黑层覆盖,并显示提示:当前模式,切边范围,透明度,覆盖层颜色
#          4 选取范围半透明黑层覆盖,选取外正常显示,并显示提示:当前模式,切边范围,透明度,覆盖层颜色
level        ClipSlice_Debug透明度选择,0-255,0完全透明,255完全不透明,默认200 (int)
# 在RGB输入下level将无效
color        ClipSlice_Debug覆盖层颜色选择,十六进制,默认$000000 (黑) (int)

----------------------------------ClipSlice的使用范例----------------------------------

ClipSlice(11,22,"lsfmod()","naobu()","naobu()",
\         24,24,24,24,"nnedi3()","fft3dgpu()",
\         0,0,0,1,
\         3,200,$000000)

or

ClipSlice(s=11,e=22,cp="lsfmod()",ep1="naobu()",ep2="naobu()",
\         l=24,t=24,r=24,b=24,sp1="nnedi3()",sp2="fft3dgpu()",
\         cpmode=0,epmode=0,spmode=0,cspmode=1,
\         debug=3,level=200,color=$000000)
对11-22帧进行菊部处理,其中截取的范围为左上右下各减24像素后的图像
截取范围内的图像使用nnedi3处理,截取外的图像使用fft3dgpu处理,2者合并后的图像通过lsfmod处理,参数默认
对11-22帧以外的段落进行naobu处理,参数自适应
开启debug,选取范围正常显示,选取外半透明黑层覆盖,并显示提示:当前模式,切边范围,透明度,覆盖层颜色

a=DGMultiSource("R:\00002.dgi")
b=DGMultiSource("R:\00002.dgi",deinterlace=1,use_pf=true)
ClipSlice(795,944,l=70,t=228,r=276,b=228,sp2="nnedi3",clip2=b)

a和b是同一文件,分别用DGNV的deinterlace=0,和deinterlace=1去加载
在795-944这一个段落内,范围为l=70,t=228,r=276,b=228
用b(PV做deint)的同一段落的同一范围去替换,范围外的切片用nnedi3处理
注:由于EDI系往往在静态30P文字上处理得很糟糕,但30I部分却处理得比PV更出色,
而PV对于30I背景+30P静态文字,文字上效果非常不错,所以用DGNV的PV去处理静态文字部分,
用NNEDI3去处理背景部分,效果会很不错

ClipSlice(10,20,cs=30,ce=40)
用30-40帧去替换10-20帧

EPClip(11,22,"lsfmod()","naobu()","naobu()",0,0)
or
EPClip(s=11,e=22,cp="lsfmod()",ep1="naobu()",ep2="naobu()",cpmode=0,epmode=0)
对11-22帧用lsfmod进行菊部处理,参数默认,对11-22帧以外的段落进行naobu处理,参数自适应

EPSlice(24,24,24,24,"nnedi3()","fft3dgpu()",0)
or
EPSlice(l=24,t=24,r=24,b=24,sp1="nnedi3()",sp2="fft3dgpu()",spmode=0)
截取的范围为左上右下各减24像素后的图像,截取范围内的图像使用nnedi3处理,截取外的图像使用fft3dgpu处理

你也可以这样应用
EPClip(11,12,"""EPSlice(24,24,24,24,"nnedi3()")""","naobu()","naobu()")
效果等于
ClipSlice(11,12,ep1="naobu()",ep2="naobu",l=24,t=24,r=24,b=24,sp1="nnedi3")

对于IVTC等特殊处理,你可以这样
ClipSlice(101,200,cp="AAD.AssumeFPS(30000,1001)",cpmode=1)
也可以这样
ClipSlice_old(101,200,cp="AAD")
旧版可以自动同步帧率到CP处理后的帧率
但请不要忘记写TimeCodes

当然,如果你不满意自动帧率同步到CP的话,可以这样
ClipSlice_old(101,200,cp="AAD.AssumeFPS(30000,1001)")
也可以这样
ClipSlice_old(101,200,cp="AAD")
AssumeFPS(30000,1001)
ClipSlice就是如此,只要您开动脑筋,ClipSlice的用法可以多种多样,这就是ClipSlice主张的灵活性

----------------------------------ClipSlice的使用注意事项----------------------------------

如果遇到一些画面对不上的问题,请尝试调整下cp ep sp csp RREmode等参数
如果还是不行请将问题提交给作者
在引用时注意,比如cp="naobu("nimei")",这样写是错误的
要用三重引号,cp="""naobu("nimei")""",这样才是正确的
其他的注意事项已经在前面的参数说明中注释

----------------------------------ClipSlice的发布页----------------------------------------

NMM Forum
http://www.nmm-hd.org/bbs/thread-1201-1-1.html

NMM DOC
http://www.nmm-hd.org/doc/ClipSlice