Skip to main content

Avisynth – Grundlagen & Filter

Hier wurde eigentlich nicht viel geschrieben, was nicht auch in JCDs Guide oder in den Guides auf amv.org schon zu finden wäre.
Der, den es wirklich interessiert, ist auch im doom9-Forum gut aufgehoben.


Auf jeden Fall benötigt werden Avisynth sowie avspMod.

Avisynth (auch oft als ‚AVS‘ abgekürzt) ist ein Videobearbeitungsprogramm ohne grafische Oberfläche.
Sämtliche befehle werden in Form eines *.avs-Skriptes übergeben, woraufhin das entstehende Video von geeigneten Programmen weiterverarbeitet werden kann.
Es existieren Plugins für ‚Sony Vegas‘ und ‚Adobe Premiere‘, die es ermöglichen direkt mit *.avs-Skripten zu editieren. Solange man aber nicht über einen NASA-Rechner verfügt ist davon abzuraten.
In dem ’normalen‘ Workflow wird unter anderem das Ausgangsmaterial mithilfe des Skriptes in VirtualDub in eine .avi-Datei mit lossless-Codec überführt (s.hier).

Avisynth-Guide_Schaubild_01

Bei den Skript-Dateien handelt es sich lediglich um *.txt-Dateien mit *.avs-Endung. Zur besseren Handhabung empfiehlt es sich immer, die Skripte in avspMod zu öffnen.
Die Befehle in des Skripts werden von oben nach unten nacheinander angewandt.
Der besseren Lesbarkeit halber sollten die einzelnen Befehle durch Zeilenumbrüche voneinander getrennt werden, wobei keine zusätzlichen Trennzeichen notwendig sind.
Zeilen können mit ‚#‘ auskommentiert aka deaktiviert werden.

Befehl_1()
Befehl_2()
...
Befehl_x()

Es gibt verschiedene Methoden, ein Quellvideo in AVIsynth zu ‚importieren‘.
Wenn man diese erste Zeile in seinem Skript erstellt hat, kann man in avspMod bereits eine Preview erstellen.
Um diese zu erstellen und bei Skriptänderungen zu aktualisieren reicht ein Druck auf die F5-Taste.

Anmerkung: Der Dateipfad ist generell nicht notwendig, wenn sich die *.avs-Datei im selben Verzeichnis wie die Videodatei befindet.

  • AVISource
    Für .avi-Dateien reicht der Befehl:
    AVIsource("...Dateipfad...\DeineVideoDatei.avi")
  • FFMpegSource
    Für die heute vorherrschenden Formate *.mkv und *.mp4 wird das Plugin FFMpegSource verwendet.
    Zur Installation muss lediglich die passende ‚ffmsindex.exe‘ und ‚ffms2.dll‘ in den ‚plugin‘ Ordner im AVIsynth-Verzeichnis kopiert werden.
    Wenn man bei dieser Methode das erste mal eine Preview erstellt wird, wird zuerst eine *.ffindex-Datei im selben Ordner erstellt.
    Das kann je nach Videodatei und System schon mal bis zu 10 Minuten in Anspruch nehmen, in denen avspMod nicht mehr reagiert … keine Panik, das ist normal.
    Der Befehl lautet:
    FFVideoSource("...Dateipfad...\DeineVideoDatei.mkv")
  • DirectShowSource
    Diese Methode kommt zum Einsatz, wenn eine Datei aus irgendwelchen Gründen nicht mit den beiden vorherigen Verfahren verwendet werden kann,
    sie allerdings von beispielsweise dem MPC-HC oder auch Windows-Mediaplayer wieder gegeben werden kann.
    Dabei wird auf die systeminternen Codecs zurück gegriffen, was eine ‚relativ‘ unzuverlässige Variante im Bezug auf Qualität und Frame-Genauigkeit darstellt.
    DircetShowSource("...Dateipfad...\DeineVideoDatei.xxx")

  • Crop
    Wenn in der Source Schwarze Ränder vorhanden sind, sollten diese zuallererst abgeschnitten werden.
    In DVD-Quellen waren so gut wie immer Ränder, aber auch in BD-Quellen und vor allem HDTV-Rips sind sie vorhanden.
    Im YUV-Farbraum kann aber nur um gerade Zahlen an Pixel-reihen abgeschnitten werden (0,2,4,6,…).
    Außerdem sind die Vorzeichen zu beachten.
    crop(links,oben,-rechts,-unten)
  • Resize
    Faustregel: Nicht Upscalen.
    Die optimale Auflösung für Moderne Animes ist meistens 720p (1280×720 Pixel) oder 1080p (1920×1080 Pixel).
    Um Komplikationen zu vermeiden sollten alle Quellen auf die Selbe Auflösung gebracht werden:
    spline36resize(1280,720)
  • Framerate
    Die Framerate sollte auf die Geschwindigkeit im AMV angepasst werden und auf jeden Fall bei allen Quellen auf den selben Wert gesetzt werden.
    Sinnvolle Frameraten sind: 23.976 – 25 – 29.970 – 50 – 59.940 … 29.970 ist häufig ein guter Kompromiss (und das Maximum auf Youtube).
    assumefps(29.97)

