AviSynth - geeignet für Bildbearbeitung?

  • Ich bin jetzt einfach zu faul, zum Suchen. In AviSynth gibt es doch die Möglichkeit, nach Herzenslust zu filtern. Könnte man AviSynth nicht auch für die Bildbearbeitung, z. B. zum Verkleinern, Nachschärfen und Entrauschen von Bildern aus der Digitalkamera, verwenden? Ich hätte da nämlich so eine Idee. ;-)



    Benötigt wird:


    - AviSynth+
    - Fritz Photo 2020.07.08 (Vorlagen vom: 06.07.2020)


    Prüfsumme (SHA-256): 564664032DCB58BCCDF917277E7D66B161E438E0F4F94FE1F1B90149EEC9C677


    Um in den Genuss weiterer Grafikformate zu kommen, sollte man nach der Installation noch die beiden folgenden benutzerspezifischen Umgebungsvariablen erstellen:

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

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

    Diese werden von Immaavs, einem auf ImageMagick basierenden Plugin, benötigt. Damit lassen sich zahlreiche weitere Grafikformate einlesen und erstellen.



    1. Bilder


    Es werden die Formate BMP, JPG, PNG, PPM, TGA und TIF unterstützt, je nach Fähigkeiten des verwendeten AviSynth-Filters zum Einlesen von Bildern. Über "Start-Skript..." kann ein anderes Skript zum Einlesen von Bildern ausgewählt werden. Zur Auswahl stehen: ImageSource und ImmaRead.



    2. Zuschneiden


    Vor der eigentlichen Bildbearbeitung kann ein Bild noch gedreht und beschnitten werden.



    3. AviSynth-Skripte


    Im Vorlagenverzeichnis befinden sich bereits einige Skripte. Diese können mit Hilfe der Jobliste individuell zusammengestellt und abgeändert werden. Zum Hinzufügen und Entfernen eines Skripts genügt ein Doppelklick auf das jeweilige Skript (Drag and Drop wird ebenfalls unterstützt). Die wichtigsten Parameter sind in einem Block am Anfang des jeweiligen Skripts zusammengefasst. Diese Parameter können entweder direkt im Skript oder mit Hilfe des Skriptinspektors bearbeitet werden. Mit "Hinzufügen..." lassen sich Skripte auch außerhalb des Vorlagenverzeichnisses hinzufügen. Mit "Neu" können alle Einträge in der Jobliste entfernt und eine neue Auswahl gestartet werden. Mit "Erneut laden" kann ein vorher ausgewähltes Skript erneut eingelesen werden.



    4. Vorschau


    In der Vorschau kann man "Vorher" mit "Nachher" vergleichen. Durch Drücken von "Aktualisieren" wird die Vorschau gestartet. Mit den Cursor-Tasten kann man dabei bequem zwischen den Ansichten hin- und herschalten. Es wird dasjenige Bild angezeigt, welches unter "Bilder" ausgewählt ist. Ist kein Bild ausgewählt, wird standardmäßig das erste Bild aus der Liste genommen. Wenn man unter "AviSynth-Skripte" ein Skript in der Jobliste ausgewählt hat, dann kann man genau von diesem Filter einen Vorher-Nachher-Vergleich machen. Ist kein Skript ausgewählt, so erscheint in der Vorschau das Originalbild und das endgültige Bild (alle Skripte werden abgearbeitet). Durch einen rechten Mausklick kann ein Vorschaufenster auch einzeln aktualisiert werden. Der Schalter "Synchronisiere Vorschaufenster" sorgt dafür, dass die beiden Vorschaufenster "Vorher" und "Nachher" stets den gleichen Bildausschnitt zeigen (sofern möglich).



    5. Einstellungen


    Beim JPG-Format kann man zwischen einer festen und einer variablen JPG-Qualität wählen. Im letzten Fall gibt man einfach eine Dateigröße an, die nicht überschritten werden darf. Das Programm ermittelt dann die maximal mögliche JPG-Qualität. Mit Suchen und Ersetzen kann man den Dateinamen den eigenen Bedürfnissen anpassen. Es können hierbei sogar reguläre Ausdrücke verwendet werden. Falls "Suffix" aktiviert ist, dann haben die Ausgabedateien die folgende Form: <Originaldateiname>_<Breite>x<Höhe>.<ext>. Ist "Suffix" deaktiviert, dann ändert sich der Dateiname nicht. Wenn kein Zielverzeichnis angegeben wird, werden die Dateien in das gleiche Verzeichnis geschrieben, wo sich die Originaldateien befinden. Die Einstellungen, die beim Start des Programms Gültigkeit haben sollen, können in einer INI-Datei bearbeitet werden.



    Wie erstelle ich ein Fritz-Photo-Script?


    Ein Fritz-Photo-Script ist nichts anderes als ein strukturiertes AviSynth-Script mit zusätzlichen Kommentaren versehen. In diesen zusätzlichen Kommentaren sind Anweisungen für den Scriptinspektor enthalten. Ein jedes Script unterstützt dabei die folgenden Formate: YV12, YV24 und RGB32. Am Beispiel des Rotate-Scripts sei die Struktur eines Fritz-Photo-Scripts kurz erläutert.



    Ein Fritz-Photo-Script lässt sich in 4 Bereiche unterteilen.


    - Info über das Plugin

    - Parameter

    - Parameter für den Scriptinspektor

    - Das eigentliche Script


    Der erste Bereich ist der sog. Info-Bereich. Hier kann man in einer oder mehreren Zeilen etwas zum Plugin schreiben. In der Regel steht hier einfach ein Link zur entsprechenden Homepage des Plugins.


    Der zweite Bereich umfasst die Parameter, die im Script Verwendung finden. Die hier niedergeschriebenen Parameter werden auch im Scriptinspektor angezeigt.


    Im dritten Bereich kann man für die einzelnen Parameter Eigenschaftswerte für den Scriptinspektor hinterlegen, und zwar in der folgenden Bedeutung: „Sichtbarkeit, Nur-Lesen-Modus, Ballonhilfe für den Parameter | Ballonhilfe für den Wert“. Auch eine Liste mit vordefinierten Werten lässt sich erzeugen (siehe z. B. SSSharp.avs). Wenn keine Eigenschaftswerte für einen Parameter festgelegt sind, dann wird der Parameter mit den Werten „True, False, Beginner“ belegt.


    Im vierten und letzten Bereich befindet sich das eigentliche Script. Es beginnt mit der LoadPlugin- und der Import-Sektion. Im Anschluss wird nach dem Farbformat gefragt, also, ob es sich um das YV12-, YV24- oder um das RGB32-Farbformat handelt. Je nachdem, was das Script bzw. Plugin für eine Farbe benötigt, erfolgt eine entsprechende Umwandlung. Im Beispiel von oben kann das Farbformat entweder YV24 oder RGB32 sein. Liegt dieses bereits vor, so muss auch nichts umgewandelt werden.


    Wenn man nun ein Script für das Farbformat YV12 schreiben will, so bedient man sich am Besten eines der Vorlagen, die dem zukünftigen Script am nächsten kommt. Im Falle von YV12 bedient man sich am Besten des Scripts „TNLMeans.avs“ und passt das Script entsprechend an. Für ein reines RGB32-Script kann als Arbeitsgrundlage das Script „RGBAdjust.avs“ hergenommen werden.

  • Was für ne Idee hast du denn? Wenn's nur um die Bilder geht, d.h. du am Schluss wieder JPEGs oder haben willst macht wohl Batchprocessing von Grafikprogrammen mehr Sinn.

    "Diejenigen, die grundlegende Freiheiten aufgeben würden, um geringe vorübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit."
    Benjamin Franklin (1706-1790)


    Meine Erfahrungen in der Open Source-Welt: blog.bugie.de

  • Man kann einzelne Bilder laden, speichern und bearbeiten.
    Vielleicht interessant: http://forum.doom9.org/showthread.php?t=119831


    :daumen: Danke für den Link.


    Was für ne Idee hast du denn? Wenn's nur um die Bilder geht, d.h. du am Schluss wieder JPEGs oder haben willst macht wohl Batchprocessing von Grafikprogrammen mehr Sinn.


    Normalerweise benutze ich für solche Sachen ja IrfanView. Die Verkleinerung mit dem Lanczos-Filter und das homöopathische Nachschärfen mit dem kostenlos verfügbaren Adobe-Filter „High Pass Sharpening“ stellt für mich schon ein gewisses Optimum dar. Auch Batchverarbeitung ist möglich. Die Sache hat nur einen Hacken, bei der Batchverarbeitung kann ich nicht auf mein geliebtes „High Pass Sharpening“ zurückgreifen, sondern ich müsste hierzu den integrierten einfachen Schärfefilter verwenden. Bei anderen Tools wie „nSonic JPG-Compressor“ bin ich mit der erreichten Qualität nicht so zufrieden usw.


    Auf der Suche nach einem guten Bildbetrachter bin ich auf das Programm „Vallen JPegger“ gestoßen, welches mir Bilder der Größe 3648x2736 wesentlich schärfer und detaillierter auf den Bildschirm zaubert, als andere Bildbetrachter. Mit der Software lassen sich auch Bilder verkleinern. Dabei habe ich festgestellt, dass die Ergebnisse sehr nahe an mein bisheriges „Ideal“ mit IrfanView herankommen. Mehr noch, die Ergebnisse scheinen auch besser zu sein (mehr Schärfe und mehr Details). Auch Batchverarbeitung ist möglich. Der Haken hier ist allerdings, dass man keinerlei Einfluss auf den verwendeten Filter und den Grad der Nachschärfung hat. Die Bilder von „Vallen JPegger“ sind nämlich schon nahe an der Grenze zur Überschärfung.


    Kurzum, immer ist irgendetwas, was mich stört. :motz: Deswegen die Idee mit AviSynth. Zu AviSynth gibt es ja jede Menge Filter. Damit könnte man unter Umständen ein sehr mächtiges Tool zur Bildbearbeitung basteln. Wobei es mir in einem ersten Schritt nur um das Verkleinern und adäquate Nachschärfen geht. Mit ImageSource("$FileName", end=0) lassen sich z. B. ja einzelne Bilder laden. Da ich mit Fritz Framalyzer aber bereits ein Programm habe, das AviSynth-Scripte unterstützt, wäre so ein Tool sehr schnell gebastelt, dass meinen Ansprüchen gerecht wird.


    Deswegen meine Frage, inwieweit es überhaupt Sinn macht, mit AviSynth so was anzugehen. Das Verkleinern und Nachschärfen sollte ja kein Problem darstellen – hierzu gibt es genügend Filter in AviSynth. Die Ergebnisse sollten denen eines Grafikprogramms ja in nichts nachstehen. Beim Entrauschen geht’s im Grafikbereich dann aber schon los, wo es kostenpflichtig wird. Gute Entrauscher, wie z. B. Neat Image, kosten Geld. In AviSynth könnte man evtl. gleichwertige oder bessere Ergebnisse erzielen – und das kostenlos! Kurzum, bei AviSynth könnte man auf eine bewährte Filterlandschaft zurückgreifen. ;-)

  • Das alleinige Filtern würde völlig ausreichen, das Abspeichern in ein beliebiges Grafikformat (und evtl. auch anderen Dinge) würde das Programm selbst erledigen. Habe gerade gesehen, auch das TIFF-Format wird von AviSynth unterstützt.

  • Nochmal kurz Halb-OT: Ich benutze nur noch PhotoFiltre, nachdem ich entdeckt habe, dass es dort auch ein Batchprocessing gibt. :-) Meine Ansprüche sind in diesem Bereich aber auch nicht sooo hoch.

    "Diejenigen, die grundlegende Freiheiten aufgeben würden, um geringe vorübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit."
    Benjamin Franklin (1706-1790)


    Meine Erfahrungen in der Open Source-Welt: blog.bugie.de

  • Moin Archimedes1!


    (Mögliches) Problem: YV12
    Die meisten Filter erwarten ihren Input als YV12 und das heist das das Chroma erstmal auf ein viertel der Ausgangsgröße geschrumpft wird.


    Ansonsten ist die Idee sehr gut, ich benutze Avisynth ebenfals für Bildfilterung + Größenanpassung (primär letzteres, das braucht auch keine Farbraumwandlung weil es RGB unterschützt).


    Empfehlenswerte Filter wären vieleicht (arbeiten wie gesagt in YV12):
    DeBlock_QED() #bester deblocker für leicht blockige Bilder(besser wäre natürlich garnichterst JPEG als Input zu benutzen)
    RemoveGrain(1) #gegen Salt'n'Pepper Noisy
    VagueDenoiser() #sehr guter Spatialer filter (wenn auch nicht ganz einfach einzustellen)
    TNLMeans() #noch bester Spatialer Filer (dafür lahm wie Hölle)
    LimitedSharpenFaster() #DER Schärfer


    BTW: Was willst du in diesem zusammenhang mit dem "Fritz Framalyzer"?


    Könntest du mal ein Bild uploaden das du mit avisynth verarbeiten würdest und sagen was du damit machen willst. Ich würde gerne mal n bischen damit experimentieren wenn ich die Woche Zeit habe, um ein Standart-Startskript entwerfen zu können.

  • Das mit dem Farbraum ist mir schon klar. Wenn, dann muss der betreffende Filter auch RGB unterstützen. Prinzipiell würde das mit AviSynth schon alleine gehen, aber mit einer Benutzeroberfläche à la Fritz Framalyzer hätte man eben viel mehr Möglichkeiten, auch wäre es benutzerfreundlicher. Da ich in diesem Programm ja schon eine AviSynth-Unterstützung integriert habe – Bilder könne damit ja auch geladen werden - , wäre es ein Leichtes, auf Grundlage dieses Programms ein neues zu entwerfen.


    Das Programm soll dann auch eine ähnliche Oberfläche erhalten. Als erstes wählt der Benutzer die zu filternden Bilder aus, im nächsten Dialog wählt er dann einen entsprechenden (vorgefertigten) AviSynth-Script, den er nach Belieben ändern kann (sofern dies überhaupt notwendig ist), anschließend kann er dem Progamm noch ein paar spezifische Einstellungen mit auf den Weg geben (z. B. welches Dateiformat erzeugt werden soll etc.). Anschließend startet er die „Konvertierung“.


    Das Programm wird definitiv mehr sein, als eine bloße GUI. Auch wird man mit AviSynth nicht alles bewerkstelligen können.


    In einem ersten Schritt geht es mir zunächst nur um das Verkleinern und adäquate Nachschärfen. Das Thema Entrauschen wäre dann als nächstes dran (eigenes Script). Ich lade mal ein Originalbild (JPG-Bild, das aus einer Rawkonvertierung stammt) und die Verkleinerungen mit IrfanView und Vallen JPegger hoch, damit man mal einen Anhaltspunkt hat.

  • Hier ein Beispiel, dass mit Hilfe von Olympus Master 2 aus dem Rawformat erzeugt worden ist. Es handelt sich hierbei um ein JPG-Bild, dass direkt aus Olympus Master 2 mit den Standardeinstellungen erzeugt worden ist. Die EXIF-Informationen sind ebenfalls enthalten. Das Originalbild hat eine Größe von 3648x2736.


    Original >>


    Die entsprechenden Verkleinerungen (800x600) habe ich auch gleich beigefügt. Einmal mit IrfanView und einmal mit Vallen JPegger. Die Bilder wurden in der maximal möglichen JPG-Qualität abgespeichert.


    IrfanView (Lanczos-Filter ohne zusätzliche Nachschärfung)


    IrfanView (Lanczos-Filter und "High Pass Sharpening")


    Vallen JPegger

  • Der erste „Rohentwurf“ steht schon. Man kann bereits Bilder laden, einen AviSynth-Script laden (und editieren), ein paar Einstellungen vornehmen (gewünschte Skalierung, JPG-Qualität etc.) und die Bilder (im Batchbetrieb) konvertieren lassen. Die Oberfläche ist die gleiche wie beim Fritz Framalyzer. Die Ergebnisse können sich schon mal sehen lassen.


  • Ausgabeformate wird es definitiv mehr geben. Das JPG-Format erzeuge ich derzeit mit der Unit „Jpg“ in Borland Delphi. Was mir momentan noch etwas abgeht, ist eine geeignete Schärfemethode innerhalb von AviSynth, die auch den RGB-Farbraum unterstützt. Sharpen() ist sicher nicht der Weisheit letzter Schluss. ;-)

  • Das Tool – ich werde es vermutlich „Fritz Photo“ nennen - schreitet weiter voran. Auch wenn nicht alle Filter und Skripte wegen der fehlenden RGB-Farbraumunterstützung verwendet werden können, wird es mir eine große Arbeitserleichterung sein. Ich habe mittlerweile auch die Zielformate BMP, PNG, PPM, TGA und TIF hinzugefügt. Damit lassen sich auch reine Konvertierungen vornehmen. Als Script braucht man hierzu nur die Datei ImageSource.avs aus dem Vorlagenverzeichnis laden. Diese besteht nur aus einer Zeile: ImageSource("$FileName", end=0, pixel_type="RGB32").

  • Mal wieder ein kleiner Zwischenstand. Da die EXIF-Daten bei der AviSynth-Filterung unweigerlich verloren gehen, habe ich die Option „Original EXIF-Daten behalten“ hinzugefügt. Desweiteren kann bei der JPG-Ausgabe nun auch eine Dateigrößenbeschränkung angegeben werden. Für eine vorgegebene Dateigröße wird dabei die maximal mögliche JPG-Qualität ermittelt.


  • Danke dir für den Hinweis. Werde mir das auf alle Fälle näher anschauen. ImageSource(), mit denen ich die Bilder per AviSynth einlese, unterstützt ebenfalls DevIL. Nun weiß ich, was es damit auf sich hat. ;-)

  • Eine erste Preview-Version habe ich schon mal hochgeladen. Das Programm benötigt AviSynth 2.56 oder höher. Würde mich freuen, wenn eine Rückmeldung käme, dass das Programm auch unter Vista läuft. ;-)


    Die Bedienung sollte eigentlich aus dem Programmablauf zu ersehen sein.


    1. Bilder laden
    Es werden momentan die Formate BMP, JPG, PNG, PPM, TGA und TIF unterstützt (je nach den Fähigkeiten des gewählten AviSynth-Filters zum Einlesen von Bildern).


    2. AviSynth-Script laden
    Im Vorlagenverzeichnis befinden sich bereits ein paar einfache Scripte zum Verkleinern von Bildern. Allerdings noch ohne das (notwendige) Nachschärfen, da ich mich hierüber auch erst meine Gedanken machen muss. Momentan bieten sich für den RGB-Farbraum die Filter Sharpen() und Msharpen() an. Gerade der letztere scheint mir interessant zu sein. Brauchbare Scripte werden sich sicher finden lassen. ;-)
    In den Scripten wird man auch auf Schlüsselwörter stoßen, die dann vom Programm an entsprechender Stelle ersetzt werden („$FileName“, „$Width“ und „$Height“). Vor allem das Schlüsselwort „$FileName“ darf nicht ersetzt werden.


    3. Einstellungen
    Die Zahlen für die Breite und Höhe eines Bildes ersetzen später im AviSynt-Script die Schlüsselwörter „$Width“ und „$Height“ (falls vorhanden). Bei der Skalierung wird darauf geachtet, dass die eingestellte Größe nicht überschritten wird. Gegebenenfalls stimmt das resultierende Bild nur mit einer Seite (Höhe oder Breite) überein.
    Beim JPG-Format kann man zwischen einer festen und einer variablen JPG-Qualität wählen. Im letzteren Fall gibt man einfach eine Dateigröße an, die nicht überschritten werden darf. Das Programm ermittelt dann die maximal mögliche JPG-Qualität.
    Wenn kein Zielverzeichnis angegeben wird, werden die Dateien in das gleiche Verzeichnis geschrieben, wo sich die Originaldateien befinden. Die Dateien erhalten dabei Namen nach folgendem (AviSynth-)Muster: <Originaldateiname>_000000.<ext>.


    4. Zusammenfassung
    Hier kann man noch mal alle Einstellungen kontrollieren und die Konvertierung starten.