ASSCalc: Unterschied zwischen den Versionen
Zeile 1: | Zeile 1: | ||
+ | ==Geschichte== | ||
+ | ASSCalc wurde von Hajo Krabbenhoeft alias Tentacle im Jahr 2003 für seine eigenen Effecte geschrieben. 2004 wurde diese Version als Public-Release auf seiner Webseite [[http://www.tentacleworks.net/]http://www.tentacleworks.net/] veröffentlicht, wo man sie heute noch downloaden kann. Dort findet man auch genug Beispielscripte, mit denen sich fast alle Anwendungen abdecken lassen. Da zu dieser Zeit noch kein Aegisub in Aussicht war und es zu der Zeit das gängige Format war, wurde das Program auf ANSI Scripte ausgelegt, was bedeutet, dass die Kanjis, welche in UTF8 vorhanden sind, in SHIFT-J gewandelt werden müssen, was oft zu Problemen führt, da Shift-J Zeichen auch }{ enthalten dürfen. Diese werden dann von ASSCalc falsch interpretiert und es bricht den Prozess ab. Dieses Problem wurde erst im September 2011 behoben, als Tentacle die UTF8 Version als beta heraus gab. Diese gibt es aktuell nur per Mail, da sie noch nicht getestet wurde. Seit der neuen Version existiert ein GITHub, wo der Sourcecode von ASSCalc eingesehen und zur Weiterentwicklung benutzt werden kann, da Tentacle so gut wie keine Zeit mehr dafür findet. | ||
+ | |||
+ | ==Arbeitsweise von ASSCalc== | ||
+ | |||
+ | ===Das Layerprinzip=== | ||
+ | ASSCalc arbeitet in einem Effekt Layer Prinzip, das heißt es werden Effekt Layer erzeugt, die auf einen Style zugreifen, und diesen dann in einer gewissen Art und Weise berechnen. Es gibt pro Effekt Layer oder auch P-Layer zwei Dateien, welche ein Namensformat haben müssen, damit der Layer angesprochen wird. Beide müssen den gleichen Style ansprechen und die gleiche Nummer haben. ASSCalc fängt immer bei NULL an zu zählen, also ist die erste P-Layernummer p0. | ||
+ | |||
+ | Im Vergleich zu anderen Tools, wo vorher ein Cache alle möglichen Daten gebildet wird und auf diese Daten dann zugegriffen wird, liest ASSCalc das Grundscript Line für Line und checkt, ob es einen vorhandene P-Layer mit dem Style für die Line gibt. Ist dies erfüllt wird der Layer direkt ausgeführt. Es können auch mehrere FX Layer auf den gleichen Style zugreifen. Wichtig ist hierbei zu wissen, dass die ganze Line pro FX-Layer ausgeführt wird und dann die gleiche Line nochmal für den anderen Layer usw. Sprich ein Layer wird pro Line immer komplett abgearbeitet und dann wird der erst der nächste ausgeführt. | ||
+ | |||
+ | Da ASSCalc sozusagen "live" berechnet und nur Zahlen im Speicher haben kann, muss Text direkt ausgegeben werden. Am Ende ist es also egal ob man eine ASS Datei erzeugt oder irgend einen Text ausgeben möchte, da man grundsätzlich nur Text und Variablen kombiniert. Dieses Prinzip kennt man von Templater oder Typetool. Der Unterschied zu Templater besteht vor allem darin, dass man in der Textansicht einer ASS Datei arbeitet, während man bei Templater schön mit einer Aegisubbenutzeroberflöche arbeiten kann und man nicht so viel Zugriff auf die anordnung im Grundscript hat, da dies von Aegisub übernommen wird. | ||
+ | |||
+ | Um ASSCalc richtig zu verstehen muss man im Zyklus denken, wenn man sich auf Fehlersuche begibt. Stellt es euch so vor, wie wenn Calc erstmal alle Abläufe hintereinander kopiert und sie dann ausführt. Sprich eine Variable die im ersten Durchlauf im Header gesetzt wird und im Normalen Layer umgeschrieben wird, ist im zweiten durchlauf immer noch so, wie sie umgeschrieben wurde, da das nächste mal der Header erst für die nächste Line ausgeführt wird. Das Programm läuft sozusagen in einer über einen ''Flag'' gesteurten Schleife. | ||
+ | |||
+ | ===Die Headerdatei=== | ||
+ | Die p0h-Datei ließt den Header einer Line aus und besteht immer aus den 3 Komponenten ''Stylelock'' (zuweisung des Styles, welchen er suchen soll), ''Fontmatch'' (Automatisch vom Style oder Direktauswahl) und dem ''Flag'' (Berechnungsart des Layers). Wie oben schon erwähnt wird die Header Datei nur einmal pro Line (pro Layer) ausgeführt. In dieser kann auch noch nicht auf die interne Variablen zugegriffen werden, wie die Linebreite und Höhe in Pixeln oder Farben etc. | ||
+ | |||
+ | Der sogenannte ''Flag'' gibt an, wie der P0-Layer für die Line ausgeführt wird. Es gibt 5 Berechnungsarten, von denen aber nur 3 relevant sind. | ||
+ | |||
+ | * ''Skipspace'' bedeutet, dass p0 für jedes \k ausgeführt wird, der vorhandene Text in der Text Variable ist also die ganze Silbe. Leerzeichen werden raus gelöscht, sprich auch getimete Pausen, welche keinen Text beinhalten, werden nicht berechnet, um Scriptplatz zu sparen und eine bessere Performance zu erreichen. | ||
+ | |||
+ | * Charwise hingegen führt die p0 Datei für jedes Zeichen aus, auch Leerzeichen! Die Scriptgröße wird natürlich viel größer, da der Effekt pro Zeichen geschrieben werden muss. Der vorhandene Text ist das jeweilige Zeichen. | ||
+ | |||
+ | * Doublecharwise behandelt zwei Zeichen als eins. Dies wird für Shift-J Karaoke benötigt, da dort ein Kanji mit zwei ANSI Zeichen beschrieben wird. | ||
+ | |||
+ | ===Die Hauptdatei=== | ||
+ | die p0-Datei besteht mindestens aus einem Komponenten, dem ''Stylelock'', oder kann auch bei speziellen Anwendungen weg gelassen werden. Wichtig ist hierbei nochmal zu erwähnen dass der ''Stylelock'' zwingend aus den gleichen Style zugreifen muss, wie die Headerdatei. | ||
+ | |||
+ | In einem P0-Layer, welche nun anhand des ''Flags'' pro Silbe oder pro Zeichen ausgeführt wird, können nun wiederum andere Dateien n mal eingefügt werden, bzw. geloopt werden. Das bedeutet man kann unendlich oft eine Effektabfolge pro Zeichen/Silbe ausgeben und davon auch unendlich viele verschiedene. Grundsätzlich gibt es, wie in anderen Sprachen vorhanden keine if-else oder sonstige Abfragen. Calc arbeitet eher wie ein Batch Script aus der guten alten DOS Zeit, sprich an einer gewissen Stelle im Code ist es möglich PRO Datei festzulegen ob der nachfolgende Code ausgeführt wird oder nicht, es kann aber nicht in einer Datei, wie bei Batch möglich, gesprungen werden. Zusätzlich können NUR Gleitkommazahlen verwendet werden (0.2;1.7;30), keine Strings oder sonstiges. Schleifen sind auf eine Einzelschleife und eine Multidimensionale (Breite X Höhe) beschränkt und können nur externe *.txt Dateien loopen. Dies aber so oft man will. | ||
+ | |||
+ | ===Script für die Berechnung vorbereiten=== | ||
+ | Um mit ASSCalc zu arbeiten, sollte man ein Script vorbereiten mit den Auflösungseinstellungen für das größt mögliche Video, z.B. FullHD | ||
+ | |||
+ | |||
+ | ==Ein Script berechnen== | ||
+ | |||
+ | ===Originaltext von Tentacle=== | ||
+ | |||
to test out one of those sample effects: | to test out one of those sample effects: | ||
Zeile 13: | Zeile 51: | ||
drag the .ass script on the shortcut | drag the .ass script on the shortcut | ||
− | (directly on the exe wont work!) | + | (directly on the exe wont work!) ''(Comment: auf Windows 7 geht es ohne Probleme)'' |
Zeile 28: | Zeile 66: | ||
i'd suggest you to look at the sample source | i'd suggest you to look at the sample source | ||
− | + | ===Deutsche Wikibeschreibung=== | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Version vom 22. Juli 2012, 14:55 Uhr
Inhaltsverzeichnis
Geschichte
ASSCalc wurde von Hajo Krabbenhoeft alias Tentacle im Jahr 2003 für seine eigenen Effecte geschrieben. 2004 wurde diese Version als Public-Release auf seiner Webseite [[1]http://www.tentacleworks.net/] veröffentlicht, wo man sie heute noch downloaden kann. Dort findet man auch genug Beispielscripte, mit denen sich fast alle Anwendungen abdecken lassen. Da zu dieser Zeit noch kein Aegisub in Aussicht war und es zu der Zeit das gängige Format war, wurde das Program auf ANSI Scripte ausgelegt, was bedeutet, dass die Kanjis, welche in UTF8 vorhanden sind, in SHIFT-J gewandelt werden müssen, was oft zu Problemen führt, da Shift-J Zeichen auch }{ enthalten dürfen. Diese werden dann von ASSCalc falsch interpretiert und es bricht den Prozess ab. Dieses Problem wurde erst im September 2011 behoben, als Tentacle die UTF8 Version als beta heraus gab. Diese gibt es aktuell nur per Mail, da sie noch nicht getestet wurde. Seit der neuen Version existiert ein GITHub, wo der Sourcecode von ASSCalc eingesehen und zur Weiterentwicklung benutzt werden kann, da Tentacle so gut wie keine Zeit mehr dafür findet.
Arbeitsweise von ASSCalc
Das Layerprinzip
ASSCalc arbeitet in einem Effekt Layer Prinzip, das heißt es werden Effekt Layer erzeugt, die auf einen Style zugreifen, und diesen dann in einer gewissen Art und Weise berechnen. Es gibt pro Effekt Layer oder auch P-Layer zwei Dateien, welche ein Namensformat haben müssen, damit der Layer angesprochen wird. Beide müssen den gleichen Style ansprechen und die gleiche Nummer haben. ASSCalc fängt immer bei NULL an zu zählen, also ist die erste P-Layernummer p0.
Im Vergleich zu anderen Tools, wo vorher ein Cache alle möglichen Daten gebildet wird und auf diese Daten dann zugegriffen wird, liest ASSCalc das Grundscript Line für Line und checkt, ob es einen vorhandene P-Layer mit dem Style für die Line gibt. Ist dies erfüllt wird der Layer direkt ausgeführt. Es können auch mehrere FX Layer auf den gleichen Style zugreifen. Wichtig ist hierbei zu wissen, dass die ganze Line pro FX-Layer ausgeführt wird und dann die gleiche Line nochmal für den anderen Layer usw. Sprich ein Layer wird pro Line immer komplett abgearbeitet und dann wird der erst der nächste ausgeführt.
Da ASSCalc sozusagen "live" berechnet und nur Zahlen im Speicher haben kann, muss Text direkt ausgegeben werden. Am Ende ist es also egal ob man eine ASS Datei erzeugt oder irgend einen Text ausgeben möchte, da man grundsätzlich nur Text und Variablen kombiniert. Dieses Prinzip kennt man von Templater oder Typetool. Der Unterschied zu Templater besteht vor allem darin, dass man in der Textansicht einer ASS Datei arbeitet, während man bei Templater schön mit einer Aegisubbenutzeroberflöche arbeiten kann und man nicht so viel Zugriff auf die anordnung im Grundscript hat, da dies von Aegisub übernommen wird.
Um ASSCalc richtig zu verstehen muss man im Zyklus denken, wenn man sich auf Fehlersuche begibt. Stellt es euch so vor, wie wenn Calc erstmal alle Abläufe hintereinander kopiert und sie dann ausführt. Sprich eine Variable die im ersten Durchlauf im Header gesetzt wird und im Normalen Layer umgeschrieben wird, ist im zweiten durchlauf immer noch so, wie sie umgeschrieben wurde, da das nächste mal der Header erst für die nächste Line ausgeführt wird. Das Programm läuft sozusagen in einer über einen Flag gesteurten Schleife.
Die Headerdatei
Die p0h-Datei ließt den Header einer Line aus und besteht immer aus den 3 Komponenten Stylelock (zuweisung des Styles, welchen er suchen soll), Fontmatch (Automatisch vom Style oder Direktauswahl) und dem Flag (Berechnungsart des Layers). Wie oben schon erwähnt wird die Header Datei nur einmal pro Line (pro Layer) ausgeführt. In dieser kann auch noch nicht auf die interne Variablen zugegriffen werden, wie die Linebreite und Höhe in Pixeln oder Farben etc.
Der sogenannte Flag gibt an, wie der P0-Layer für die Line ausgeführt wird. Es gibt 5 Berechnungsarten, von denen aber nur 3 relevant sind.
- Skipspace bedeutet, dass p0 für jedes \k ausgeführt wird, der vorhandene Text in der Text Variable ist also die ganze Silbe. Leerzeichen werden raus gelöscht, sprich auch getimete Pausen, welche keinen Text beinhalten, werden nicht berechnet, um Scriptplatz zu sparen und eine bessere Performance zu erreichen.
- Charwise hingegen führt die p0 Datei für jedes Zeichen aus, auch Leerzeichen! Die Scriptgröße wird natürlich viel größer, da der Effekt pro Zeichen geschrieben werden muss. Der vorhandene Text ist das jeweilige Zeichen.
- Doublecharwise behandelt zwei Zeichen als eins. Dies wird für Shift-J Karaoke benötigt, da dort ein Kanji mit zwei ANSI Zeichen beschrieben wird.
Die Hauptdatei
die p0-Datei besteht mindestens aus einem Komponenten, dem Stylelock, oder kann auch bei speziellen Anwendungen weg gelassen werden. Wichtig ist hierbei nochmal zu erwähnen dass der Stylelock zwingend aus den gleichen Style zugreifen muss, wie die Headerdatei.
In einem P0-Layer, welche nun anhand des Flags pro Silbe oder pro Zeichen ausgeführt wird, können nun wiederum andere Dateien n mal eingefügt werden, bzw. geloopt werden. Das bedeutet man kann unendlich oft eine Effektabfolge pro Zeichen/Silbe ausgeben und davon auch unendlich viele verschiedene. Grundsätzlich gibt es, wie in anderen Sprachen vorhanden keine if-else oder sonstige Abfragen. Calc arbeitet eher wie ein Batch Script aus der guten alten DOS Zeit, sprich an einer gewissen Stelle im Code ist es möglich PRO Datei festzulegen ob der nachfolgende Code ausgeführt wird oder nicht, es kann aber nicht in einer Datei, wie bei Batch möglich, gesprungen werden. Zusätzlich können NUR Gleitkommazahlen verwendet werden (0.2;1.7;30), keine Strings oder sonstiges. Schleifen sind auf eine Einzelschleife und eine Multidimensionale (Breite X Höhe) beschränkt und können nur externe *.txt Dateien loopen. Dies aber so oft man will.
Script für die Berechnung vorbereiten
Um mit ASSCalc zu arbeiten, sollte man ein Script vorbereiten mit den Auflösungseinstellungen für das größt mögliche Video, z.B. FullHD
Ein Script berechnen
Originaltext von Tentacle
to test out one of those sample effects:
create a new folder
put the p*.txt files for the effect in
create a shortcut for the exe
set the working path of the shortcut to the folder where you put the p*.txt files
drag the .ass script on the shortcut
(directly on the exe wont work!) (Comment: auf Windows 7 geht es ohne Probleme)
it should draw a lot of stuff, some ....... and then say done
then you have a out.ass which contains the effect
BIG FILES: edit your shortcut to read asscalc.exe split That’ll create out_000.ass, out_001.ass, ...
coding your own scripts:
i'd suggest you to look at the sample source