WriteFile
(clip, string filename, string expression1,
... , string expression16, bool "append", bool "flush")
WriteFileIf
(clip, string filename, string expression1,
... , string expression16, bool "append", bool "flush")
WriteFileStart
(clip, string filename, string expression1,
... , string expression16, bool "append")
WriteFileEnd
(clip, string filename, string expression1,
... , string expression16, bool "append")
WriteFile
arbeitet expressionN ab, konvertiert das Ergebnis in eine Zeichenkette und schreibt das Ergebnis in eine Datei.
Die Laufzeitvariable current_frame wird gesetzt, so
dass man sie in den Ausdrpücken "expression" verwenden kann
(funktioniert so ähnlich wie bei ScriptClip, schau dort in der Doku für
mehr Infos).
current_frame ist auf -1 gesetzt, wenn das Skript geladen wird und auf -2, wenn das Skript geschlossen wird.
WriteFile
wertet die Ausdrücke "expression" aus und generiert eine Ausgabe für jeden Frame, der durch das Filter läuft.
WriteFileIf
ist ähnlich, aber es erzeugt Ausgaben, wenn
der erste Ausdruck wahr ist. In beiden Fällen gibt es keine Ausgabe bei
Öffnung oder Schließung des Scripts. Beachte: weil eine Ausgabe nur für
gerenderte Frames produziert wird, gibt es überhaupt keine Ausgabe,
wenn das Ergebnis des Filters nicht irgendwie für die Erzeugung des
endgültigen Ergebnisses des Skripts verwendet wird (also für einen
Clip).
WriteFileStart
und WriteFileEnd
erzeugen Ausgabe nur beim Scriptöffnen und -schließen bzw. es ist gibt
keine Aktion auf jeden Frame. In beiden Fällen werden die Ausdrücke
"expression" genau ein Mal an der Stelle des Filters im Skript
ausgewertet.
Wenn append = true ist, wird das Ergebnis an eine vorhandene Datei angehängt.
Wenn flush = true ist, wird die Datei geschlossen und wieder
geöffnet nach jeder Operation, so dass man das Ergebnis sofort sehen
kann (das kann langsamer sein).
Für WriteFileStart
und WriteFileEnd
ist flush immer wahr.
Die Vorgabe für append ist immer wahr, außer bei WriteFileStart
(hier ist es false).
dateiname = "c:\myprojects\output.txt"
# erzeugt ein Testvideo, um Frames zu bekommen
Version()
# Der Ausdruck hier ist nur eine Variable, die ausgewertet und in die Datei geschrieben wird
# du bekommst eine Datei mit der Framenumber in jeder Zeile
WriteFile(dateiname, "current_frame")
# Diese Zeile wird geschrieben beim Start (öffnen) des Scripts
WriteFileStart(dateiname, """ "Dies ist der Kopf" """)
# und diese beim Schließen
WriteFileEnd(dateiname, """ "Jetzt wurde das Script geschlossen" """)
Beachte, wie du Dreifach-Anführungsstriche verwendest, um einen String in einem String zu schreiben!
Wenn der Ausdruck nicht abgearbeitet werden kann, wird statt dessen eine Fehlermeldung geschrieben.
Falls das mit dem If-Ausdruck in WriteFileIf
passiert, wird das Ergebnis als true
angenommen.
# wird resultieren in "I don't know what "this" means"
WriteFile(filename, "this is nonsense")
... mit diesem Beispiel kannst du sehen, wie man die Laufzeitfunktionen zusammen mit FrameEvaluate verwendet:
# erzeugt ein Testvideo, um unterschiedliche Frames zu bekommen
Version.FadeIn(50).ConvertToYV12
# Dies schreibt die Framenummer, ein ":" und den durchschnittlichen Lumawert für dieses Frame
colon = ": "
WriteFile("F:\text.log", "current_frame", "colon", "AverageLuma")
Oder vielleicht willst du auch die aktuelle Zeit hinein geschrieben haben:
# erzeugt ein Testvideo, um unterschiedliche Frames zu bekommen
Version.FadeIn(50).ConvertToYV12
# schreibt die Framenummer, die aktuelle Zeit und den durchschnittlichen Lumawert für das Frame
# die Dreifachanführungen sind nötig, um Anführungsstriche in einem String setzen zu können
WriteFile(last, filename, "current_frame", """ time(" %H:%M:%S") """, "AverageLuma")
In WriteFileIf
wird erwartet, dass der ERSTE Ausdruck boolsch ist (true
oder false).
Nur wenn er TRUE ist werden die anderen Ausdrücke abgearbeitet und die Zeile wird geschrieben.
(Zur Erinnerung: && ist AND, || ist OR, == ist EQUAL, != ist NOT EQUAL)
Auf diese Art kann man bestimmte Zeilen in der Datei komplett unterdrücken.
# erzeugt ein Testvideo, um unterschiedliche Frames zu bekommen
Version.FadeIn(50).ConvertToYV12
# schreibt die Framenummer, aber nur für Frames, bei denen AverageLuma zwischen 30 und 60 liegt
WriteFileIf(last, filename, "(AverageLuma>30) && (AverageLuma<60)", "current_frame", """ ":" """, "AverageLuma")
$Date: 2008/12/21 09:23:02 $