ClipSlice

来自NMM Doc
Cunhan讨论 | 贡献2010年8月15日 (日) 22:25的版本 (test only)
跳到导航 跳到搜索

ClipSlice是一个用于对clip的指定帧段或帧,使用外部或者内部脚本滤镜进行局部处理的AviSynth脚本

作者:桜ノ雨(Yuricon)

起源

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

功能

ClipSlice是一个结合了Clip+Slice双重功能的脚本。

在Clip上,类似于ApplyRange,使用外部或者内部的脚本滤镜对clip的指定帧段或帧进行处理,但ClipSlice更加灵活易用。与ClipSlice的Clip部分同类型的脚本还有AAD中的函数AADTrimAADTrim也是一个非常优秀的脚本。

在Slice上,功能与slicedecomb2大致相同,对选择的段落进行画中画切片使用外部或者内部的脚本滤镜分开进行处理,只不过使用习惯上更偏向于作者个人的喜好。

总的来说,ClipSlice是一个基于时间轴与2D平面处理的AviSynth脚本。

更新日志

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目前最后的版本,目前未发布)

  • 修改了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 "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")

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独有参数

参数 说明 默认设置 类型
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,选取范围正常显示,选取外半透明黑层覆盖,并显示提示:当前模式,切边范围,透明度,覆盖层颜色
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")""",这样才是正确的

新旧版区别

ClipSlice v 1.XX 为新版

ClipSlice v 0.XX 为旧版

新版与旧版结构以及复杂程度上有了很大的差别。新版作为一个函数,加入到了MYEPTools脚本中,而旧版则继续作为单独的脚本去更新,旧版的更新将会以旧版的结构作为基础。

目前公开的最新ClipSlice(old)版本为 v 0.40 beta,最新ClipSlice(New)版本为 v 1.00 beta

下载地址

新版:ClipSlice v1.00

旧版:ClipSlice v0.40

Category:修复脚本