AviSynth - geeignet für Bildbearbeitung?

  • Auf der Seite "AviSynth-Scripte" habe ich jetzt auch noch eine sinnvolle Auswahl für Schriftarten hinzugefügt. Zur Auswahl stehen: Courier, Courier New, Lucida Console und Raize. Raize ist in der Installationsroutine enthalten, wird aber nicht auf dem System installiert, sondern wird beim Programmstart automatisch geladen und bei Programmende automatisch entladen.

  • Das Hinzufügen der Dateinamenserweiterung "_<Breite>x<Höhe>" kann jetzt durch einen Schalter ("Suffix") verhindert werden. Vorher ging das nur über einen regulären Ausdruck (womit man sich allerdings um weitere Ersetzungsmöglichkeiten gebracht hat).

    Wenn man den Schalter deaktiviert, dann trägt die Ausgabedatei den gleichen Namen, wie die Eingabedatei. Wenn eine Datei bereits existiert, dann erscheint nun auch ein Dialog, ob die Datei überschrieben werden soll oder nicht. Man kann auch "Alle Nein" und "Alle Ja" auswählen.

    Durch Suchen und Ersetzen kann man wie gewohnt - auch unter Benutzung regulärer Ausdrücke - einen vorhandenen Dateinamen entsprechend anpassen.

  • Ich habe die mitunter sehr rechenintensiven AviSynth-Prozesse jetzt als Threads implementiert. Während der Stapelverarbeitung friert nun die Programmoberfläche nicht mehr ein (nicht zu verwechseln mit dem Umstand, dass während einer AviSynth-Filterung sowieso keine Eingaben, außer dem Stopp-Befehl, möglich sind).

    Das Programm verhält sich nun auch wesentlich dezenter, wenn niedrige Prozesspriorität (d. i. die Standardeinstellung) ausgewählt ist.

    Wenn man dem Programm mitgeteilt hat, dass man die Stapelverarbeitung beenden will (man kann das aber auch wieder rückgängig machen), dann wird ein gerade ausgeführter AviSynth-Prozess noch zu Ende geführt.

  • Ein kleines Weihnachtsupdate. :santa:

    Mit der neuesten Version von Immaavs (Plugin zum Laden und Speichern von zusätzlichen Grafikformaten) sind auch ein paar neue Formate hinzugekommen: PDF (Portable Document Format), EPS (Adobe Encapsulated PostScript) und PS (Adobe PostScript File). JPC (JPEG 2000 Code Stream) habe ich der Vollständigkeit halber auch noch hinzugefügt. Die Speicherprobleme beim Laden von Bildern mit ImmaRead scheinen behoben zu sein. Die meisten der von Immaavs benötigten DLLs habe ich jetzt in einem Unterverzeichnis untergebracht. Wenn man Immaavs zum Laden und Speichern von Bildern verwenden will, dann muss die Umgebungsvariable nun wie folgt gesetzt werden:

    Zitat

    MAGICK_HOME = <Fritz-Photo-Programmverzeichnis>\dll\ImageMagick

    Insgesamt wurden folgende Plugins aktualisiert: FFmpegSource2, GScript, Immaavs und dfttest.

  • Da der Grafikchip meines alten Notebooks hinüber ist, habe ich mir ein neues Notebook zugelegt. Eigentlich wollte ich wieder eine Auflösung von 1280x800 haben, habe mich dann aber doch für eine Auflösung von 1680x1050 - "gequetscht" auf 15, 4 Zoll - entschieden. Die niedrigere Auflösung erschien mir im Vergleich zur höheren Auflösung dann doch zu grobkörnig. Bilder hinterlassen aufgrund der höheren Pixeldichte einfach einen besseren Eindruck. Wegen der etwas kleinen Schriften, kommt man um eine DPI-Skalierung unter Windows 7 allerdings nicht herum. Ob das die richtige Entscheidung war? :huh:

    Da das Notebook auch als Desktopersatz herhalten muss, werde ich die meiste Zeit sowieso mit einem externen Monitor arbeiten. Das mildert das neuronale Problem in mir dann doch beträchtlich. :lol:

    Habe das Projekt jetzt also unter Windows 7 (32 Bit) am Laufen. Bezüglich der DPI-Skalierung scheint es jedenfalls keine größeren Probleme zu geben.

  • Ein paar Unsauberkeiten sind mir bei der DPI-Skalierung dann doch noch aufgefallen. Diese habe ich beseitigt.

    Ansonsten lasse ich das Programm mal weiter vor sich hin gären. Ich brauche erstmal einen einigermaßen vernünftigen externen Monitor. :motz:

  • Bis jetzt konnte man einen Vorher-Nachher-Vergleich immer nur von einem einzigen Filter machen, aber nicht über mehre Filter hinweg. Einzige Ausnahme war hier der Vorher-Nachher-Vergleich der gesamten Verarbeitungskette.

    Ich habe den Vorschaufenstern jetzt Kontextmenüs hinzugefügt, so dass es nun möglich ist, ein Vorschaufenster auch individuell zu aktualisieren (einfach rechte Maustaste drücken und auf "Aktualisieren" klicken).

  • Das und viele andere Dinge soll eben der Skriptinspektor richten – so jedenfalls meine Idee.

    Beispielsweise kann man jetzt schon einen oder mehrere Parameter "unsichtbar" machen, so dass man diesen bzw. diese nicht mehr im Skriptinspektor sieht. Man fügt einfach einen Kommentar mit dem Schlüsselwort %%ScriptInspectorIgnore%% hinter dem Parameter hinzu und schon taucht die Frage auf, "Wo ist Behle?" :lol:

    Beispiel: Der Parameter "denoise" im Skript "SuperSlowSharpen" soll im Skriptinspektor nicht mehr erscheinen.

    Code
    denoise  = 0 # %%ScriptInspectorIgnore%%

    Jetzt könnte man natürlich auch hergehen und verschiedene Levels kreieren, z. B.: Anfänger, Amateur und Profi. Ein Anfänger sieht nur die einfachsten Parameter, der Amateur schon ein wenig mehr und der Profi eben alle Parameter. Im Skript könnte man das ebenfalls durch entsprechende Schlüsselwörter steuern. Im Programm bräuchte man dann nur noch zwischen diesen Levels umschalten.

    Auch die Informationen für die Tooltips könnte man im Skript hinterlegen.

    Besser wird es sein, diese zusätzlichen Optionen für einen Parameter in einem extra Abschnitt, vorzugsweise am Ende eines Skripts, zu hinterlegen.

    Auch ein Abspeichern der Parameter (als Vorlage) in eine INI-Datei wäre denkbar.

    Einmal editiert, zuletzt von Archimedes1 (23. April 2010 um 14:31)

  • Bin gerade am Experimentieren mit den Tooltips. Ich denke, im Skript sind die Informationen dann doch am Besten aufgehoben – so hat man auch bei der Skriptbearbeitung etwas davon.

    Im einfachsten Fall sehen diese Informationen (für den Skriptinspektor) wie folgt aus (Beispiel "Rotate"):

    Code
    # ==============================================================================# http://avisynth.org.ru/rotate/rotate.html# ==============================================================================angle  = 1.0width  = 0height = 0color  = 0# ==============================================================================# angle  = Rotation angle in degrees clock wise# width  = Width of the destination output image# height = Height of the destination output image# color  = Background color# ==============================================================================LoadPlugin("plugins\Rotate\Rotate.dll")Import("lib\FritzPhoto\FritzPhoto.avs")isYV12() ? YV12toRGB32() : lastRotate(angle, width, height, color)

    Tja, und wenn man schon dabei ist, dem Skriptinspektor etwas mitzuteilen, dann vielleicht auch die Information, ob ein Parameter nur bestimmte (diskrete) Werte annehmen kann. Hier bietet sich nämlich eine Auswahlliste an.

    Die Informationen sehen in diesem Fall wie folgt aus (Beispiel: "MSUCartoonizerFilledSegments"):

    Für Boolesche Werte erzeugt der Skriptinspektor automatisch eine Auswahlliste.

    Darüber hinaus habe ich auch eine einfache Eingabeüberprüfung integriert. Je nach zugrunde liegendem AviSynth-Typ ("bool", "float", "int" oder "string") – der Skriptinspektor erkennt diesen automatisch – sind bei der Eingabe nur bestimmte Zeichen zulässig.

    3 Mal editiert, zuletzt von Archimedes1 (29. April 2010 um 22:31)

  • Mit der Einführung des Skriptinspektors ist nun endlich das Skript "FritzPhotoResize" überflüssig geworden. Die entsprechenden Komponenten im Programm habe ich bereits entfernt. Auch die INI-Datei (das Programm kann auch ohne, dann aber nur JPG) ist jetzt wieder um einiges übersichtlicher geworden.

    Da alle Parameter jetzt ausschließlich unter "AviSynth-Skripte" bearbeitet werden, befindet sich die Vorschau jetzt direkt dahinter (und nicht mehr hinter Einstellungen).

    Dem Skriptinspektor habe ich eine einfache Eingabeüberprüfung hinzugefügt. Bei Ganzzahlen lassen sich nur Ziffern, bei Gleitpunktzahlen nur Ziffern und der Punkt eingeben usw. Liegt eine Ganzahl vor und es wird nichts eingegeben (leeres Feld), dann macht der Skriptinspektor daraus automatisch eine 0 (im Skript). Im Falle einer Gleitpunktzahl wird aus einem leeren Feld automatisch eine 0.0. Gibt man bei einer Gleitpunktzahl nur eine Ganzzahl ein, wird automatisch ein Punkt und eine Null hinzugefügt. Auf diese Weise kann ein im Skript definierter AviSynth-Typ (aus Versehen) nicht mit dem Skriptinspektor geändert werden.

    Dann ist da noch diese Sache mit den Tooltips. Ich habe das jetzt so umgesetzt, wie in der vorherigen Nachricht beschrieben.

    Einen einfachen Tooltip erstellt man wie folgt:

    Code
    # ==============================================================================# http://forum.doom9.org/showthread.php?t=100626# ==============================================================================weight = 1.0# ==============================================================================# weight = Defines how much influence the previous filter should have# ==============================================================================

    Auf diese Weise erscheint ein Tooltip beim Parameter und beim Wert.

    Will man getrennte Tooltips für Parameter und Wert, so geht man folgendermaßen vor:

    Code
    # ==============================================================================# http://forum.doom9.org/showthread.php?t=100626# ==============================================================================weight = 1.0# ==============================================================================# weight =  Defines how much influence the previous filter should have | [0.0, 1.0]# ==============================================================================

    Jetzt erscheint beim Parameter der Text "Defines how much influence the previous filter should have" und beim Wert "[0.0, 1.0]".

    Weiteres Szenario: Auswahllisten. Sind für einen bestimmten AviSynth-Typ nur bestimmte Werte zulässig, so kann man eine Auswahlliste erzeugen, und zwar wie folgt:

    Code
    # ==============================================================================
    # http://forum.doom9.org/showthread.php?p=1045226
    # ==============================================================================
    field = 0
    # ==============================================================================
    # field = PickList, False, {0, 1}
    # ==============================================================================

    Im Skriptinspektor erscheint nun eine Auswahlliste ("PickList") mit den Ziffern 0 und 1. Der Boolesche Wert "False" sorgt dafür, dass die Auswahlliste editierbar ist (manchmal will man nicht lange in einer Liste suchen, und den Wert direkt eingeben).

    Die Vorlagen habe ich bereits entsprechend abgeändert. Überall wo diskrete Werte vorkommen, zeigt der Skriptinspektor jetzt eine Auswahlliste an. Mit den Texten für die Tooltips werde ich noch ein bisschen warten – schließlich müssen bzw. sollten die auch übersetzt werden. :motz:

    Das Update werde ich demnächst hochladen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!