ClipSlice
ClipSlice是一个用于对clip的指定帧段或帧,使用外部或者内部脚本滤镜进行局部处理的AviSynth脚本
作者:桜ノ雨(Yuricon)
起源
ClipSlice正如其名,分为Clip和Slice。当初为了处理一个某些片段为画中画,并且画中画交错,画中画外不交错的片源而头痛。起初想到了ApplyRange+slicedecomb2,但是由于ApplyRange对于参数过多的脚本或者滤镜的使用上会变得非常麻烦,再加上slicedecomb2的各种不顺手,于是边学边用写出了ClipSlice。
功能
ClipSlice是一个结合了Clip+Slice双重功能的脚本。
在Clip上,类似于ApplyRange,使用外部或者内部的脚本滤镜对clip的指定帧段或帧进行处理,但ClipSlice更加灵活易用。与ClipSlice的Clip部分同类型的脚本还有AAD中的函数AADTrim,AADTrim也是一个非常优秀的脚本。
在Slice上,功能与slicedecomb2大致相同,对选择的段落进行画中画切片使用外部或者内部的脚本滤镜分开进行处理,只不过使用习惯上更偏向于作者个人的喜好。
总的来说,ClipSlice是一个基于时间轴与2D平面处理的AviSynth脚本。
现在的ClipSlice已经包含了RRE的功能,可以进行帧段替换与帧段切片替换。
更新日志
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则是合体版。单独使用其中一种功能时,建议使用独立函数,当然用ClipSlice也可以,可能会比单独函数的要慢一点(理论上)。不过要用Clip+Slice功能时,ClipSlice可能会更快(理论上)。单独的函数也能互相结合使用。
- 修改了ClipSlice_Debug,并对ClipSlice_Debug相关代码做了调整,详细见MYEPTools中的ClipSlice_Debug更新日志。
- 增加了color参数,ClipSlice_Debug相关,详细见MYEPTools中的ClipSlice_Debug更新日志。
- 增加了cpmode epmode spmode cspmode 4个控制先后次序相关参数。
- 增加了英文错误提示。 (感谢Google Translate服务)
2010/07/09 ClipSlice v 0.41 beta (这是一个未公开发布的版本)
- 修改了ClipSlice_Debug,并对ClipSlice_Debug相关代码做了调整,详细见MYEPTools中的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部分进行操作
- 修改了空参数的默认值,由"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诞生
参数说明
function ClipSlice(clip clip, \ int "s", int "e", string "cp", string "ep1", string "ep2", \ int "l", int "t", int "r", int "b", string "sp1", string "sp2", \ int "cpmode", int "epmode", int "spmode", int "cspmode", int "RREmode", \ int "debug", int "level", int "color", \ int "cs", int "ce", clip "clip2") function ClipSlice_old(clip clip, int "s", int "e", string "cp", string "ep1", string "ep2", \ int "l", int "t", int "r", int "b", string "sp1", string "sp2", \ int "debug", int "level", int "color") function EPClip(clip clip, int "s", int "e", string "cp", string "ep1", string "ep2", int "cpmode", int "epmode") function EPSlice(clip clip, int "l", int "t", int "r", int "b", string "sp1", string "sp2", int "spmode")
注意:新版与旧版的相同参数,说明是基本通用的,但是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 |
特别说明 | cpmode=0 在应用cp后再trim cpmode=1 在trim后再应用cp | ||
epmode | 选择ep应用先后顺序 | 0 | int |
特别说明 | epmode=0 在应用ep后再trim epmode=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 | 选择sp应用先后顺序 | 0 | int |
特别说明 | spmode=0 在应用sp1后再crop spmode=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 |
特别说明 | RREmode=0 帧段替换模式 RREmode=1 帧段+切片替换模式,在slice替换时,选取范围内为clip,选取范围外为clip2 RREmode=2 帧段+切片替换模式,在slice替换时,选取范围内为clip2,选取范围外为clip 如果要用别的段落进行帧替换,请用RREmode=2 如果要用clip的段落进行帧替换,请用RREmode=0 不能在cspmode=0的情况下使用RRE功能 |
ClipSlice独有参数
参数 | 说明 | 默认设置 | 类型 |
---|---|---|---|
cspmode | 选择cp和sp应用的先后顺序 | 1 | int |
特别说明 | cspmode=0 在应用cp后再应用sp1 sp2 cspmode=1 在应用sp1 sp2后再应用cp | ||
debug | ClipSlice_Debug模式选择 | 0 | int |
特别说明 | debug=0 关闭debug debug=1 选取范围正常显示,选取外半透明层覆盖 debug=2 选取范围半透明层覆盖,选取外正常显示 debug=3 选取范围正常显示,选取外半透明黑层覆盖,并显示提示:当前模式,切边范围,透明度,覆盖层颜色 debug=4 选取范围半透明黑层覆盖,选取外正常显示,并显示提示:当前模式,切边范围,透明度,覆盖层颜色 | ||
level | ClipSlice_Debug透明度选择,0-255,0完全透明,255完全不透明 | 200 | int |
特别说明 | 在RGB输入下level将无效,覆盖层为完全不透明 | ||
color | ClipSlice_Debug覆盖层颜色选择,十六进制 | $000000 (黑) | int |
使用范例
DGDecode_mpeg2source("X:\YV12_Clip.d2v") ClipSlice(11,22,"lsfmod()","nnedi3()","nnedi3()", \ 24,24,24,24,"nnedi3()","fft3dgpu()", \ 0,0,0,1, \ 3,200,$000000) #or DGDecode_mpeg2source("X:\YV12_Clip.d2v") ClipSlice(s=11,e=22,cp="lsfmod()",ep1="nnedi3()",ep2="nnedi3()", \ 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帧以外的段落用nnedi3处理,参数默认 #开启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",RREmode=2,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去处理背景部分,效果会很不错
DGDecode_mpeg2source("X:\YV12_Clip.d2v") ClipSlice(10,20,cs=30,ce=40) #用30-40帧去替换10-20帧
DGDecode_mpeg2source("X:\YV12_Clip.d2v") EPClip(11,22,"lsfmod()","nnedi3()","nnedi3()",0,0) #or DGDecode_mpeg2source("X:\YV12_Clip.d2v") EPClip(s=11,e=22,cp="lsfmod()",ep1="nnedi3()",ep2="nnedi3()",cpmode=0,epmode=0) #对11-22帧用lsfmod进行菊部处理,参数默认,对11-22帧以外的段落用nnedi3处理,参数默认
DGDecode_mpeg2source("X:\YV12_Clip.d2v") EPSlice(24,24,24,24,"nnedi3()","fft3dgpu()",0) #or DGDecode_mpeg2source("X:\YV12_Clip.d2v") EPSlice(l=24,t=24,r=24,b=24,sp1="nnedi3()",sp2="fft3dgpu()",spmode=0) #截取的范围为左上右下各减24像素后的图像,截取范围内的图像使用nnedi3处理,截取外的图像使用fft3dgpu处理
#你也可以这样应用 DGDecode_mpeg2source("X:\YV12_Clip.d2v") EPClip(11,12,"""EPSlice(24,24,24,24,"nnedi3()")""","FFT3DGPU","FFT3DGPU") #效果等于 DGDecode_mpeg2source("X:\YV12_Clip.d2v") ClipSlice(11,12,ep1="FFT3DGPU",ep2="FFT3DGPU",l=24,t=24,r=24,b=24,sp1="nnedi3") #在引用时注意,比如cp="Subtitle("nimei")",这样写是错误的 #要用三重引号,cp="""Subtitle("nimei")""",这样才是正确的
#对于IVTC等特殊处理,你可以这样 DGDecode_mpeg2source("X:\YV12_Clip.d2v") 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 v 1.XX 为新版
ClipSlice v 0.XX 为旧版
现在旧版的函数名已经更改为ClipSlice_old
新版与旧版结构以及复杂程度上有了很大的差别。新版作为一个函数,加入到了MYEPTools脚本中,而旧版则继续作为单独的脚本去更新,旧版的更新将会以旧版的结构作为基础。
目前公开的最新ClipSlice(old)版本为 v 0.51 beta,最新ClipSlice(New)版本为 v 1.10 beta
下载地址
Google Code:
为了减轻NMM服务器负担,请尽量使用Google Code的下载地址,如果碰上Google Code被QJ的情况,请使用NMM备用地址
NMM备用地址: