AviSynth Syntax - Benutzerdefinierte Skriptfunktionen
Definition und Struktur
Du kannst in AviSynth Scripts deine eigenen Funktionen defnieren und
sie wie unten dargestellt aufrufen. Die Funktion kann jeden möglichen
Clip oder Variablentyp zurückgeben. Eine benutzerdefinierte
Skript-Funktion ist ein unabhängiger Block von Script-Code, der jedes
Mal ausgeführt wird, wenn ein Aufruf der Funktion im Skript erfolgt.
Ein Beispiel für eine einfache benutzerdefinierte Skript-Funktion folgt
gleich (eine benutzerdefiniertes Filter):
function MuteRange(clip c, int fstart, int fend)
{
before = c.Trim(0, -fstart)
current = c.Trim(fstart, fend)
after = c.Trim(fend + 1, 0)
audio = Dissolve(Dissolve(before, current.BlankClip, 3), after, 3)
return AudioDub(c, audio)
}
Benutzerdefinierte Skript-Funktionen beginnen mit dem Schlüsselwort function , gefolgt vom Namen der Funktion. Der Name einer Script-Funktion folgt den gleichen Regeln wie Script Variablen.
Unmittelbar nach dem Namen steht die Argumente-Liste der Funktion. Die Liste (die leer sein kann) besteht aus (erwarteter Argument-Typ - Argumentname) Wortpaaren. Jeder Argument-Typ kann einer sein, der durch die Skriptsprache unterstützt wird.
function MuteRange(clip c, int fstart, int fend)
Dann kommt der Körper der Funktion, d.h. der Kode, der jedes Mal ausgeführt wird,
wenn die Funktion aufgerufen wird. Die Argumente werden im Hauptteil
der Funktion durch ihre Namen aufgerufen. Der Funktionskörper wird von
einem öffnenden und schließenden Klammerpaar eingeschlossen { ... }.
{
before = c.Trim(0, -fstart)
current = c.Trim(fstart, fend)
after = c.Trim(fend + 1, 0)
audio = Dissolve(Dissolve(before, current.BlankClip, 3), after, 3)
return AudioDub(c, audio)
}
Am Ender des Funktionskörpers kommt eine return Anweisung, die den Endwert zurück gibt, der aus den Argumenten berechnet wird und damit ist der Kode im Funktionskörper fertig.
return AudioDub(c, audio)
Anzumerken ist, dass im Gegensatz zu anderen Sprachen, in denen
mehrere return-Anweisungen innerhalb des Funktionskörpers erlaubt sind,
in AviSynth Funktionen nur eine einzige return-Anweisung enthalten dürfen. Dies liegt daran, weil diese Sprache Verzweigung nicht unterstützt (d.h. Block-Anweisungen).
Fakten über Benutzerdefinierte Scriptfunktionen
- Funktionen können bis zu sechzig Argumente aufnehmen und der Rückgabewert kann jeder von
der Skriptsprache unterstützter Typ sein (clip, int, float, bool, string).
- Obwohl es nicht empfohlen wird, kann ein Argument Typ weggelassen werden, und wird standardmäßig zu val, dem generischen Typ.
- Wenn die Funktion einen Videoclip als erstes Argument erwartet, und das
Argument wird nicht angegeben, dann wird der Clip ais der Sondervariable last verwendet.
- Funktionen unterstützt benannte Argumente. Rahme einfach einen
Argumentnamen mit Anführungszeichen ein, um es damit zu einem benannten Argument zu machen. Functions support named arguments. Simply enclose an argument's
name inside double quotes to make it a named argument. Beachte, dass damit das Folgende passiert:
- Alle nachfolgenden Argumente in der Liste müssen auch beannte Argumente sein.
- Ein benanntes Argument ist ein optionales Argument, das nicht unbedingt durch den Anrufer geliefert werden muss.
- Wenn eine Funktion aufgerufen wird, werden alle optionalen Argument,
die nicht
angegeben wurden auf einen leeren Wert vom Typ void (undefiniert)
gesetzt. Dies bedeutet nicht, dass sein Wert zufälliger Nonsense wird -
es bedeutet einfach, dass sein Typ weder clip, int, float, bool oder
String ist
und daher kein brauchbarer Wert.
- 4. Normalerweise solltest du mit der defined Funktion testen, ob ein
optionales Argument einen expliziten Wert hat, oder die
Default-Funktion, die den defined Test kombiniert mit der
Lieferung eines passenden Standardwerts.
- Ein void ('undefined')-Wert kann auf eine andere Funktion übergeben
werden als einer ihrer optionale Argumente. Dies ist nützlich, wenn
du eine Wrapper-Funktion schreiben willst, die eine andere Funktion aufruft, unter Erhalt der gleichen Vorgabewerte.
- Funktionen erzeugen immer einen neuen Wert und verändern
nie einen vorhandenen. Das heißt, dass alle Argumente an eine Funktion
als Wert übergeben und nicht als Verweis. Um den Wert einer Variablen
in AviSynth Script-Sprache zu ändern, musst du ihr einen neuen Wert
zuweisen.
- Funktionen können andere Funktionen aufrufen, einschließlich
sichselbst. Letzteres wird als Rekursion bezeichnet und ist eine sehr
nützliche Technik für die Erstellung von Funktionen, die komplexe
Aufgaben erledigen können.
- Lokale Funktionsvariablen maskieren globale mit dem
gleichen Namen innerhalb des Funktionskörpers. Wenn du zum Beispiel in einer Funktion eine lokale Variable meinevar definierst, indem du ihr einen Wert zuweist, dann kannst du die globale meinevar in dieser Funktion nicht mehr lesen.
- Das trifft auch für Argumente zu, da aus der Perspektive einer Funktion Argumente über lokale Variablen initialisiert werden.
Weiterführende Links
- Shared
functions.
Eine ständig wachsende Kollektion von freien Scriptfunktionen, die
durch Mitglieder der AviSynth Community bereitgestellt werden.
$Date: 2008/12/21 09:23:02 $