View Single Post
Old 25th June 2008, 06:38   #19  |  Link
mikeytown2
Resize Abuser
 
mikeytown2's Avatar
 
Join Date: Apr 2005
Location: Seattle, WA
Posts: 623
Updated the DissolveAGG function, it's now one function with no globals. Changed TFrames to Duration

Code:
# DissolveAGG() June 25th, 2008
#  Dissolve with a Wipe. Wipe has alpha channel mask for nice effect.
#
# Inputs
#  clip a - starting clip 
#  clip b - ending clip
#  int "Duration" - Number of overlapped frames
#  string "Mode" - Four modes are possible: LeftToRight, RightToLeft, TopToBottom, BottomToTop.
#  float "WindowSize" - 2.0 is default. larger: more sharp.
#  float "MaskSharpnessStart" - 1: Big Blur; 100: Sharpest. Default 50.
#  float "MaskSharpnessEnd" - 1: Big Blur; 100: Sharpest. Default 50.


Function DissolveAGG(clip a, clip b, int "Duration", string "Mode", float "WindowSize", float "MaskSharpnessStart", float "MaskSharpnessEnd")
{
	#Set Defaults
	Duration=Default(Duration,30)
	width=a.width()
	height=a.height()
	Mode=Default(Mode, "LeftToRight")
	MaskSharpnessStart=Default(MaskSharpnessStart, 50.0)
	MaskSharpnessEnd=Default(MaskSharpnessEnd, 50.0)
	WindowSize=Default(WindowSize, 2.0)
	AudioMix=Dissolve(a, b, Duration).KillVideo()
	a = a.KillAudio()
	b = b.KillAudio()
	
	#Duration=Int(Duration/2.0*((2.0-WindowSize)*0.1+2.0))
	
	#Check Input
	Assert(Mode=="LeftToRight" || Mode=="RightToLeft" || Mode=="TopToBottom" || Mode=="BottomToTop", 
	\"DissolveAGG: Only Four Modes are possible: LeftToRight, RightToLeft, TopToBotoom BottomToTop. Mode=" + Mode)
	
	#Set Parameters
	EvalString = Mode=="LeftToRight"? "BlankWidth=Int(4/2*WindowSize)
	BlankHeight=height
	startX1=BlankWidth + 0.5
	endX1=1.5
	startY1=0
	endY1=0
	x2=WindowSize*2-2
	y2=0
	ClipLeft=b
	ClipRight=a" : Mode=="RightToLeft"? "BlankWidth=Int(4/2*WindowSize)
	BlankHeight=height
	startX1=1.5
	endX1=BlankWidth + 0.5
	startY1=0
	endY1=0
	x2=WindowSize*2-2
	y2=0
	ClipLeft=a
	ClipRight=b" : Mode=="TopToBottom"? "BlankWidth=height
	BlankHeight=Int(6/2*WindowSize)
	startX1=0
	endX1=0
	startY1=BlankHeight + 0.5
	endY1=3.5
	x2=0
	y2=WindowSize*2-2
	ClipLeft=b
	ClipRight=a" : Mode=="BottomToTop"? "BlankWidth=height
	BlankHeight=Int(6/2*WindowSize)
	startX1=0
	endX1=0
	startY1=3.5
	endY1=BlankHeight + 0.5
	x2=0
	y2=WindowSize*3-4
	ClipLeft=a
	ClipRight=b" : ""
	Eval(EvalString)

	#Make Mask
	BlackBar = BlankClip(a, length=Duration+1, width=BlankWidth, height=BlankHeight, pixel_type="RGB32", fps=a.Framerate())
	WhiteBar = BlankClip(BlackBar, color=$FFFFFF)
	BWmask = Mode=="LeftToRight" || Mode=="RightToLeft" ? StackHorizontal(BlackBar,WhiteBar) : StackVertical(BlackBar,WhiteBar) 
	BWmask = BWmask.Animate(0,Duration,"GaussResize",
	\ width, height, startX1, startY1, x2, y2, MaskSharpnessStart,
	\ width, height, endX1, endY1, x2, y2, MaskSharpnessEnd)
	
	#Glue it together
	Trim(a, 0, FrameCount(a)-Duration-2)
	last + Overlay(Trim(ClipLeft, 0, Duration), Trim(ClipRight, FrameCount(ClipRight)-Duration-1, 0), mask=BWmask, pc_range=True) 
	last + Trim(b, Duration+1, 0)
	AudioDub(last,AudioMix)
}

Example:
Code:
a = ColorBars().Trim(0,29)
b = a.invert()

DissolveAGG(a,b, 20, "LeftToRight", 2.0)
last + DissolveAGG(a,b, 20, "RightToLeft", 3.0)
last + DissolveAGG(a,b, 20, "TopToBottom", 4.0)
last + DissolveAGG(a,b, 20, "BottomToTop", 5.0)
last + DissolveAGG(a.Loop(2),b.Loop(2), 50, "BottomToTop", 10.0,100.0, 50.0)

BTW what does AGG stand for?

Last edited by mikeytown2; 25th June 2008 at 10:36.
mikeytown2 is offline   Reply With Quote