Funny you should mention that, WE, as the first script function I wrote was PanZoom (didn't know there was already a plugin to do this):
Code:
# PanZoom - Pan, Tilt and Zoom a small frame across a clip, with edge detection
# Parameters:
# Output_W, Output_H Output frame width/height
# Start_Frame, End_Frame Frame numbers to start/end the operation
# Start_Focus_X, Start_Focus_Y Starting center coordinates
# End_Focus_X, int End_Focus_Y Ending center coordinates
# Start_Zoom, End_Zoom Start/End zoom levels, 1 = Original size, 2 = 2x zoom, etc.
function PanZoom( clip Input, int Output_W, int Output_H,\
int Start_Frame, int End_Frame,\
int Start_Focus_X, int Start_Focus_Y,\
int End_Focus_X, int End_Focus_Y,\
float Start_Zoom, float End_Zoom )
{
Start_W = Output_W / Start_Zoom
Start_H = Output_H / Start_Zoom
Assert( Start_W <= Input.Width,\
"Start frame Width exceeds input clip dimensions. Reduce output frame size or increase Start_Zoom" )
Assert( Start_H <= Input.Height,\
"Start frame height exceeds input clip dimensions. Reduce output frame size or increase Start_Zoom" )
Start_HW = Start_W / 2
Start_HH = Start_H / 2
Start_Origin_X = Start_Focus_X - Start_HW
Start_Origin_X = Start_Origin_X < 0 ? 0 : Start_Origin_X
Start_Origin_X = Start_Origin_X + Start_W > Input.Width ? Input.Width - Start_W : Start_Origin_X
Start_Origin_Y = Start_Focus_Y - Start_HH
Start_Origin_Y = Start_Origin_Y < 0 ? 0 : Start_Origin_Y
Start_Origin_Y = Start_Origin_Y + Start_H > Input.Height ? Input.Height - Start_H : Start_Origin_Y
End_W = Output_W / End_Zoom
End_H = Output_H / End_Zoom
Assert( End_W <= Input.Width,\
"End frame Width exceeds input clip dimensions. Reduce output frame size or increase End_Zoom" )
Assert( End_H <= Input.Height,\
"End frame height exceeds input clip dimensions. Reduce output frame size or increase End_Zoom" )
End_HW = End_W / 2
End_HH = End_H / 2
End_Origin_X = End_Focus_X - End_HW
End_Origin_X = End_Origin_X < 0 ? 0 : End_Origin_X
End_Origin_X = End_Origin_X + End_W > Input.Width ? Input.Width - End_W : End_Origin_X
End_Origin_Y = End_Focus_Y - End_HH
End_Origin_Y = End_Origin_Y < 0 ? 0 : End_Origin_Y
End_Origin_Y = End_Origin_Y + End_H > Input.Height ? Input.Height - End_H : End_Origin_Y
Animate( Input, Start_Frame, End_Frame, "BicubicResize",\
Output_W, Output_H, 0, 0.5, Start_Origin_X, Start_Origin_Y, Start_W, Start_H,\
Output_W, Output_H, 0, 0.5, End_Origin_X, End_Origin_Y, End_W, End_H )
}
Pretty crude code, doesn't have as many features as yours, but for what it is, it works.