Ein Skript bei optimaler Source sieht dann also wie folgt aus:

FFVideoSource("...Dateipfad...\DeineVideoDatei")
crop(x,x,-x,-x)
spline36resize(1280,720)
assumefps(29.97)

Die Filter im Folgenden beeinträchtigen das Bild teilweise sehr stark.
Es ist sehr sinnvoll zwischendurch mit ‚#‘ immer mal wieder den Filter zu deaktivieren um sicher zu gehen, dass man es nicht übertrieben hat.
Außerdem sollte Grain und Banding vor dem Croppen und Resizen zu minimiert werden.

Grain ist bei Animes häufig ein bewusst eingesetztes Stilmittel.
Daher sollte man immer zwei mal überlegen, ob eine Source tatsächlich ‚gesäubert‘ werden muss
Das gilt insbesondere, wenn dabei zu viele Details zerstört werden.

Häufig bleiben bei komprimierten Videos (mit denen wir nun einmal arbeiten müssen) aber auch Körner zurück, die mit den selben Filtern entfernt werden können.

Diese Filter werden an einem Fansub-Encode von ‚To Aru Majutsu no Index‘ angewendet.
Die Bilder sollten in Voller Auflösung angesehen werden um ‚irgendetwas‘ zu erkennen.

Avisynth-Guide_Grain_Default Avisynth-Guide_Grain_zoom

FFT3DFilter Download
Dieser Filter berechnet aus den vorhergegangenen und folgenden Frames ein ’sauberes‘ Bild. Dies kann allerdings zu ‚Ghostframes‘ führen.
Meistens ist der FFT3DFilter die Standardlösung, obwohl er im Vergleich zu den anderen relativ langsam ist.
Das Endergebnis weist in der Regel Banding auf, welches anschließend noch entfernt werden sollte.

FFT3DFilter(sigma=x,plane=4,bt=3)
  • sigma – Dies ist der ‚Stärke‘-Wert des Filters und daher der, an dem hauptsächlich gedreht werden sollte.
    Bei modernen Produktionen reichen in der Regel Werte bis 2. Kommazahlen sind möglich.
  • plane – Hiermit werden die Farbkanäle eingestellt, auf die der Filter angewendet wird.
    0 – Luma, 3 – Chroma, 4 – Alle Kanäle
  • bt – Mit diesem Wert wird bestimmt, wie viele Frames in der Umgebung in die Berechnung einbezogen werden.
    Wenn Ghostframes auftreten sollte dieser wert 1 angenähert werden
    0 – Alle vorherigen, 1 – nur aktueller, 2 – aktueller und ein vorheriger, 3 – aktueller und ein vorheriger+folgender, …

Die bereits eingesetzten Werte müssen nur bei absoluten Härte-/Sonderfällen verändert werden.

Avisynth-Guide_fft3d_comparison

