AviSynth Syntax - Steuerfunktionen

Diesie erleichtern die Ablaufsteuerung (Laden von Skripten, Argumente überprüfen, globale Einstellungen setzen, usw.).

Apply ruft die Funktion oder den Filter func_string mit den Argumenten  arg1, arg2, ..., argn (so viele, wie übergeben wurden). So bietet es eine Möglichkeit, eine Funktion oder einen Filter beim Namen aufzurufen und Argumenten in der üblichen Weise bereitzustellen wie bei einem typischen Funktionsaufruf.
Folglich ist  Apply("f", x)  äquivalent zu f(x) , was wiederum äquovalent ist mit Eval("f(" + String(x) + ")").
Beispiele:
# hier wird der selbe Aufruf von BicubicResize asgezeigt, wie im Eval() Beispiel 
Apply("BicubicResize", 352, 288)
Eval wertet einen beliebigen Ausdruck aus, als ob er im Skript an der Stelle des Aufrufs von Eval platziert wäre und gibt das Ergebnis der Evaluation zurück (entweder an die Variable, die explizit zugewiesen wurde oder an die letzte Spezialvariable.
Sie können Eval verwenden, um Ausdrücken dynamisch in Ihren Skripts zu konstruieren und auszuwerten, basierend auf variable Eingabedaten. Nachstehend werden einige konkrete Beispiele gezeigt, aber davon bekommst du einen allgemeinen Eindruck.
Beispiele:
# dies ruft BicubicResize(last, 352, 288)
settings = "352, 288"
Eval( "BicubicResize(" + settings + ")" )
...
# dies ergibt Defined(u) == false
u = Eval("#")
...
# Dies inkrementiert eine Globale basierend auf dem Wert einer Variablen
dummy = Eval("global my_counter = my_counter + " + String(increment))
Import wertet den Inhalt eines anderen AviSynth Skripts aus und gibt den importierten Rückgabewert des Skripts zurück. In der Regel wird es dazu verwendet, an das aufrufende Skript Bibliothek Funktionen zur Verfügung stellen, und der Rückgabewert wird nicht verwendet. Dies ist jedoch lediglich eine Konvention, sie ist nicht durch die AviSynth Syntax erzwungen. Siehe auch die speziellen Seiten zu Import unter Interne Filter für andere Einsatzmöglichkeiten.
Mögliche Szenarien (indikative Liste), wo der Rückgabewert von Nutzen sein könnte, ist für das Bibliotheks Skript:
Der Wert könnte dann durch das aufrufende Skript bewertet werden um zu entscheiden, was als nächstes zu tun ist.
Beispiele:
Import("meinelib.avsi")  # Hier ist uns der Wert egal (meinelib.avsi enthält nur Funktionen)
...
okflag = Import("mysources.avsi") # mysources lädt vorbestimmte Dateinamen aus einem Ordner in Globals
source = okflag ? global1 + global2 + global3 : BlankClip()
Gibt das Element zurück, das durchs index Argument angegeben wurde, das vom Typ int sein muss (0 gibt Element0, 1 gibt Element1, ..., usw.). Items (Elemente) können beliebige Script Variablen sein oder ein Ausdruck eines beliebigen Typs und das kann sogar gemischt werden.
Beispiele:
# wählt eine Pinselspitze aus einem Satz von Presets
idx = 2
brush = Select(idx, \
AviSource("round.avi"), \
rectangle, \
diagonal, \
diagonal.FlipHorizontal)
Liefert x wenn Defined(x) wahr ist, andernfalls d. x muss entweder das Argument einer Funktion sein oder eine bereits deklarierte Skriptvariable (dh eine Variable, der bereits einen Wert zugewiesen wurde), sonst tritt ein Fehler auf.
Beispiele:
function myfunc(clip c, ..., int "strength") {
...
strength = Default(strength, 4) # wenn der Wert nicht geliefert wird, setze ihn auf 4
...
}
Tut nichts, wenn die Bedingung condition wahr ist (true); hingegen wird ein Fehler ausgelöst und die Ausführung des Skripts wird sofort beendet, wenn condition  false ist. Im letzteren Fall wird err_msg dem Benutzer präsentiert, falls sie angegeben wurde. Andernfalls erscheint die Standard-Meldung "Assert: assertion failed".
Beispiele:
function myfunc(clip c, ..., int "strength") {
...
strength = Default(strength, 4) # wenn der Wert nicht geliefert wird, setze ihn auf 4
Assert(strength > 0, "'strength' muss positiv sein")
...
}
Dies ist eine no-operation Funktion die vor allem für die bedingte Ausführung ohne Rückgabewert zur Verfügung gestellt wurde, wie Import, wenn keine "else"-Bedingung gewünscht wird. Folglich verwendest du sie dann, wenn die AviSynth Syntax einer Operation erfordert (z. B. mit dem:? Operator), aber dein Skript keine Funktion braucht.
Rückgabewert: 0 (int type).
Beispiele:
preset = want_presets ? AviSource("c:\presets\any.avi") : NOP
...
loadlib ? Import("my_useful_functions.avs") : NOP
Legt die maximale Speichermenge (in MB) fest, die AviSynth für seine internen Video Frame-Cache verwendet. Von v2.5.8 ab, gibt eine Einstellung auf Null nur den aktuellen Speicher-Max-Wert zurück. In der 2.5-Serie beträgt der Standard Max-Speicher-Wert  25% des freien physischen Speichers, mit einem Minimum von 16 MB.
Von rev 2.5.8 RC4 an, ist der standard Max-Speicher ebenfalls auf 512 MB begrenzt.
Frei <64 128 256 512 1024 2048 3072
Default Max Wer v2.57 und älter 16 32 64 128 256 512 768
Default Max seit v2.58 RC4 16 32 64 128 256 512 512
In einigen Versionen gibt es eine Standardeinstellung von 5 MB, was recht wenig ist. Falls Probleme auftreten (z. B. langsame Berechnungen) solltest du versuchen, diese Werte auf mindestens 32MB einzustellen. Zu hohe Werte können zu Abstürzen aufgrund der 2GB Adressraum Grenze führen.
Rückgabewert: aktueller MemoryMax Wert.
Beispiele:
SetMemoryMax(128)
Setzt das Standard-Verzeichnis für AviSynth, auf das path Argument.
Dies ist vor allem fürs einfache Laden von Source-Clips,  Import-Scripts, usw gedacht. Es hat keinen Einfluss auf das Plugin Autoloading.
Rückgabewert ist 0, wenn erfolgreich, andernfalls -1.
Beispiele:
SetWorkingDir("c:\meine_presets")
AviSource("border_mask.avi") # die lädt c:\meine_presets\border_mask.avi
Setzt einen Ausrichtungsmodus für planare Frames. mode kann entweder wahr oder falsch sein.
Einige ältere Plugins übernehmen illegal das Layout der Video-Frames im Speicher. Diese speziellen Filter erzwingt ein Speicher-Layout von planaren Frames, das kompatibel ist mit früheren Versionen von AviSynth. Der Filter arbeitet mit dem GetFrame()-Aufruf-Stack, so dass er sich auf Filter auswirkt, die vor seiner Position im Skript liegen.
Beispiele:
Beispiel : Verwende eine ältere Version von Mpeg2Source() (1.10 oder älter):

LoadPlugin("...\Mpeg2Decode.dll")
Mpeg2Source("test.d2v") # Ein Plugin, dass illegal die Speicherauslegung annimmt
SetPlanarLegacyAlignment(true) # Setz den Speicherbedarf für die vorhergehenden Anweisungen
ConvertToYUY2() # Anweisungen bis zum Ende des Skripts haben erhöhten Speicherbedarf.
Diese Option aktiviert WAVE_FORMAT_IEEE_FLOAT Audio Output. Die Standardeinstellung ist, FloatAudio auf 16 bit zu konvertieren.
Dies Option aktviviert WAVE_FORMAT_EXTENSIBLE Audio Output. Der Standardwert ist WAVE_FORMAT_EX.
Hinweis: Die Standard DirectShow-Komponente für . AVS-Dateien, "AVI/WAV File Source" implementiert nicht korrekt die Verarbeitung von WAVE_FORMAT_EXTENSIBLE, daher können viele Anwendungen die Audio-Spur nicht erkennen. Es gibt von anderen Anbietern  DirectShow Reader, die Arbeit richtig tun. Intermediate Arbeitsdateien, die mit der AVIFile Schnittstelle geschrieben wurden für eine spätere DirectShow Verarbeitung funktionieren einwandfrei, wenn sie die DirectShow "File Source (async)"-Komponente oder etwas Gleichwertiges verwenden.

Zurück zu Interne Functionen.

$Date: 2008/12/21 21:42:29 $