ConditionalReader

ConditionalReader(clip clip, string filename, string variablename [, bool show])

ConditionalReader erlaubt es Informationen aus einer Datei auszulesen, um eine Variable mit unterschiedlichen Werte für jeden Frame oder für einen bestimmten Bereich zu erhalten.

Parameter:
clipDer Quell Clip. Dieses wird nicht verändert, es sei denn man setzt show=true.
filenameHier gibt den Dateipfad zu der Variablendatei, die man setzen will.
variablenameDer Name der Variable, die die importierten Einstellungen enthalten soll.
showBei diesem optionalen Parameter wird bei true der übergebene Wert im Frame eingeblendet. Standard ist false.

Dateiformat:
Die Datei ist eine einfache Textdatei. Als Separator reicht ein einfaches Leerzeichen und eine neue Zeile zeigt einen neuen Datensatz an. Es wird nicht auf Groß-/Kleinschreibung geachtet.

Parameter:
TYPE <int|float|bool>Man kann pro Datei nur einen Typ an Daten definieren. Man sollte den Typ immer am Anfang definieren, weil ConditionalReader erst nach dem Typ sucht und dann erst die Daten ab da liest. Man kann den Typ nicht zwischendurch wechseln.
Die Typen können float, int oder bool sein:
intIst eine ganze Zahl und kann wahlweise auch ein Vorzeichen enthalten.
floatIst eine Dezimalzahl, die einen Dezimalpunkt enthält. Wahlweise auch ein Vorzeichen oder gefolgt vom e oder E Buchstaben und einer Dezimalzahl. Gültige Werte sind z.B. -732.103 oder 7.12e4.
boolKann entweder true (wahr) oder false (falsch) sein.
DEFAULT <Wert>Gibt einen Standardwert für alle Frames an. Diesen sollte man direkt nach der Definition von Type setzen, da er die Werte für alle Frames überschreibt. Man kann den Standardwert auch nicht setzen, muss dann aber auch wirklich für alle Frames eine Wert so setzen, da es sonst zu unerwarteten Ergebnissen kommt.
<Framenummer> <Wert>Dies setzt den Wert nur für den Frame Framenummer.
R <Erster Frame> <Letzter Frame> <Wert>Dies wendet den Wert auf einen Bereich an Frames an. Sowohl der Startframe als auch der letzte Frame sind im Frame-Bereich enthalten.
I <Erster Frame> <Letzter Frame> <Startwert> <Stopwert>Dies interpoliert zwischen den beiden Werte über den angegebenen Bereich an Frames. Dies funktioniert nur für int und float Werte. Sowohl der Startframe als auch der letzte Frame sind im Frame-Bereich enthalten.

Beispiele:
Datei.txt:
Type float
Default 3.45567
R 45 300 76.5654
2 -671.454
72 -671.454
Diese Datei liefert Gleitkommazahlen als Werte. Standardmäßig ist der Werte 3.45567. Von Frame 45 bis 300 ist der Wert aber 76.5654. Und der Wert von Frame 2 und 72 ist -671.454.
Wie man sieht, überschreiben spätere Änderungen die Einstellungen davor. Dies sieht man gut am Frame 72: obwohl der Frame innerhalb des Bereiches 45-300 ist, wird der Wert später geändert. Würde man zuerst den Frame und dann den Bereich spezifisieren, würde der Wert von -671.454 auf 76.5654 geändert werden.
ColorBars(512,512)
Trim(0,500)
ScriptClip("Subtitle(String(MeineVar))")
ConditionalReader("Datei.txt","MeineVar",false)
Hier ein Skript, dass die obigen Datei nutzen würde.
Hier wird der Wert in die Variable "MeineVar" importiert, welche von Subtitle - aufgerufen von ScriptClip wegen dem bedingten Wert - angezeigt wird.

AviSynth Skript:
ColorBars(512,256)
a1 = Trim(0,600)
a2 = MessageClip("Text Clip")
Overlay(a1,a2,y=100,x=110,mode="Subtract",opacity=0,pc_range=true)
ConditionalReader("opacity.txt","ol_opacity_offset",false)
ConditionalReader("xoffset.txt","ol_x_offset",false)
An sich werden nur Schlüsselframes für x-offset und opacity definiert. Bei Frame 25->50 wird die Transparenz von 0.0 bis 1.0 skaliert, während sich der Text von links nach rechts bewegt. Dann bleibt der Text stehen von Frame 50 bis 250 und wandert dann weiter nach rechts und wird dabei ausgeblendet.
Es ist einfacher, sich den Clip anzusehen, als ihn zu beschreiben ;-)
xoffset.txt:
Type int
Default -50
I 25 50 -50 100
R 50 250 100
I 250 275 100 250
 
opacity.txt:
Type float
Default 0.0
I 25 50 0.0 1.0
R 50 250 1.0
I 250 275 1.0 0.0
 

Changelog:
v2.54Erstes Release