dfttest Download – Benötigt die passende libfftw3f-3.dll im Systemverzeichnis
Dieser Filter ist sehr brachial, weshalb man hier besonders darauf achten sollte, es nicht zu übertreiben.
Durch die eingebaute Dither-Funktion muss nur selten ein weiterer Filter heran gezogen werden um das Banding zu entfernen.
Kann in leicht bewegten Szenen zu sehr unruhigen Farbflächen führen.

dfttest(sigma=x,dither=x)
  • sigma – Auch hier der Wert für die Stärke des Filters. Kommazahlen sind möglich.
    Im Gegensatz zum FFT3DFilter können hier die Werte etwas höher angesetzt werden.
    Werte über 10 sind in der Regel aber dennoch zu hoch.
  • dither – Mit dieser Funktion wird das Banding ‚entfernt‘. Die genaue Erklärung ist im Abschnitt ‚Banding‘ zu finden.
    Werte über 1 sind in der Regel schon viel zu krass. Nur ganze Zahlen möglich.

Avisynth-Guide_dfttest_comparison

TTempSmoothF Download
Dieser Filter weicht die Kanten ein ganz kleines bisschen auf und hilft eigentlich nur bei sehr wenig Grain.
Dafür ist er äußerst schnell und macht nichts kaputt ;)

TTempSmoothF(maxr=x)
  • maxr – Der Radius um die einzelnen Pixel die zur Berechnung heran gezogen werden. Nur ganze Zahlen von 1 bis 7 möglich.

Avisynth-Guide_TTeampSmooth_comparison

Colorbanding tritt eigentlich immer bei komprimierten Quellen auf.
Durch die Kompressionsverfahren wird in der Regel Grain und Dither verringert, was dann die natürlichen Kanten eines 24-bit Farbraums (8-Bit/Kanal) zur Geltung bringt.
Häufig hat aber auch einfach jemand schlecht gearbeitet und das Banding im Encode verursacht.
Da es sich teilweise um eine technische Limitierung handelt ist die einfachste Möglichkeit,
die Kanten an den Farbverläufen ineinander zu ‚verpixeln‘ – zu dithern. Eintrag im deutschen Wikipedia
  • GradFun2DB(mod)
    Das Schweizer Taschenmesser für diesen Fall. Es gibt keinen besseren/schnelleren/zuverlässigeren Filter als diesen.
    Außerdem ist er, wenn er erstmal läuft, fast 100% Idiotensicher (ausgenommen ist ein spezieller Russe).
    Verwendet wird das Script Gradfun2DBmod, das Gradfun2DB mit verschiedenen Filtern kombiniert, die daher ebenfalls installiert werden müssen.
    GradFun2DB Download
    GradFun2DBmod Download (einfach die *.avsi in das avisynth-Pluginverzeichnis kopieren)
    MaskTools Download (achtet darauf, dass ihr die neuste Version benutzt – 2.0a48)
    RemoveGrain Download (auch hier die neuste Version benutzen – v1.0PR)
    AddGrain Download
    GradFun2DBmod(thr=x,str=x)
    • thr – Hier wird die Stärke der Dither-Fuktion eingestellt. Möglich sind Kommazahlen ab 1, wobei Werte über 1.5 kaum noch Verbesserungen mit sich bringen.
    • str – Das ist die Stärke/Menge des zusätzlich generierten Grains, um Banding zu ‚verschleiern‘. Möglich sind Kommazahlen, wobei der Standardwert von 0.8 oft okay ist.
      Wenn möglich sollte der Wert aber auf 0 gesetzt werden

    Der Filter hat noch wesentlich mehr zu bieten, was man(du!) im Zweifelsfall aber direkt in der ‚GradFun2DBmod.v1.5.avsi‘ nachlesen kann.
    Das folgende Vergleichsbild stammt direkt von der deutschen BluRay des ersten ‚Garden of Sinners‘-Teils.
    Avisynth-Guide_Banding_default

    Hier noch einmal mit der Zeile

    GradFun2DBmod()

    Avisynth-Guide_Banding_gradfun