Animate
(clip, int start_frame, int end_frame, string filtername,
start_args, end_args)
ApplyRange
(clip, int start_frame, int end_frame, string
filtername, args)
Animate
je meta-filtr, který vyvolá filtr uvedený v jeho parametru filter s plynule se měnícími argumenty. Pro snímky do start_frame včetně, se filtr
filtername
vyvolává s argumenty start_args. Pro
snímky od end_frame,
se filtr filtername vyvolá s argumenty end_args. Pro snímky mezi start_args a end_frame
se pro hladký přechod hodnoty argumentů lineárně interpolují.
ApplyRange
je speciální typ Animate
kde start_args
= end_args, a objevil se ve verzi v2.51
. Může být použit, když chcete aplikovat určitý filtr na určitém rozsahu snímků klipu -
na rozdíl od Animate, jsou snímky mimo rozsah start_frame až end_frame
po průchodu nedotčeny.
Další
rozdíl od Animate
je, že argumenty args nemohou obsahovat klip. Počínaje
verzí v2.53 podporuje audio, a start_frame může být rovno
end_frame
(tzn., že se zpracuje jen jeden snímek).
V případech kdy velký počet rozsahů potřebuje podobnéé zpracování za použití mnoha volání
ApplyRange
může způsobit problémy resourců. Alternativou
může být použití ConditionalReader spolu
s
ConditionalFilter pro
výběr mezi nezpracovanou a zpracovanou verzí zdroje.
Jméno použitého filtru musí být v uvozovkách (tzn. je to řetězec - string), a dva vložené seznamy argumentů nejsou ohraničeny závorkami. Řetězce (strings) a videoklipy nemohou být interpolovány, a proto musí mít stejné hodnoty v obou seznamech argumentů. Důležité upozornění: Jestli používáte klip jako první argument Animate , pak stejný klip nesmí být zahrnut v seznamu předávaných argumentů start_args a end_args . Příklad:
v = Version() Animate(v,0,149,"Crop", v,0,0,64,32, v,316,0,64,32)
vyvolá chybu, protože první snímek je stejný jako neplatná syntaxe Crop(v, v, 0, 0, 64, 32).
Filtr bude nesprávně zpracovávat změnu zvukové stopy, proto jej nedoporučuji používat s filtry, které mění zvukovou stopu. A nepokoušejte se zadávat počáteční a koncové parametry vedoucí k různým rozměrům snímku.
Argument filtername dokonce může být samotným filtrem Animate
, jestli chcete
raději kvadratickou interpolaci než lineární.
Několik příkladů:
# Vytvořit protočení (scrolling) videa s verzí "Version": ver = Version() Animate(0,149,"Crop", ver,0,0,64,32, ver,316,0,64,32) # nebo, což je stejné: ver = Version() Animate(ver,0,149,"Crop", 0,0,64,32, 316,0,64,32) # Stmívání (Fade) do bíla AviSource("E:\pdwork\DO-Heaven.AVI") Animate(100,200,"Levels", 0,1,255,0,255, 0,1,255,255,255) # Postupné zvětšení střední části videa s rozlišením 320x240 , #počínaje od zvětšení 1:1 ve snímku 100 a konče s měřítkem 4:1 #ve snímku 200: clip = AviSource("E:\pdwork\DO-Heaven.avi") Animate(100,200,"BicubicResize", clip,320,240,0,0,320,240, clip,320,240,120,90,80,60) # Animate(clip, 100,200,"BicubicResize", 320,240,0,0,320,240, 320,240,120,90,80,60) # also works # Zvětšit text "Hello, World!" ze středu videa velikosti 320x240: BlankClip(width=320, height=240) Animate(0,48,"Subtitle", "Hello, World!",160,120,0,99999,"Arial",0, \ "Hello, World!",25,130,0,99999,"Arial",48)
Zvětšení klipu c2 se současným překrytím na c1:
Function myfunc(clip c1, clip c2, int x, int y, int w, int h) { w = w - w%2 h = h - h%2 my_c2 = BicubicResize(c2,w,h) Overlay(c1,my_c2,x,y) } c1 = AviSource("D:\Captures\jewel.avi") # c1 je větší než c2 c2 = AviSource("D:\Captures\atomic.avi").BicubicResize(320,240) Animate(0,1000,"myfunc",c1,c2,10,10,10,10,c1,c2,300,300,360,288) # nebo # Animate(c1,0,1000,"myfunc", c2,10,10,10,10, c2,300,300,360,288) # ale následující zápis nebude pracovat, protože byly předány tři klipy funkci # myfunc (c1, c1 and c2), namísto dvou: # Animate(c1,0,1000,"myfunc",c1,c2,10,10,10,10,c1,c2,300,300,360,288)
Malý obraz zvětšit na černý klip dokud se nezamění hlavním klipem (sám sebou):
function res(clip clip, clip "LClip", int "width", int "height", int "centerX", int "centerY") { LClip = BicubicResize(LClip, width, height) Overlay(clip, LClip, centerX-LClip.width/2, centerY-LClip.height/2) } function resize(clip clip, clip "LClip", \ int "end_frame", int "end_width", int "end_height", int "centerX", int "centerY") { return Animate(start_frame, end_frame, "res", clip, LClip, start_width, start_height, centerX, centerY, \ clip, LClip, end_width, end_height, centerX, centerY) } clip = AviSource("D:\captures\jewel.avi") clip = clip.BicubicResize(640,480) clip = clip.ConvertToRGB() black = BlankClip(clip) resize(black, clip, 0, 120, 120*clip.height/clip.width, 500, 640, 480, clip.width/2, clip.height/2)
Příklady využívající ApplyRange:
ver = Version() return ver.ApplyRange(0,149,"Crop", 158,0,64,32) # dává chybu, protože nemůže mít různé velikosti snímků v klipu
Version() ApplyRange(100,149,"Blur", 1.0)
AviSource("E:\pdwork\DO-Heaven.avi").BicubicResize(320,240) ApplyRange(0,48,"Subtitle","Hello World!",25,130,0,99999,"Arial",48) #nebo, což je stejné: clip = AviSource("E:\pdwork\DO-Heaven.avi").BicubicResize(320,240) ApplyRange(clip,0,48,"Subtitle","Hello World!",25,130,0,99999,"Arial",48) # ale protože rozsah snímků lze poskytnout do Subtitle samotného, je to stejné jako: AviSource("E:\pdwork\DO-Heaven.avi").BicubicResize(320,240) Subtitle("Hello, World!",25,130,0,48,"Arial",48)
$English Date: 2008/12/06 17:50:04 $
Český překlad:12.2.2009