ClipSlice

出自NMM Doc
跳转到: 导航, 搜索

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

作者:桜ノ雨(Yuricon)

目录

起源

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

终结

我觉得我已经崩溃了。。。已经没有时间与精力再去做任何事了,我能做的只有这些了。。。

我决定停止全部脚本的开发,这可能是暂时性的,也可能是永久性的,如果您有继续开发的意向,请随意

2010年10月20日 by Yuricon

功能

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

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

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

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

现在的ClipSlice已经包含了RRE的功能,可以进行帧段替换与帧段切片替换。

在段落帧率改变的情况下能够自动同步帧率,还有方便VFR制作的TimeCode书写辅助的功能。

ClipSlice到底能发挥多大的能力,一切尽在您的掌握。

更新日志

2011/03/13 ClipSlice Readme

2010/12/06 EPClip EPSlice v 1.50 beta

2010/12/06 ClipSlice v 1.50 beta

2010/10/20 Final

2010/10/13 ClipSlice_old v 0.56 beta

2010/10/13 ClipSlice v 1.21 beta

2010/10/09 ClipSlice_old v 0.55 beta(未正式发布)

2010/10/08 ClipSlice v 1.20 beta

2010/09/01 ClipSlice_old v 0.51 beta

2010/08/24 ClipSlice_old v 0.50 beta

2010/08/04 ClipSlice v 1.10 beta

2010/07/26 ClipSlice v 1.00 beta (这是ClipSlice一个全新的版本)

2010/07/09 ClipSlice v 0.41 beta (这是一个未公开发布的版本)

2010/06/30 ClipSlice v 0.40 beta

2010/06/20 ClipSlice v 0.31 beta

2010/06/20 ClipSlice v 0.30 beta

2010/05/20 ClipSlice v 0.20s beta (特别简化版)

2010/05/16 ClipSlice v 0.20 beta

2010/03/16 ClipSlice v 0.10 beta

参数说明

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", float "fps", float "Denominator", string "TCHOut", bool "append", 
\ 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", string "TCHOut", bool "append")

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=0,并且没有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 关闭RRE模式
RREmode=1 帧段替换模式
RREmode=2 帧段+切片替换模式,在slice替换时,选取范围内为clip2,选取范围外为clip
RREmode=3 帧段+切片替换模式,在slice替换时,选取范围内为clip,选取范围外为clip2
RREmode=0下,任何RRE参数将不起作用
RREmode=1下,仅仅进行帧段替换,不会做slice替换,slice功能将正常使用
不能在cspmode=0的情况下使用RRE功能

ClipSlice独有参数

参数 说明 默认设置 类型
ClipSlice only
cspmode 选择cp和sp应用的先后顺序 1 int
特别说明 cspmode=0 在应用sp1 sp2后再应用cp
cspmode=1 在应用cp后再应用sp1 sp2
fps 指定同步帧率(分子),仅在帧率不同步以及debug=6时有效 clip帧率 float
Denominator 指定同步帧率(分母),仅在帧率不同步以及debug=6时有效 clip帧率 float
ClipSlice and ClipSlice_old
debug ClipSlice_Debug模式选择 0 int
特别说明 debug=0 关闭debug
debug=1 选取范围正常显示,选取外半透明层覆盖
debug=2 选取范围半透明层覆盖,选取外正常显示
debug=3 选取范围正常显示,选取外半透明黑层覆盖,并显示提示:当前模式,切边范围,透明度,覆盖层颜色
debug=4 选取范围半透明黑层覆盖,选取外正常显示,并显示提示:当前模式,切边范围,透明度,覆盖层颜色
debug=5 TimeCode书写的辅助模式,会在cp段落画面右上角显示书写TC的相关信息:
当前模式,当前CP部分起始帧,当前CP部分结束帧,当前CP部分帧率,是否输出文件以及输出文件路径
debug=6 TimeCode输出模式,必须指定TCHOut,适用于只有一个ClipSlice改变帧率的情况
关于debug=5的特别说明,当TCHOut未指定时,不输出文件,只有TCHOut指定输出文件后,才会输出TC的相关辅助信息
当前CP部分是指处理过后的指定段落的clip
另外ClipSlice中的debug=5是ClipSlice(包括旧版)独有参数值,ClipSlice_Debug中并没有debug=5
关于debug=6的特别说明,与debug=5类似,同属于ClipSlice独有参数值,不过ClipSlice_old和ClipSlice_debug中目前还没有加入
level ClipSlice_Debug透明度选择,0-255,0完全透明,255完全不透明 200 int
特别说明 在RGB输入下level将无效,覆盖层为完全不透明
color ClipSlice_Debug覆盖层颜色选择,十六进制 $000000 (黑) int
TCHOut TimeCodeHelpOut,指定TC书写辅助信息的输出路径 空(不输出) string
特别说明 仅在debug=5 6下有效,在debug=6下必须指定,而debug=6下输出的是完整的TimeCode文件,记得输出TC后关掉
append TCHOut的追加写入模式 false(不追加写入) bool
特别说明 仅在debug=5下有效

