AviSynth - Referenz

  • AviSynth ist der schnellste Frameserver den ich kenne. Für die Neueinsteiger muss natürlich erst einmal geklärt werden, was ein Framserver ist.
    Mit diesem Programm kann eine Bildquelle geöffnet werden und einer übergeordneten Anwendung zu Verfügung gestellt werden. "Na und...?", wird mancher denken, "Mache ich die Datei doch gleich mit der übergeordneten Anwendung auf".
    Das besondere daran ist, das während ein Bild weiter gereicht wird auch das Format geändert werden kann. Dadurch erspart man sich einen Zwischenschritt mit Neucodierung, wenn das Quellformat für das Zielformat angepasst werden muss.

    Installation von AviSynth

    AviSynth ist eine einzelne DLL, die in der Registrierung eingetragen werden muss. Entpacke das Archiv in einen Ordner deiner Wahl. Kopiere die avisynth.dll in dein windows\system oder Winnt\system32 Ordner und doppelklick auf die install.reg. Anschließend System rebooten.

    Deinstallieren von AviSynth

    Doppelklick auf die uninstall.reg und die avisynth.dll löschen.

    Erstellen einer Anweisung für AviSynth

    Öffne deinen Editor und schreibe deinen Script-Anweisungen. Die Datei mit der Bezeichnung <deinDateiname>.avs speichern. Die AVS-Datei in der übergeordneten Anwendung öffnen, anstatt der Original-Quelle.

    Plugins

    LoadPlugin("Dateiname"[,...])

    Lade eine oder mehrere exteren Plugins. Diese Plugins müssen AviSynth externe Schnittstelle für Plugins benutzten.

    Beispiel:
    # Einbinden von Mpeg2Dec
    LoadPlugin("D:\Programme\MPEG2Dec\MPEG2DEC.dll")
    mpeg2source("E:\Film\Quelle\DVD2AVI.d2v")

    Im Beispiel wurde der Mpeg2Dec-Filter eingebunden. Dieser Filter ermöglicht es Mpeg-Dateien mit AviSynth zu öffnen. Dies geschieht in diesem Beispiel in der zweiten Zeile mit dem Befehl mpeg2source und einer DVD2AVI Projektdatei.

    LoadVirtualDubPlugin("Dateiname","Filtername",preroll)

    Laden von Filtern, die für VirtualDub geschrieben worden sind. "Dateiname" ist der Name der .vdf-Datei. Anschließend muss dem Filter ("Filtername") ein Name in AviSynth vergeben werden. VirtualDub-Filter unterstützen nur RGB32-Dateien. Manche Filter brauchen einen Puffer und mit preroll gibt man wieviele Frames vorgeladen werden müssen, um den Puffer zu füllen.

    LoadVFAPIPlugin("Dateiname","Filtername")

    Wenn du VFAPI Plugins (TMPGEnc. Import-Plugins) benutzen möchtest.

  • AVISource / OpenDMLSource / AVIFileSource / WAVSource

    AVISource("Dateiname")
    OpenDMLSource("Dateiname")
    AVIFileSource("Dateiname")
    WAVSource("Dateiname")

    AVISource ist ein alleiniges Argument, welches nur den Dateinamen braucht, und benutzt die Video-for-Windows "Avi-Datei"-Schnittstelle, oder den eingebaute OpenDML -Kode (von VirtualDub übernommen). Dieser Filter kann jede Datei lesen, für die es einen Avifile-Händling gibt.
    Dies gilt nicht nur für AVI, sondern auch für Wav, AVS (AviSynth-Script) und VDR (VirtualDub Frameserver) Dateien.

    Der AVISource-Filter überprüft die Datei um seinen Typ zu bestimmen und reicht es entweder der AVI-Schnittstelle oder der OpenDML-Schnittstelle entsprechend weiter. Falls du Schwierigkeiten mit der einen oder anderen Schnittstelle hast, kannst du auch OpenDMLSource und AVIFileSource benutzten und deren Benutzung erzwingen. Jede Schnittstelle kann Avi-Dateien < 2GB lesen, aber nur die OpenDML Schnittstelle kann längere Avi-Dateien lesen, und nur die AviFile-Schnittstelle kann andere Datei wie WAV, VDR und AVS lesen.

    Die Avidatei-Schnittstelle unterstützt Wav-Dateien, aber man kann sie auch auf andere Weise einbinden.

    Beispiel:
    AVISource("D:capture.avi")
    AVISource("C:capture0.avi")
    AVISource("F:soundtrack.wav")
    WAVSource("F:soundtrack.wav")

    Segmentiere Avi-Quelle

    SegmentedAVISource("base-filename"[,...])

    Der SegmentedAVISource-Filter lädt automatisch bis zu 100 avi-Dateien pro Argument (benutzt AviSource) und fügt diese zusammen, wenn die nachfolgende Ordner die passende Namen haben.

    Beispiel:
    "D:Dateiname.ext"
    "D:Dateiname.00.ext"
    "D:Dateiname01.ext"
    "D:Dateiname.02.ext"
    "D:Dateiname.03.ext"
    ...
    "D:Dateiname.99.ext"

    Dateien, die in dieser Reihenfolge nicht existieren werden überlesen.

    DirektShowSource

    DirectShowSource("Dateiname")

    Alle mit DirectShowSource gelesen Dateien benutzen das selbe Multimedia Wiedergabesystem wie der Windows Mediaplayer. Der Filter kann also die meisten Formate lesen wie der Windows Mediaplayer, also auch MPEG, MP3, QuickTime und so gut wie jede jede AVI-Datei, die nicht von AVISource unterstützt wird (wie Avi-Dateien mit DivX-DirectShow-Filter). An erste Stelle sollte AVISource benutzt werden und wenn dieser nicht geht den DirectShowSource-Filter benutzen.

    IPCSource

    IPCSource("Name")

    IPCSource öffnet einen Kommunikationskanal mit einem AviSynth-Kompatiblen Frameserver. IPS steht für "inter-process communication". Der einzige Frameserver mit dem eine korrekte Verbindung aufgebaut werden kann ist zur Zeit das Premiere Export Plug-In.

    Öffnen von Mpeg-Dateien

    AviSynth ist ohne weiteres nicht in der Lage eine Mpeg-Datei zu öffnen. Doch im Alltag wollen wir oft genug von einer Mpeg-Quelle lesen und dies lässt sich nur durch einbinden eines passenden Filters bewerkstelligen. Hervorgetan hat sich hier der Filter Mpeg2Dec bzw. Mpeg2Dec2.

    LoadPlugin("D:ProgrammeMPEG2DecMPEG2DEC.dll")

    Durch das Einbinden des Filters ist AviSynth in der Lage Mpeg-Dateien zu öffnen. Es steht nun folgender Befehl zu Verfügung

    mpeg2source("Dateiname")

    Hier ein alltägliches Beispiel wie eine Projektdatei von einer Mpeg-Quelle eingebunden wird.

    LoadPlugin("D:ProgrammeMPEG2DecMPEG2DEC.dll")
    mpeg2source("E:FilmQuelleDVD2AVI.d2v")

    Blackness

    Blackness(Dauer,Clip)

    Der Blackness-Filter erzeugt ein pech-schwarzes, ruhigen Videoclip in einer spezifierten Dauer (duration). Clip (Dateinamen einer Quelle) fungiert als Schablone für Framerate, Bildgröße und so weiter.

    Version

    Version()

    Der Version-Filter erzeugt ein 512x32- Bildelement, 15fps, 10 Sekunden lang und im RGB-Format erstellten Video-Clip mit einer kurzen Version und Copyrightaussage in orangem 24-Punkt Arial-Text.

  • HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2

    HorizontalReduceBy2(clip)
    VerticalReduceBy2(clip)
    ReduceBy2(clip)

    HorizontalReduceBy2 reduziert die horzintale Größe jedes Frames um die Hälfte, und VerticalReduceBy2 reduziert die vertikale Größe um die Hälfte.Werden beide kombiniert eingesetzt, wird das gesamte Bild um die Hälfte reduziert. Als Kurzanweisung kann auch ReduceBy2 genommen werden, was dem selben entstricht wie HorizontalReduceBy2 gefolgt von VerticalReduceBy2.

    Wenn das Quellvideo Interlace ist, hat der VerticalReductionBy2 als Nebeneffekt, das er deinterlaced.

    Der Filter entspricht dem "2:1 reduction (high Quality)" bei VirtualDub.

    Bilinear Resize

    BilinearResize(target-width,target-height,clip)
    BilinearResize(source-left,source-top,source-width,source-height,target-width,target-height,clip)

    Der BilinearResize-filter verändert die Eingangsgröße einer Videoquelle auf ein frei definierbare Größe.
    Wenn du die optionale Source-Argumente liefern, ist das Ergebnis das selbe, als ob du durch crop vorher was weggeschnitten hast (außer schneller).

    BilinearResize benutzt standartmäßig bilineare Filter und ist fast identisch mit "precise bilinear"-Filter von VirtualDub. Er ist es aber nur "fast", da VirtualDub´s Filter den Scalierungsfaktor ein bischen falsch berechnet am oberen und rechten Rand.

    Beispiel:
    Eine Videodatei laden und auf 240x180 resizen, von was weiß ich einer Quelle.
    AVISource("video.avi").BilinearResize(240,180)

    Lade ein 720x480 (CCIR601) Video und resize auf VCD-Größe (352x240), beibehalten des richtigen Seitenverhältnisses.
    AVISource("dv.avi").BilinearResize(8,0,704,480,352,240)

    BicubicResize

    BicubicResize(clip,target-width,target-height[,b,c])
    BicubicResize(clip,target-width,target-height[,b,c],source-left,source-top,source-width,source-height,target-width,target-height)

    BicubicResize ist dem BilinearResize sehr ähnlich, unterscheidet sich darin das statt dem linearen Filtern nach Mitchell-Netravali zweiteilig Kubisch gefilter wird.
    Die Parameter b und c können genutzt werden, um die Proportionen des Quadrates zu adjustieren.. Mit den Werten b=0 und c=0.75 erhält man identisch das selbe Ergebnis wie mit VirtualDub "precise bicubic", außer dem VirtualDub Scalierungsproblem.
    Die default-Werte sind b=1/3 und c=1/3 die von Mitchell empfohlen werden und nach Netravali den subjektivem Empfinden von Menschen am nächsten kommt.

    Crop/CropBottom

    Crop(left,top,width,height,clip)

    Crop entfernt überflüssige Bildelemente aus jedem Frame. Wenn das Quellvideo eine Auflösung von720x480 hat und du es auf Videoformat 352x240 für VideoCD reduzieren willst, ist das der korrekte Weg.

    ReduceBy2
    Crop(4,0,352,240)

    Das YUV2-Format enthält die Farbinformationen nur in jedem zweiten horizonalen Bildpunkt, und wenn du im YUV2-Modus arbeitest müssen left und width eine gerade Zahl enthalten.

    AddBorders

    AddBorders(left,top,right,bottom,clip)

    AddBorders fügt schwarze Ränder um das Bild mit der spezifische Breite in Pixel.
    Wird imYUV2-Modus gearbeitet, müssen left und right ein gerade Zahl enthalten.

    Sei dir bewusst, das viele Kompremierungs-Algorithmen schlecht mit Farbgrenzen umgehen können, außer wenn das an der Grenzbreite oder deren Vielfachen geschieht (16 Pixel für MPEG).

    mpeg2source("E:FilmQuelleDVD2AVI.d2v")

  • Levels

    Levels(input_low,gamma,input_high,output_low,output_high,clip)

    Der Levels Filter justiert Helligkeit, Kontrast und Gamma. Die input_low und input_high Parameter bestimmen welcher Eingangswert ein reines Weiß und ein reines Schwarz ist. Die Output-Werte bestimmen die Ausgangswerte.

    Beispiele:

    # macht nichts
    Levels 0,1,255,0,255

    # Ein Gamma-Kooregiertes Bild für eine hellere Umgebung
    Levels 0,1.3,255,0,255

    # Umkehrung des Bildes (wie ein Foto-Negativ)
    Levels 0,1,255,255,0

    Blur (Weichzeichner)/Sharpen(Schärfen)

    Blur(amount,clip)
    Sharpen(amount,clip)

    Das sind einfache 3x3 Kernel Schärfe- und Weich-Zeichnungsfilter. Der größte zulässige Wert für Blus ist 1.58, das entspricht dem 3x3-Pixel Blur. Wenn dir das nicht ausreicht verkette mehrere Blur-Filter mit dem Wert 1.

    Benutzt du einen negativen Wert für den Weichzeichner verschärft sich das Bild. Der größte zulässige Negativwert ist 1. Der größe zulässige Wert für den Schärfefilter ist 1.

    Letterbox

    Letterbox(top,bottom,clip)

    Letterbox fügt einfache schwarze Linie jedem einzelnen Bild hinzu. Kombiniert man das mit der Crop-Funktion, können schwarze Balken mit Bildrauschen aus einem Film entfernt werden und anschließend wieder neu hinzugefügt werden.
    Gleichzeitig kann man die Müllzeilen ersetzen, die beim Caputuren von VHS-Bändern entstehen.

  • ConvertToYUY2 / ConvertToRGB

    ConvertToYUY2(clip)
    ConvertToRGB(clip)

    AviSynth kann intern mit zwei Farbräumen arbeiten. Mit den Filtern kann man zwischen den Farbräumen wechseln

    Achtung, folgende Filter unterstützen nicht den RGB-Modus.

    • SpatialSoften
    • TemporalSoften
    • FixLuminance
    • PeculiarBlend

    Man kann innerhalb von AviSynth beliebig oft zwischen den Farbräumen wecheln.

  • AssumeFrameBased

    AssumeFrameBased(clip)

    Legt die Field-Order für Interlaced Video als Bottom Field First fest. Dies geschieht generell, weil die Quelle gefiltert worden sein kann. Willst du die Field-Order drehen, benutze im Anschluss ComplementParity.

    ComplementParity

    ComplementParity(clip)

    Wenn der Film Field-Order basiert ist, verändert ComplementParity das obere Bild in ein unteres und umgekehrt.

    SeparateFields

    SeparateFields(clip)

    SeparateFields trennt die Halbbilder eines Frames in zwei separate progressiven Film. Dazu wird die Auskunft der einzelnen Bilder benutzt, die mit AssumeFrameBased geschrieben worden ist. Jeder einzelne Film wird jetzt auch für sich selber mit den nachfolgenden Einstellungen behandelt.

    Weave

    Weave(clip)

    Damit werden die durch SeperateFields getrennten Einzelfilme wieder zu einem interlaced Video verflochten.

    Sollte die Field-Order nicht stimmen, benutze vorher ComplementParity oder SwapFields im Anschluss.

    SwapFields

    SwapFields(clip)

    Vertauscht die Field-Order bei einem interlaced Video.

    Beispiel:

    AssumeFrameBased
    SeparateFields
    BicubicResize(1/3,1/3,480,576)
    Weave

    Mit dem ersten Befehl wird die Field-Order mit bff festgelegt. Anschließend werden aus dem interlaced Video zwei progressive Videos erstellt.
    Jedes Video für sich wird mit dem Bicubic-Filter resized. Im Anschluss werden die zwei progressiven Videos wieder zu einem interlaced Video verflochten.

Jetzt mitmachen!

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