slicedecomb2 更新:
slicedecomb2 (int "x1", int "y1", int "x2", int "y2", string "func1", string "func2", bool "fill", bool "debug", int "debug_outline")
x1,y1,x2,y2 - 正整数,切边数值,分别对应左、上、右、下。
func1 - 字符串,对剪切框内部分使用的滤镜
func2 - 字符串,对剪切框外部分使用的滤镜,当func2未被定义时,func2=func1。
fill - True/False,切边后补黑边,应用滤镜后再切掉。True=补黑边,False=不补。默认False
debug - True/False,纠错模式。打开debug后将输出RGB32
debug_outline - 整数,标记框的扩边方向和宽度,为正时向外扩边,反之向内。默认1,不可为0。当x1,y1,x2,y2任一为0时只能向内扩边。
目前没有解决的问题:
3) 自适应切奇数边。(目前还没想好处理方法)
4) slicedecomb3:多个slice处理。(目前还没碰到这种片源)
- function slicedecomb2 (clip v, int "x1", int "y1", int "x2", int "y2",
- \ string "func1", string "func2", bool "fill", bool "debug", int "debug_outline") {
- xyse = (x1<0 || y1<0 || x2<0 || y2<0) ? true : false
- func2 = default(func2,func1)
- debug = default(debug,false)
- fill = default(fill,false)
- debug_outline = default(debug_outline,1)
- debug_outline = debug_outline==0 ? 1 : debug_outline
- pixel_type = "YV12"
- pixel_type = v.IsRGB24 ? "RGB24" : pixel_type
- pixel_type = v.IsRGB32 ? "RGB32" : pixel_type
- pixel_type = v.IsYUY2 ? "YUY2" : pixel_type
- vv1 = fill
- \ ? eval("v.crop(x1,y1,0-x2,0-y2).addborders(x1,y1,x2,y2)"+func1).crop(x1,y1,0-x2,0-y2)
- \ : eval("v.crop(x1,y1,0-x2,0-y2)"+func1)
- vvb = BlankClip(length=v.framecount,width=v.width-x1-x2,height=v.height-y1-y2,pixel_type=pixel_type,fps=v.framerate,color=$000000)
- vv2 = eval("overlay(v,vvb,x=x1,y=y1)"+func2)
- vv1 = debug ? vv1.converttorgb32 : vv1
- vv2 = debug ? vv2.converttorgb32 : vv2
- dbow = debug ? debug_outline>0 ? overlay(
- \ overlay(vv2,vv2.crop(x1-debug_outline,y1-debug_outline,0-x2+debug_outline,0-y2+debug_outline).Invert,x=x1-debug_outline,y=y1-debug_outline),
- \ vv1,x=x1,y=y1).subtitle("slicedecomb2 Debug | Outline="+string(debug_outline)+"px(Outward)",align=3) : nop : nop
- dbiw = debug ? debug_outline<0 ? overlay(vv2,
- \ overlay(vv1.Invert,vv1.crop(0-debug_outline,0-debug_outline,debug_outline,debug_outline),x=0-debug_outline,y=0-debug_outline)
- \ ,x=x1,y=y1).subtitle("slicedecomb2 Debug | Outline="+string(debug_outline)+"px(Inward)",align=3): nop : nop
- return xyse ? BlankClip.subtitle("slicedecomb2 Error : x1 y1 x2 y2 could NOT be less than 0")
- \ : debug ? debug_outline>0 ? dbow : dbiw : overlay(vv2,vv1,x=x1,y=y1)
- }
复制代码 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
slicedecomb2(142,88,146,84,"AAD()","AAD()",debug=true)
|