View Single Post
Old 10th July 2008, 10:40   #33  |  Link
mikeytown2
Resize Abuser
 
mikeytown2's Avatar
 
Join Date: Apr 2005
Location: Seattle, WA
Posts: 623
Here's an UGLY hack of the above working with 0 and 90. Requires KenBurnsEffect

Code:
Function DissolveAGG_test(clip a, clip b, int "Duration", float "Angle", float "EndAngle", string "Mode", float "WindowSize", float "MaskSharpnessStart", float "MaskSharpnessEnd")
{
#Set Defaults
Duration=Default(Duration,Round(Framerate(a)))
Angle=Default(Angle,0)
EndAngle=Default(EndAngle,Angle)
width=a.width()
height=a.height()
Diagonal = Ceil(sqrt(pow(width(a),2)+pow(height(a),2)))

Mode=Default(Mode, "LeftToRight")
MaskSharpnessStart=Default(MaskSharpnessStart, 50.0)
MaskSharpnessEnd=Default(MaskSharpnessEnd, MaskSharpnessStart)
WindowSize=Default(WindowSize, 2.0)
AudioMix=Dissolve(a, b, Duration).KillVideo()
a = a.KillAudio()
b = b.KillAudio()

#Check Input
Assert(Mode=="LeftToRight" || Mode=="RightToLeft" || Mode=="TopToBottom" || Mode=="BottomToTop", 
\"DissolveAGG: Only Four Modes are possible: LeftToRight, RightToLeft, TopToBottom, BottomToTop. Mode=" + Mode)
Assert(Duration >= 0, "DissolveAGG: Duration [" + String(Duration) + "] must not be a negative value")
Assert(Duration < a.Framecount(), "DissolveAGG: Duration[" + String(Duration) + "] must be less than " + Chr(10) + "clip A length[" + String(a.Framecount()) + "]")
Assert(Duration < b.Framecount(), "DissolveAGG: Duration[" + String(Duration) + "] must be less than " + Chr(10) + "clip B length[" + String(b.Framecount()) + "]")



#Set Parameters
aMid = Trim(a, FrameCount(a)-Duration, 0)
bMid = Trim(b, 0, -Duration)
EvalString = "BlankWidth=Int(4/2*WindowSize)
BlankHeight=Diagonal
ClipLeft=bMid
ClipRight=aMid"
Eval(EvalString)

#Make Mask
BlackBar = BlankClip(a, length=Duration+2, width=BlankWidth, height=BlankHeight, pixel_type="RGB32")
WhiteBar = BlankClip(BlackBar, color=$FFFFFF)
BWmask = StackHorizontal(BlackBar,WhiteBar) 
BWmask = BWmask.GaussResize(width, Diagonal)
BWmask = BWmask.AddBorders(Diagonal-width/2,0,0,0).AddBorders(0,0,Diagonal-width/2,0,$FFFFFF)
BWmask = BWmask.Trim(1, Duration)
BWmask = StackVertical(BWmask, BlankClip(BWmask))
BWmask = BWmask.Animate(0, framecount(BWmask)-1, "Rotate", Angle, $000000, 0, -1, Angle, BWmask.width(), BWmask.height(),  EndAngle, $000000, 0, -1, EndAngle, BWmask.width(), BWmask.height())
BWmaskA = BWmask.Trim(0,-Duration/4).KenBurnsEffect(width=Round(width*1.0),height=Round(height*1.0),startzoomfactor=-100,endzoomfactor=-100, startalign=5, endalign=5, startpanX=-Diagonal-BlankWidth/8, endpanX=-Diagonal, startpanY=Diagonal/(float(width)/height), endpanY=Diagonal/(float(width)/height))
BWmaskB = BWmask.Trim(Duration/4,(Duration*3)/4-1).ZoomBox(Round(width*1.0),Round(height*1.0),zoomfactor=-100, align=5, panX=-Diagonal, panY=Diagonal/(float(width)/height))
BWmaskC = BWmask.Trim((Duration*3)/4,0).KenBurnsEffect(width=Round(width*1.0),height=Round(height*1.0),startzoomfactor=-100,endzoomfactor=-100, startalign=5, endalign=5, startpanX=-Diagonal, endpanX=-Diagonal, startpanY=Diagonal/(float(width)/height), endpanY=Diagonal/(float(width)/height)+BlankWidth/8)
BWmask = BWmaskA+BWmaskB+BWmaskC
#Glue it together
Trim(a, 0, FrameCount(a)-Duration-1)
last = (Duration > 0 ? last + Overlay(ClipLeft, ClipRight, mask=BWmask, pc_range=True) : last)
last + Trim(b, Duration, 0)
HasAudio(AudioMix) ? AudioDub(last,AudioMix) : last

#BWmask
}

a = ColorBars().Trim(0,99)
b = a.invert()

DissolveAGG_test(a,b, 80, 0.0, 90.0, WindowSize=20)
The main advantage of this function over transall is the blurred mask. The transition line is softer and adjustable with DissolveAGG

Last edited by mikeytown2; 10th July 2008 at 20:10. Reason: Ax ShowFrameNumber()
mikeytown2 is offline   Reply With Quote