Animate / ApplyRange

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 est un méta-filtre qui évalue le paramètre filter en faisant constamment varier ses arguments. A l'image start_frame et avant, le filter est évalué avec les arguments données par start_args. A l'image end_frame et après, le filter est évalué avec les arguments données par end_args. Entre, les arguments sont interpolés linéairement pour obtenir une transition douce.

ApplyRange est un cas particulier de Animatestart_args = end_args, et qui est présent depuis v2.51. Ce filtre peut être utilisé quand vous voulez appliquer un certain filtre sur une certaine plage d'image d'une video. Une autre différence avec Animate est que args ne peuvent contenir une video. A partir de v2.53 ce filtre supporte l'audio, et start_frame peut être égal à end_frame (de manière à ce qu'une seule image soit traitée).

Le filter doit être entouré de guillemets (c'est une chaîne de caractères), et les deux listes d'arguments start_args et end_args ne sont pas entre parenthèses. Les chaînes de caractères et les video ne peuvent pas être interpolées, et doivent donc être identiques dans les deux listes d'arguments. Une remarque importante cependant: si vous utilisez une video en tant que premier argument, celle ci ne doit pas être utilisée dans start_args et end_args. Par exemple:

v = Version()
Animate(v,0,149,"Crop", v,0,0,64,32, v,316,0,64,32)

renvoie une erreur, puisque la première image (donnée par la fonction animate) serait calculée avec la syntaxe non valide Crop(v, v, 0, 0, 64, 32).

Ce filtre ne traitera pas correctement des changements de pistes audio, et je ne recommande donc pas l'utilisation de filtre qui modifierai la piste audio. Et s'il vous plait, ne mettez pas des paramètres initiaux et finaux qui produiraient une image de sortie de résolution différente.

L'argument filtername peut être Animate si vous souhaitez une interpolation quadratique plutôt que linéaire.

Exemples:

# Cré une version en mouvement de la video "Version":
ver = Version()
Animate(0,149,"Crop", ver,0,0,64,32, ver,316,0,64,32)

# La même chose autrement:
ver = Version()
Animate(ver,0,149,"Crop", 0,0,64,32, 316,0,64,32)

# Fondu au blanc:
AviSource("E:\pdwork\DO-Heaven.AVI")
Animate(100,200,"Levels", 0,1,255,0,255, 0,1,255,255,255)

# Zoom au centre d'une video de 320x240, en commencant avec un facteur d'échelle de
# 1:1 à l'image 100 et finissant avec un facteur d'échelle de 4:1
# à l'image 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) # marche également
# Dezoom le texte "Hello, World!" en partant du centre d'une video de 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)
# Zoomer sur le clip c2 en le superposant au clip 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")
c2 = AviSource("D:\Captures\atomic.avi").BicubicResize(320,240) # c2 est plus petit que c1
Animate(0,1000,"myfunc",c1,c2,10,10,10,10,c1,c2,300,300,360,288)
# orou bien
# Animate(c1,0,1000,"myfunc", c2,10,10,10,10, c2,300,300,360,288)

# par contre, la ligne suivante ne marche pas puisque 3 clips sont passés à myfunc (c1, c1 et c2), alors que seulement 2 sont autorisés:
# Animate(c1,0,1000,"myfunc",c1,c2,10,10,10,10,c1,c2,300,300,360,288)
# Une petite image s'agrandit sur une video noire jusqu'a la remplacer:
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 "start_frame", int "start_width", int "start_height",
\ 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").BicubicResize(640,480).ConvertToRGB()
black = BlankClip(clip)

resize(black, clip, 0, 120, 120*clip.height/clip.width, 500, 640, 480, clip.width/2, clip.height/2)
ver = Version()
return ver.ApplyRange(0,149,"Crop", 158,0,64,32)

AviSource("E:\pdwork\DO-Heaven.avi").BicubicResize(320,240)
ApplyRange(0,48,"Subtitle", "Hello, World!",25,130,0,99999,"Arial",48)

#qui est la même chose que:
clip = AviSource("E:\pdwork\DO-Heaven.avi").BicubicResize(320,240)
ApplyRange(clip, 0,48,"Subtitle", "Hello, World!",25,130,0,99999,"Arial",48)

$Date: 2005/10/06 21:10:07 $
French translation date: 2005/10/06 JasonFly macpaille@users.sourceforge.net