使用范例

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",spmode=1,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,rremode=1)
#用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等特殊处理,你可以这样
blankclip(pixel_type="YV12",fps=30000,fps_denominator=1001)
ClipSlice(101,200,cp="AAD",cpmode=1)
#也可以这样
ClipSlice_old(101,200,cp="AAD")
#ClipSlice在处理完各段后会自动同步帧率到原始clip的帧率,这样有助于多ClipSlice下分段做IVTC等操作
#但请不要忘记写TimeCodes

#当然,如果你不满意ClipSlice自动同步的帧率的话,可以这样
blankclip(pixel_type="YV12",fps=30000,fps_denominator=1001)
ClipSlice_old(101,200,cp="AAD")
AssumeFPS(30000,1001)
#也可以这样
blankclip(pixel_type="YV12",fps=30000,fps_denominator=1001)
ClipSlice(101,200,cp="AAD",cpmode=1,fps=24000,Denominator=1001)
#觉得TC写起来很麻烦?那么你可以试试ClipSlice(包括old)的新功能
blankclip(pixel_type="YV12",fps=30000,fps_denominator=1001)
ClipSlice(s=10,e=20,cp="TDecimate(1)",cpmode=1,debug=5,tchout="X:\temp\tchout.txt")
#or 
ClipSlice_old(s=10,e=20,cp="TDecimate(1)",debug=5,tchout="X:\temp\tchout.txt")

#这样,你选取的段落画面的右上角就会显示出以下提示信息
#################################
#TimeCode书写辅助模式:
#当前CP部分总帧数:8
#当前CP部分起始帧:10
#当前CP部分结束帧:17
#当前CP部分帧率:23.97602463
#输出文件路径:X:\temp\tchout.txt
#################################
#并且会在"X:\temp\"输出一个名为"tchout.txt"的文件
#文件的内容是该CP的clip的TC信息
#10,17, 23.97602463
#那么如果是多个ClipSlice需要怎么做呢?很简单,你只需要在后面的ClipSlice中开启append就能办到
blankclip(pixel_type="YV12",fps=30000,fps_denominator=1001)
ClipSlice(s=10,e=20,cp="TDecimate(1)",cpmode=1,debug=5,tchout="X:\temp\tchout.txt")
ClipSlice(s=30,e=50,cp="TDecimate(1)",cpmode=1,debug=5,tchout="X:\temp\tchout.txt",append=true)
ClipSlice(s=70,e=100,cp="TDecimate(1)",cpmode=1,debug=5,tchout="X:\temp\tchout.txt",append=true)
#这样的话,输出的文件里就是这样
#10,17, 23.97602463
#
#30,45, 23.97602463
#
#70,93, 23.97602463

#需要注意的是,在第一个ClipSlice后帧数已经发生了改变,所以这时候再找第二段的起始点才是正确的
#如果你只需要处理一段不同帧率的话,你可以试试ClipSlice的debug=6,这样可以直接输出完整TC文件
blankclip(pixel_type="YV12",fps=30000,fps_denominator=1001)
ClipSlice(s=10,e=20,cp="TDecimate(1)",cpmode=1,debug=6,tchout="X:\temp\tchout.txt")
#输出完后你就可以关掉debug了
blankclip(pixel_type="YV12",fps=30000,fps_denominator=1001)
ClipSlice(s=10,e=20,cp="TDecimate(1)",cpmode=1)

ClipSlice就是如此,只要您开动脑筋,ClipSlice的用法可以多种多样,这就是ClipSlice主张的灵活性

新旧版区别

ClipSlice为新版

ClipSlice_old为旧版

现在旧版的函数名已经更改为ClipSlice_old

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

最终版本

ClipSlice_old v 0.56 Final

ClipSlice v 1.50 beta

下载地址

Google Code:

新版:ClipSlice v1.50

旧版:ClipSlice_old v0.56

为了减轻NMM服务器负担,请尽量使用Google Code的下载地址,如果碰上Google Code被QJ的情况,请使用NMM备用地址

NMM备用地址:

ClipSlice v1.50

ClipSlice_old v0.56

Category:修复脚本

个人工具
名字空间
动作
导航
工具箱
其他资源