ClipSlice

出自NMM Doc
於 2010年7月28日 (三) 15:12 由 Yuricon對話 | 貢獻 所做的修訂
跳至導覽 跳至搜尋

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:修復濾鏡