Syntaxe avisynth

From Avisynth wiki
(Difference between revisions)
Jump to: navigation, search
(a)
Line 18: Line 18:
 
# ''expression_booléenne'' ? ''expression1'' : ''expression2''
 
# ''expression_booléenne'' ? ''expression1'' : ''expression2''
  
Dans le premier cas, la valeur d'''expression'' prend la valeur de la constante.  Dans le second cas, ''expression'' prend la valeur correspondante à une [[Clip_properties|propriété du clip]] ou d'une variable (dont la valeur doit avoir été préalablement définie).  Dans le troisième cas, ''expression'' prend la valeur retournée par la fonction (voir ci-dessous).  Le quatrième cas est une alternative à la forme ''fonction''(''expression'',''argument'').   
+
Dans le premier cas, la valeur d'''expression'' prend la valeur de la constante.
 +
  Dans le second cas, ''expression'' prend la valeur correspondante à une [[Clip_properties|propriété du clip]] ou d'une variable (dont la valeur doit avoir été préalablement définie).
 +
  Dans le troisième cas, ''expression'' prend la valeur retournée par la fonction (voir ci-dessous).
 +
  Le quatrième cas est une alternative à la forme ''fonction''(''expression'',''argument'').   
  
Les deux derniers cas montrent la syntaxe employée pour effectuer une opération arithmétique ou logique (via des [[operators|opérateurs]] dérivés du langage C). Le premier permet de manipuler int, float, variable générique (val - voir [[Script variables]]) ou booléen. Le second permet de mettre en place des actions conditionnelles. Les chaînes de caractères peuvent être concaténées avec '+'. L'opérateur '+' peut être aussi utilisé pour assembler des vidéos : '''a + b''' est équivalent à  [[Splice|UnalignedSplice]](''a'', ''b'') tandis que '''a ++ b''' est équivalent à  [[Splice|AlignedSplice]](''a'', ''b'').  
+
Les deux derniers cas montrent la syntaxe employée pour effectuer une opération arithmétique ou logique (via des [[operators|opérateurs]] dérivés du langage C) :
 +
Le premier permet de manipuler int, float, variable générique (val) ou booléen (voir [[Script variables]]).
 +
Le second permet de mettre en place des actions conditionnelles.
 +
 
 +
A noter que le caractère '+' peut être aussi utilisé pour concaténer des chaînes de caractères ou pour assembler des vidéos : '''a + b''' est équivalent à  [[Splice|UnalignedSplice]](''a'', ''b'') tandis que '''a ++ b''' est équivalent à  [[Splice|AlignedSplice]](''a'', ''b'').  
  
 
La majeure partie des fonctions utilisées dans AviSynth sont des filtres vidéo. Cependant une fonction peut retourner tout type de variable (ce qui peut être utile dans le cas de scripting de fonction complexe - voir [[User_defined_script_functions|script functions]]). Il faut cependant noter que la dernière fonction d'un script doit retourner un ''clip'' comme variable finale.  
 
La majeure partie des fonctions utilisées dans AviSynth sont des filtres vidéo. Cependant une fonction peut retourner tout type de variable (ce qui peut être utile dans le cas de scripting de fonction complexe - voir [[User_defined_script_functions|script functions]]). Il faut cependant noter que la dernière fonction d'un script doit retourner un ''clip'' comme variable finale.  
  
Une fonction peut avoir jusqu'à 60 arguments (vous en aurez assez?), et la valeur retournée  peut être de n'importe quel type supporté par AviSynth (clip, int, float, bool, string). Functions can take up to sixty arguments (hope that's enough), and the return value can be of any type supported by the scripting language (clip, int, float, bool, string). Functions always produce a new value and never modify an existing one. What that means is that all arguments to a function are passed "by value" and not "by reference"; in order to alter a variable's value in AviSynth script language you must assign to it a new value.
+
Une fonction peut avoir jusqu'à 60 arguments (vous en aurez assez ?), et la valeur retournée  peut être de n'importe quel type supporté par AviSynth (clip, int, float, bool, string).  
  
To see the syntax of the function call for each built-in filter, view the [[Internal_filters|internal filters]]. There are also built-in [[Internal_functions|internal functions]] that perform common operations on non-clip variables.
 
  
''Args'' is a list of function arguments separated by commas. The list can be empty. Each argument must be a text string, an integer, a floating-point number, a boolean value or a video clip (that is, an ''expression''). If the filter function expects a video clip as its first argument, and that argument is not supplied, then the clip in the special last variable will be used.  
+
Pour connaître la syntaxe d'appel des différentes fonctions intégrées à AviSynth, reportez vous à la page détaillant les[[Filtres_internes| filtres internes]]. Pour les fonctions opérant sur des variables autres que ''clip'' voyez la page des [Internal_functions|fonctions internes]].
  
AviSynth filters can take named arguments. The named arguments can be specified in any order, and the filter will choose default values for any that you leave off. This makes certain filters much easier to use. For example, you can now write '''[[Subtitle]]("Hello, World!", text_color=$00FF00, x=100, y=200)''' instead of '''[[Subtitle]]("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00)'''. [[Colors]] can be specified in hexadecimal as in the example above or in decimal. In both cases it should be specified as RGB value, even if the clip itself is YUV.
+
Les ''Arguments'' sont les paramètres appliqués à la fonction; chaque argument est séparé par une virgule. Un argument doit être de type ''string'', ''int'',, ''float'', ''bool'' ou ''clip''. Cependant une fonction peut très bien ne pas avoir d'argument déclaré. Si une fonction attend un ''clip'' comme premier argument mais que celui-ci n'est spécifié, la fonction utilisera la variable spéciale ''last''.
  
You can also make function calls without parentheses, e.g. '''FilterName''' ''arg1'', ''arg2''. The primary reason for this is to retain compatibility with old scripts. However, it's sometimes convenient to leave off the parentheses when there's no possibility of confusion.  
+
Les filtres AviSynth peuvent avoir des arguments nommés ou non. Les arguments nommés rendent en général les filtres plus faciles à paramétrer. En effet on peut spécifier les arguments dans l'ordre que l'on souhaite, et ce sans avoir à spécifier chacun des paramètres de la fonction (si un argument n'est pas spécifié, le filtre choisira la valeur par défaut).
 +
Par exemple, vous pouvez écrire  '''[[Subtitle]]("Hello, World!", text_color=$00FF00, x=100, y=200)''' au lieu de '''[[Subtitle]]("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00)'''. La [[Colors|couleur]] peut être spécifiée en hexadécimal comme ci-dessus ou en décimal. Dans les deux cas vous devez donner la couleur en format RVB même si votre clip est en YUV.
  
Avisynth ignores anything from a # character to the end of that line. This can be used to add '''comments''' to a script.  
+
Il est aussi possible d'appeler une fonction sans utiliser de parenthèse : '''NomDuFiltre''' ''argument1'', ''argument2'' afin d'assurer une compatibilité avec vieux script créés pour de vieilles versions d'AviSynth. Je ne vous conseille pas d'utiliser cette syntaxe à moins que vous ayez une bonne raison de l'utiliser.  
<pre># comment</pre>
+
  
In v2.58 it is possible to add '''block''' and '''nested block''' comments in the following way:
+
Voyons maintenant les marqueurs de commentaires : Avisynth ignore tout ce qui se trouve derrière le caractère # et ce jusqu'à la fin de la ligne. On se sert donc de ce caractère pour commenter les scripts.
  
# block comment:
+
<pre># commentaires blah blah</pre>
 +
 
 +
La version v2.58 introduit de nouveaux types de commentaires : les commentaires en bloc  et les commentaires en bloc "emboîtables". Voici comment les utiliser:
 +
 
 +
# commentaire en bloc :
 
  /*  
 
  /*  
  comment 1
+
  commentaire 1
  comment 2
+
  commentaire 2
 
  */
 
  */
  
  # nested block comments:
+
  # commentaire en bloc emboité:
  [* [* a meaningful example will follow later :) *] *]
+
  [* [* un exemple concret viendra plus tard :) *] *]
 +
 
 +
Avisynth ignore également tout texte qui se trouve après  la commande <nowiki>__END__</nowiki> (avec un double underscore)) .
 +
Cela peut être utiliser pour tronquer la fin d'un script.
  
Avisynth ignores anything from an <nowiki>__END__</nowiki> keyword (with double underscores) to the end of the script file.
 
This can be used to disable some last commands of script.
 
<pre>Version()
 
__END__
 
ReduceBy2()
 
Result is not reduced and we can write any text here
 
</pre>
 
  
Avisynth '''ignores case''': aViSouRCe is just as good as AVISource.
+
Avisynth ne prend pas en compte la casse des caractères : "aViSouRCe" est traité de la même façon qu' "AVISource" par AviSynth.
  
Multiple Avisynth statements on a single line can only be achieved in the context of OOP notation or embedding filters as parameters of another function such as:
+
Il est également possible d'enchaîner les déclarations sur une seule ligne (voir cas numéro 4 ci-dessus) :
  
 
  [[AviSource]]("c:\video.avi").[[Trim]](0, 499)
 
  [[AviSource]]("c:\video.avi").[[Trim]](0, 499)
Line 64: Line 70:
 
  [[AudioDub]](AviSource("c:\video.avi"), [[AviSource|WavSource]]("c:\audio.wav"))
 
  [[AudioDub]](AviSource("c:\video.avi"), [[AviSource|WavSource]]("c:\audio.wav"))
  
Avisynth statements can be split across multiple lines by placing a backslash ("\") either as the last non-space character of the line being extended, or as the first non-space character on the next line.
+
Avisynth per met également d'écrire une déclaration sur plusieurs lignes en utilisant un backslash ("\") soit à la fin de la première ligne de déclaration soit au début de la ligne suivante de déclaration.
  
Line splitting examples (both valid and equal):
+
Un exemple (les deux syntaxes sont valides :
  
 
  Subtitle("Hello, World!", 100, 200, 0, \
 
  Subtitle("Hello, World!", 100, 200, 0, \
 
     999999, "Arial", 24, $00FF00)
 
     999999, "Arial", 24, $00FF00)
  
-or-
+
-ou-
  
 
  Subtitle("Hello, World!", 100, 200, 0,
 
  Subtitle("Hello, World!", 100, 200, 0,
 
     \ 999999, "Arial", 24, $00FF00)
 
     \ 999999, "Arial", 24, $00FF00)
  
When splitting accross multiple lines you may ''place comments only at the end of the last line''. Mixing comments with backslashes at an intermediate line of the line-split will either produce an error message or result at hard to trace bugs.
+
Faites attention lorsque vous utilisez les commentaires en même temps que les déclarations sur plusieurs lignes... Cela peut conduire à des bugs difficiles à déceler :
  
Example of a not-signaled bug by improper mixing of comments and line separation:
+
Voici un exemple du genre de bug que l'on peut rencontrer :
  
 
  [[ColorBars]]
 
  [[ColorBars]]
 
  [[ShowFrameNumber]]
 
  [[ShowFrameNumber]]
  Trim(0,9) # select some frames  \
+
  Trim(0,9) # sélectionne un certain nbre de frames  \
 
  +Trim(20,29)
 
  +Trim(20,29)
  
The above example does not return frames [0..9,20..29] as intended because the "\" is masked by the "#" character before it; thus the line continuation never happens.
+
L'exemple ci-dessus ne renvoie pas les frames [0..9,20..29] car le caractère "\" est masqué par le marqueur de commentaire "#"
  
 
[[Category:AviSynth_Syntax]]
 
[[Category:AviSynth_Syntax]]

Revision as of 18:21, 16 February 2008

La syntaxe d'une ligne de commande d'un script AviSynth peut se présenter sous l'une de ces trois formes :

  1. nom_de_la_variable = expression
  2. expression
  3. return expression

Dans le premier cas, expression est exécuté et le résultat de l'expression est assigné à nom_de_la_variable. Dans le second cas expression est exécuté et le résultat est assigné à la variable spéciale last. En fin dans le troisième cas, expression est évalué et le résultat de expression est la valeur du bloc courant (que le bloc en question soit une fonction ou le script en lui même) qui sera retournée. Dans le cas ou la valeur retournée est celle du script, la valeur retournée sera typiquement le clip vidéo envoyé à l'application qui ouvre le script AviSynth.

La plupart du temps, le résultat d'une expression sera un clip vidéo; Cependant AviSynth supporte plusieurs types de valeurs (clip, entiers / int, flottant / float, booléen / bool et chaîne de caractère / string ) qui peuvent être traitées par les fonctions internes d'AviSynth.

Une expression peut se présenter sous l'une de ces formes :

  1. constante_numérique ou constante_string
  2. nom_de_variable or propriété_du_clip
  3. Fonction(argument)
  4. expression.Fonction(argument)
  5. expression1 opérateur expression2
  6. expression_booléenne ? expression1 : expression2

Dans le premier cas, la valeur d'expression prend la valeur de la constante.

Dans le second cas, expression prend la valeur correspondante à une propriété du clip ou d'une variable (dont la valeur doit avoir été préalablement définie).
Dans le troisième cas, expression prend la valeur retournée par la fonction (voir ci-dessous).
Le quatrième cas est une alternative à la forme fonction(expression,argument).  

Les deux derniers cas montrent la syntaxe employée pour effectuer une opération arithmétique ou logique (via des opérateurs dérivés du langage C) :

Le premier permet de manipuler int, float, variable générique (val) ou booléen (voir Script variables).
Le second permet de mettre en place des actions conditionnelles.

A noter que le caractère '+' peut être aussi utilisé pour concaténer des chaînes de caractères ou pour assembler des vidéos : a + b est équivalent à UnalignedSplice(a, b) tandis que a ++ b est équivalent à AlignedSplice(a, b).

La majeure partie des fonctions utilisées dans AviSynth sont des filtres vidéo. Cependant une fonction peut retourner tout type de variable (ce qui peut être utile dans le cas de scripting de fonction complexe - voir script functions). Il faut cependant noter que la dernière fonction d'un script doit retourner un clip comme variable finale.

Une fonction peut avoir jusqu'à 60 arguments (vous en aurez assez ?), et la valeur retournée peut être de n'importe quel type supporté par AviSynth (clip, int, float, bool, string).


Pour connaître la syntaxe d'appel des différentes fonctions intégrées à AviSynth, reportez vous à la page détaillant les filtres internes. Pour les fonctions opérant sur des variables autres que clip voyez la page des [Internal_functions|fonctions internes]].

Les Arguments sont les paramètres appliqués à la fonction; chaque argument est séparé par une virgule. Un argument doit être de type string, int,, float, bool ou clip. Cependant une fonction peut très bien ne pas avoir d'argument déclaré. Si une fonction attend un clip comme premier argument mais que celui-ci n'est spécifié, la fonction utilisera la variable spéciale last.

Les filtres AviSynth peuvent avoir des arguments nommés ou non. Les arguments nommés rendent en général les filtres plus faciles à paramétrer. En effet on peut spécifier les arguments dans l'ordre que l'on souhaite, et ce sans avoir à spécifier chacun des paramètres de la fonction (si un argument n'est pas spécifié, le filtre choisira la valeur par défaut).

Par exemple, vous pouvez écrire  Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200) au lieu de Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00). La couleur peut être spécifiée en hexadécimal comme ci-dessus ou en décimal. Dans les deux cas vous devez donner la couleur en format RVB même si votre clip est en YUV.

Il est aussi possible d'appeler une fonction sans utiliser de parenthèse : NomDuFiltre argument1, argument2 afin d'assurer une compatibilité avec vieux script créés pour de vieilles versions d'AviSynth. Je ne vous conseille pas d'utiliser cette syntaxe à moins que vous ayez une bonne raison de l'utiliser.

Voyons maintenant les marqueurs de commentaires : Avisynth ignore tout ce qui se trouve derrière le caractère # et ce jusqu'à la fin de la ligne. On se sert donc de ce caractère pour commenter les scripts.

# commentaires blah blah

La version v2.58 introduit de nouveaux types de commentaires : les commentaires en bloc et les commentaires en bloc "emboîtables". Voici comment les utiliser:

# commentaire en bloc :
/* 
commentaire 1
commentaire 2
*/
# commentaire en bloc emboité:
[* [* un exemple concret viendra plus tard :) *] *]

Avisynth ignore également tout texte qui se trouve après la commande __END__ (avec un double underscore)) . Cela peut être utiliser pour tronquer la fin d'un script.


Avisynth ne prend pas en compte la casse des caractères : "aViSouRCe" est traité de la même façon qu' "AVISource" par AviSynth.

Il est également possible d'enchaîner les déclarations sur une seule ligne (voir cas numéro 4 ci-dessus) :

AviSource("c:\video.avi").Trim(0, 499)
-or-
AudioDub(AviSource("c:\video.avi"), WavSource("c:\audio.wav"))

Avisynth per met également d'écrire une déclaration sur plusieurs lignes en utilisant un backslash ("\") soit à la fin de la première ligne de déclaration soit au début de la ligne suivante de déclaration.

Un exemple (les deux syntaxes sont valides :

Subtitle("Hello, World!", 100, 200, 0, \
    999999, "Arial", 24, $00FF00)

-ou-

Subtitle("Hello, World!", 100, 200, 0,
    \ 999999, "Arial", 24, $00FF00)

Faites attention lorsque vous utilisez les commentaires en même temps que les déclarations sur plusieurs lignes... Cela peut conduire à des bugs difficiles à déceler :

Voici un exemple du genre de bug que l'on peut rencontrer :

ColorBars
ShowFrameNumber
Trim(0,9) # sélectionne un certain nbre de frames  \
+Trim(20,29)

L'exemple ci-dessus ne renvoie pas les frames [0..9,20..29] car le caractère "\" est masqué par le marqueur de commentaire "#"

Personal tools