AviSynth2 Referenz

  • Die erste AviSynth Referenz von mir war noch echte Übersetzungsarbeit vom englischen in das deutsche. Bei den aktuellen Versionen befindet sich eine komplette Dokumentation, die bei der Installation mit installiert werden kann.

    Die alte AviSynth Referenz von mir ist in soweit unbrauchbar geworden, das sich viele Befehls-Syntaxe geändert haben.
    Hier habe ich jetzt nur noch die wichtigsten Befehle zur Übersicht aus der deutschen Dokumentation zusammengetragen.

    Installation:
    AviSynth ist eine einzelne DLL, die in der Registrierung eingetragen werden muss. Entpacke das Archiv in einen Ordner deiner Wahl und starte die Installation. Anschließend System rebooten.
    Gleichzeitig wird ein Plugin-Ordner angelegt, der in der Registrierung eingetragen wird.

    [HKEY_LOCAL_MACHINE\SOFTWARE\Avisynth]
    "PluginDir"="c:\program files\avisynth\plugins"

    Die in diesem Ordner abgelegten Plugins brauch nicht mehr mit einer speziellen Pfadangabe geladen werden, sondern stehen beim nächsten Programmaufruf sofort zu Verfügung.

    Wichtig: Vor jeder Neuinstallation sind eventuell ältere Versionen zu deinstallieren.

    Deinstallation:
    Doppelklick auf die uninstall.reg und die avisynth.dll löschen. Die avisynth.dll befindet sich in deinem windows\system oder Winnt\system32 Ordner

    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.

    Plugin:
    Mit diesen Funktionen können externe Filter zu AviSynth hinzugefügt werden.
    LoadPlugin ("dateiname"[,...]) 
    Lädt ein oder mehrere externe AviSynth plugins (DLLs).

    Im Regelfall reicht es aus die Plugins in den entsprechenden Ordner abzulegen. Siehe unter Installation.

  • AVISource / OpenDMLSource / AVIFileSource / WAVSource
    AVISource(string filename[,...], bool "audio", string "pixel_type")
    OpenDMLSource(string filename[,...], bool "audio", string "pixel_type")
    AVIFileSource(string filename[,...], bool "audio", string "pixel_type")
    WAVSource(string filename[,...])

    AVISource verwendet als Argumente ein oder mehrere Dateinamen in Anführungsstrichen, und liest die Dateien entweder mit dem Video-for-Windows "AVIFile" Interface, oder mit dem in AviSynth eingebauten OpenDML-Code (von VirtualDub). Dieses Filter kann jedes AVI lesen, wofür ein AVIFile handler vorhanden ist. Es können also nicht nur AVI sondern auch WAV, AVS (Avisynth script) und VDR (VirtualDub frameserver) Dateien geöffnet werden. Wenn mehrere Dateien angegeben werden, werden diese mit UnalignedSplice aneinander gefügt.

    Das AVISource Filter untersucht den Typ und gibt dann entweder an den AVIFile handler oder den OpenDML weiter. Bei Problemen mit einem davon kann auch direkt OpenDMLSource und AVIFileSource verwendet werden. Jeder kann normale AVI (< 2GB) lesen, nur der OpenDML handler kann grössere AVI lesen, nur der AVIFile handler kann andere Typen wie WAV, VDR und AVS lesen.

    Bis zu v2.04 war WAVSource ein anderer Name für AVIFileSource. In späteren Versionen versucht WAVSource nicht mehr, den Video-Teil zu öffnen. Das kann nützlich sein, um das Audio auszulesen, wenn das Video defekt ist oder kein passender Dekompressor (CODEC) installiert ist.

    Ab v2.04 wird ACM (Audio Compression Manager) audio (z.B. mp3-AVIs) unterstützt. Mit AVISource können WAV nicht mehr geöffnet werden (nur mehr mit WAVSource)

    Mit dem Parameter pixel_type kann das Ausgabeformat des Video-Codecs ausgewählt werden. Gültige Werte sind"YUY2", "RGB32" and "RGB24". Wenn dieser Parameter ausgelassen wird, verwendet AviSynth das erste unterstützte Format (in der Reihenfolge YUY2, RGB32, RGB24). Dieser Parameter hat keine Wirkung bei unkompromierten Formaten.

    Beispiele:
    AVISource("d:\capture.avi") # so oder
    AVISource("c:\capture\00.avi") # so oder
    WAVSource("f:\soundtrack.wav") # so oder
    WAVSource("f:\soundtrack.wav") # so
    AVISource("cap1.avi","cap2.avi") # das gleiche wie AVISource("cap1.avi")+AVISource("cap2.avi") 
    AVISource("cap.avi",false,"RGB32") # kein Audio und RGB32 Dekompression angefordert

    DirectShowSource
    DirectShowSource(string filename, int fps, bool seek)

    DirectShowSource öffnet filename mittels DirectShow, das ist das gleiche Multimedia-Wiedergabe-System, das auch der Windows Media Player verwendet. Daher können die meisten Formate gelesen werden, welche vom Media Player abgespielt werden, auch MPEG, MP3 und QuickTime, und AVIs, welchen von AVISource nicht unterstützt werden (DV type 1). Man sollte immer zuerst versuchen, die Datei mit AVISource versuchen..

    Es gibt einige Probleme:

    • Kein Audio
    • Keine GRF-Dateien
    • Manche Decoder (z.B. MS MPEG-4) erzeugen ein Video, dass am Kopf steht. Man muss dann FlipVertical verwenden.
    • DirectShow Videodekoder müssen frame-genaues Suchen nicht unterstützen (die meisten tun es auch nicht). So lange man daher einen Teil des Videos sequentiell verwendet, funktioniert alles, kompliziertere Operationen können jedoch fehlschlagen.
    • Diese Beschränkung gilt nicht für AVIs oder ander frame-genaue DirectShow Dekoder.
    • DirectShow Videodekoders müssen nicht einmal die frame-Rate zurückgeben. Die meisten machen es zwar, aber z.B. der ASF Dekoder nicht, in diesen Fällen muss die Rate manuell angegeben werden:
    • DirectShowSource("video.asf", fps=15).
    • Der Microsoft DV Codec wird erkannt und auf das Dekodieren in voller Auflösung eingestellt.
    • Vorwärts suchen kann durchgeführt werden, ist aber sehr langsam. Beim Rückwärtssuchen wird eine Warnung angezeigt, wenn das Video relativ zur Bildnummer asynchron ist. Wenn diese Suchfunktion sehr langsam ist, kann sie mit "seek=false" abgeschaltet werden.

    SegmentedAVISource / SegmentedDirectShowSource
    SegmentedAVISource(string base_filename[,...], bool "audio", string "pixel_type")
    SegmentedDirectShowSource(string base_filename[,...][,fps])

    Dieses Filter lädt automatisch bis zu 100 AVI-Dateien pro Argument (intern durch AVISource) und fügt diese zusammen (intern durch UnalignedSplice). Wenn als Argument "d:\filename.ext" eingegeben wird, werden die Dateien "d:\filename.00.ext", " d:\filename.01.ext" und so weiter bsi zu "d:\filename.99.ext" geladen. Alle da nicht vorhandenen Dateien werden übersprungen.

    SegmentedDirectShowSource funktioniert genauso.

    Auch hier wird ACM (Audio Compression Manager)-Audio (z.B. mp3-AVIs) unterstützt.

    BlankClip / Blackness
    BlankClip(clip "clip", int "length", int "width", int "height", string "pixel_type", float "fps", int "fps_denominator", int "audio_rate", bool "stereo", bool "sixteen_bit", int "color")

    Das BlankClip Filter erzeugt ein einfärbiges, stilles Video-Clip mit der angegebenen Anzahl length von frames. Wenn ein Clip als Argument übergeben wird, werden dessen Eigenschaften (frame rate, Grösse, usw) als Vorlage verwendet. Man kann allerdings auch alle Eigenschaften angeben, ohne ein Vorlage-Clip zu verwenden. color muss als hexadezimaler RGB-Wert eingegeben werden. Ohne Argumente produziert BlankClip ein schwarzes Clip, 10 Sekunden lang, 640x480, 24 fps, 16 bit 44100 Hz stereo.

    Blackness ist eine alternative Schreibweise für BlankClip aus Kompatibilitätsgründen.

    Quelle: deutsche AviSynth Dokumentation

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

    AddBorders fügt schwarze Ränder mit der angegebenen Anzahl von Pixel zum Bild dazu. Im YUY2-Farbraum muss left und right ein Vielfaches von 2 sein.

    Achtung: Viele Kompressions-Algorithmen haben Schwierigkeiten mit vollfarbigen Rändern, wenn die Breite der Rändern nicht ein Vielfaches der Blockgrösse ist (16 pixel bei MPEG).

    Dieses Filter kann zusammen mit Crop verwendet werden, um ein Bild zu verschieben, ohne die Bildgrösse zu verändern:

    # rückt ein 352x240 Bild um 2 pixel nach rechts
    Crop(0,0,350,240).AddBorders(2,0,0,0)

    ConvertToRGB / ConvertToYUY2 / ConvertBackToYUY2 / ConvertToRGB32 / ConvertToRGB24
    ConvertToRGB(clip)
    ConvertToYUY2(clip)
    ConvertBackToYUY2(clip)
    ConvertToRGB24(clip)
    ConvertToRGB32(clip)

    AviSynth kann intern mit zwei Farbformaten arbeiten, RGB und YUY2. Diese Filter konvertieren die Formate. Wenn das Video bereits in dem angegebenen Format vorliegt, wird es unverändert durchgeschleift.

    Manche Filter können nur in einem Format arbeiten. Die folgenden internen Filter arbeiten nur mit YUY2:

    • SpatialSoften
    • TemporalSoften
    • MergeChroma / MergeLuma
    • Alle VirtualDub-Filter arbeiten nur mit RGB32, siehe auch Plugins

    Bei einem falschen Farbformat wird ein Fehler gemeldet.

    Das Arbeiten in YUY2 ist schneller als in RGB.

    Umwandlungen zwischen den Formaten sind nicht ganz verlustfrei, daher sollte man so wenig Umwandlungen als möglich verwenden. Wenn mehrere Umwandlungen notwendig sind, sollte man ConvertBackToYUY2() verwenden, falls die Quelle schon in YUY2 vorlag. Dadurch wird ein Verwischen der Farben vermindert..

    Wenn AviSynth das Video in YUY2 ausgibt und die Anwendung RGB erwartet, wird ein installierter YUY2-Codec für die Umwandlung verwendet. Wenn es keinen YUY2-Codec gibt oder der vorhandene fehlerhaft umwandelt, kann natürlich die eingebaute Umwandlung verwendet werden (z.B. für TMPGEnc).

    ConvertToRGB24 und ConvertToRGB32 erzwingen ein spezifisches RGB-Format
    ConvertToRGB() konvertiert immer nach RGB32, wenn die Quelle YUY2 ist, führt aber keine Umwandlung durch, wenn das Video in RGB24 vorliegt.

    RGB24 ist meistens langsamer als RGB32. Der einzige Grund es zu verwenden können Kompatibilitätsprobleme bei manchen Anwendungen sein.

    Huffyuv kann als YUY2-Codec verwendet werden (wenn kein anderer installiert ist).

    Beispiel:
    # So kann man die schwache Störung sichtbar machen, die durch mehrfache Umwandlungen entsteht

    control = ConvertToYUY2() 
    test = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(ConvertToRGB(control)))) 
    test = ConvertToYUY2(ConvertToRGB(test)) 
    return Subtract(test,control)

    Crop / CropBottom
    Crop(clip, int left, int top, int width, int height)
    CropBottom(clip, int count)

    Crop schneidet überflüssige Pixel ab. Wenn das Quellvideo beispielsweise eine Auflösung von 720x480 hat und man es auf VideoCD-Auflösung bringen möchte, geht man so vor:
    # Umwandlung CCIR601 zu VCD, mit dem korrekten Seitenverhältnis
    ReduceBy2
    Crop(4,0,352,240)

    Das YUY2-Format speichert die Farbinformation gemeinsam für zwei horizontale Pixel, daher muss in diesem Farbformat left und width geradzahlig sein.

    Wenn für width und height negative Zahlen eingegeben werden, werden diese auch als Offsets behandelt. Zum Beispiel:

    # 16 pixels von jedem Rand abschneiden unabhängig von der Bildgrösse:
    Crop(16,16,-16,-16)

    Die alternative CropBottom-Syntax ist nützlich, um bei VHS-Aufnahmen die defekten untersten Zeilen abzuschneiden, da hier count Linien vom unteren Rand entfernt werden.

    Letterbox
    Letterbox(clip, int top, int bottom, [int left, int right])

    Dieses Filter erzeugt oben und unten einen schwarzen Rand mit top und bottom Pixel Höhe, optional auch rechts und links mit left und right Pixel Breite.

    Man kann damit zum Beispiel verrauschte schwarze Streifen eines Videos, das bereits schwarze Balken hat, einheitlich Schwarz färben oder die fehlerhaften Zeilen, die meist ganz unten in einer VHS-Aufnahme sichtbar sind, ausblenden oder den Overscan-Bereich für VCD und SVCD auf schwarz setzen.

    Die Funktion ist könnte auch mit einer Kombination aus Crop und AddBorders werden, Letterbox ist allerdings einfacher und schneller.

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

    HorizontalReduceBy2 verkleinert das Bild auf die halbe Breite, VerticalReduceBy2 verkleinert das Bild auf die halbe Höhe. Beide Filter hintereinander verkleinern das ganze Bild auf die Hälfte, dafür kann als Abkürzung auch ReduceBy2 verwendet werden.

    Der verwendete Filter-Kernel ist (1/4,1/2,1/4), das ist der gleiche wie im VirtualDub-Filter "2:1 reduction (high quality)". Dabei werden die Aliasing-Probleme eines (1/2,1/2)-Kernels vermieden. Das VirtualDub-Filter "resize" verwendet einen anderen Kernel für eine 2:1-Verkleinerung, bei dem aber MPEG-Videos entstehen, die ganz wenig schlechter aussehen, wahrscheinlich da die Kanten etwas geschärft werden, was für die meisten Codecs von Nachteil ist.

    BicubicResize / BilinearResize / LanczosResize / PointResize
    BicubicResize(clip, int target_width, int target_height, float "b", float "c")
    BilinearResize(clip, int target_width, int target_height)
    LanczosResize(clip, int target_width, int target_height)
    PointResize(clip, int target_width, int target_height)

    Bei allen dieses Filtern zum Grössenändern kann eine erweiterte Syntax verwendet werden, die vor dem Verkleinern bzw. Vergrössern das Bild abschneidet. Die gleiche Operation wird durch ein Crop vor dem Resize erreicht.

    Zitat

    Crop(10,10,200,300).BilinearResize(100,150) 
    ist das gleiche wie
    BilinearResize(100,150,10,10,200,300)


    -----
    BilinearResize verwendet ein Standard-Bilinear-Filter, der fast identisch mit dem VirtualDub-Filter "precise bilinear" ist. Nur "fast" deshalb, da VirtualDub hier einen winzigen Skalierungsfehler macht, bei dem die oberste und unterste Zeile abgeschnitten oder verdoppelt werden, was aber nur bei bei einer Vergrösserung um 2 oder mehr auffällt.


    -----

    BicubicResize ist ähnlich wie BilinearResize, es wird aber eine zweifach kubische Mitchell-Netravali-Filter-Funktion eingesetzt..
    Mit den Parametern b und c kann die Eigenschaft dieser Funktion eingestellt werden, die Parameter werden auch manchmal als "blurring" (verwischen) und "ringing" (Ringe zeichnen) bezeichnet.

    Mit b = 0 und c = 0.75 ist das Filter genau gleich wie das VirtualDub-Filter "precise bicubic" (bis auf das genannte Skalierungsproblem). Der Standardwert ist b = 1/3 und c = 1/3, das sind die von Mitchell und Netravali empfohlenen Werte, die das subjektiv schönste Bild ergeben. Mit grösseren Werten von b und c können interessante Effekte entstehen, z.B. mit b = 0 und c = -5.

    Beim Vergrössern eines Videos erhält man mit BicubicResize wesentlich bessere Ergebniss als mit BilinearResize. Beim Verkleinern kann BilinearResize gleich gut oder sogar besser sein. Ein bikubisches Filter erzeugt Bilder, die schöner aussehen, allerdings deswegen, da eine leichte Schärfung stattfindet und nicht wegen einer exakteren Abtastung. Scharfe Bilder schauen gut aus, solange man sie nicht komprimiert, dann können sie leicht hässlich werden. Besonders beim Encoden mit niedriger (knapper) Bitrate gibt BilinearResize meist bessere Ergebnisse..

    Man muss
    b + 2 * c = 1
    setzen um ein numerisch genaues Filter zu erhalten.
    Daher kann für b = 0 ein maximales c = 0.5 verwendet werden, das ist dann ein Catmull-Rom-Spline und ein guter Wert für maximale Schärfe.

    Mit Werten c>0.6 fängt das Filter an, Ring-Artefakte zu produzieren. Es entsteht hier keine echte Schärfe mehr.
    Für b dürfen keine negativen Werte verwendet werden.
    -----
    LanczosResize ist eine Alternative für BicubicResize mit hohen Werten von c von 0.6 ... 0.75 und erzeugt relativ starke Schärfung.
    Es bietet eine höhere Qualität (weniger Artefakte) und gleichzeitig ein scharfes Bild.
    -----
    PointResize ist die denkbar einfachste Methode, die einen Punkt-Sampler oder einen nächster-Nachbar-Algorithmus verwendet, was ein sehr geblocktes Bild erzeugt. Dieses Filter sollte daher nur verwendet werden, wenn man absichtlich eine "schlechte" Bildqualität erzeugen möchte oder klare Pixel-Zeichnungen möchte.
    Weiters kann es auch zum testweisen Vergrössern verwendet werden.

    Quelle: deutsche AviSynth Dokumentation

  • AlignedSplice / UnalignedSplice
    AlignedSplice(clip1, clip2[,...])
    UnAlignedSplice(clip1, clip2[,...])

    AlignedSplice und UnalignedSplice fügen zwei oder mehrere Clips hintereinander. Der Unterschied zwischen beiden besteht in der Behandlung des Audio-Tracks. UnalignedSplice fügt die Audio-Tracks aneinander, ohne die Synchronisation zum Video zu beachten. AlignedSplice schneidet den ersten Audio-Track ab oder fügt Stille ein, um sicherzustellen, dass der zweite Track synchron zum Video bleibt.

    UnalignedSplice sollte verwendet werden, wenn die verwendeten Soundtracks ursprünglich zusammenhängend waren (zum Beispiel bei Dateien, die mit einem Capture-Programm aufgenommen wurden). Kleine Fehler im Timing können sonst zu Sprüngen im Audio-Teil führen, wenn hier AlignedSplice verwendet wird.

    AviSynth stellt die Operatoren + und ++ als Abkürzungen für UnalignedSplice und AlignedSplice zur Verfügung.

    Siehe auch hier zu den entstehenden Clip-Eigenschaften.

    Beispiel 1:
    # Segmente einer Aufnahme zu einem Clip zusammenfügen
    UnalignedSplice(AVISource("cap1.avi"),AVISource("cap2.avi"),AVISource("cap3.avi")) 
    # oder:
    AVISource("cap1.avi") + AVISource("cap2.avi") + AVISource("cap3.avi")

    Beispiel 2:
    # drei Szenen aus einem Clip schneiden und diese in einer anderen Reihenfolge zusammenfügen
    AVISource("video.avi")
    edited_video = Trim(2000,2500) ++ Trim(3000,3500) ++ Trim(1000,1500)

    AssumeFPS
    AssumeFPS(clip, float fps, bool "sync_audio")
    AssumeFPS(clip, int numerator[, int denominator], bool "sync_audio")

    Dieses Filter ändert die Frame-Rate ohne die Frame-Anzahl zu ändern, das Video wird also schneller bzw. langsamer abgespielt, es wird lediglich der Framerate-Wert verändert.
    Wenn sync_audio = true gesetzt wird, wird auch die Sample-Rate vom Audio entsprechend verändert, damit die Spieldauer vom Audio gleich dem Video ist. Die Tonhöhe ändert sich dadurch.

    Das kann z.B. verwendet werden, um ein 24fps-Video (Kinofilm) auf 25fps (PAL) zu bringen, ohne zusätzliche Frames einfügen zu müssen (die kleine Erhöhung der Tonlage ist kaum hörbar).

    FadeOut / FadeOut2
    FadeOut(clip, int frames)
    FadeIn(clip, int frames)

    FadeOut2(clip, int frames)
    FadeIn2(clip, int frames)

    FadeOut und FadeOut2 blenden das Video linear zu einem schwarzen Bild aus. Auch das Audio wird linear zu Stille ausgeblendet. Das Ausblenden betrifft immer nur die letzten frames Frames vom Clip. Der letzte Frame ist nur fast ganz schwarz, daher wird am Ende noch ein ganz schwarzer Frame angehängt. Die Frameanzahl wird daher um eins erhöht.

    FadeOut2 arbeitet genauso, ausser dass zwei schwarze Frames angehängt werden. Der einzige Verwendungszweck dafür ist ein work-around für einen Fehler im Windows Media Player (der letzte Frame einer MPEG-Datei wird nicht abgespielt, sondern der vorletzte bleibt sichtbar).

    FadeIn und FadeIn2 machen das Gleiche am Anfang eines Clips.

    SelectEven / SelectOdd
    SelectEven(clip)
    SelectOdd(clip)

    SelectEven setzt ein Video aus den geradzahligen Frames des Quellvideos zusammen, SelectOdd aus den ungeradzahligen.

    Da in AviSynth die Numerierung von Frames bei Null beginnt, nimmt SelectEven den ersten, dritten, fünften u.s.w. Frame.

    Quelle: deutsche AviSynth Dokumentation

  • AssumeFrameBased / AssumeFieldBased
    AssumeFrameBased(clip)
    AssumeFieldBased(clip)

    AviSynth merkt sich ob ein Clip in fields oder frames vorliegt. Wenn das Clip aus fields besteht, wird ausserdem die Parität (also ob es ein Top- oder Bottom-field ist) von jedem field mitgeführt. Wenn das Clip aus frames besteht, wird das dominante field mitgeführt (d.h. welches field zuerst abgespielt wird).

    Diese Information ist allerdings nicht immer korrekt, da sie normalerweise nicht in den Video-Dateien mitgespeichert ist und AviSynth's Quell-Filters immer einen Standardwert verwenden.AssumeFrameBased und AssumeFieldBased können verwendet werden, um AviSynth den richtigen Typ mitzuteilen.

    AssumeFrameBased löscht die vorhandene Information und es wird angenommen, dass das Clip aus frames mit einem bottom field als dominantes field besteht. Wenn das top field dominant sein soll, kann man danach ComplementParity verwenden.

    AssumeFieldBased löscht die vorhandene Information und es wird angenommen, dass das clip aus fields besteht, die geradzahligen fields als bottom fields und die ungeradzahligen fields als top fields. Auch hier kann ComplementParity zum Umdrehen verwendet werden.

    AssumeTTF / AssumeBFF
    AssumeTFF(clip)
    AssumeBFF(clip)

    Setzt die Halbbild-Reihenfolge unabhängig vom aktuellen Wert.

    ComplementParity
    ComplementParity(clip)

    Wen das Quell-Clip field-basiert ist, ändert ComplementParity top fields zu bottom fields und umgekehrt. Wenn das Quell-Clip frame-basiert ist, wird das dominante field getauscht (bottom-dominant zu top-dominant und umgekehrt).

    DoubleWeave
    DoubleWeave(clip)

    Wenn das Quell-Clip field-basiert ist, funktioniert das DoubleWeave Filter wie Weave, ausser dass die doppelte Anzahl an frames erzeugt wird: anstatt fields 0 und 1 zu frame 0, field 2 und 3 zu frame 1, und so weiter zu kombinieren, wird field 0 und 1 zu frame 0, field 1 und 2 zu frame 1, und so weiter kombiniert. Die frame rate und die frame-Anzahl wird daher nicht verändert.

    Wenn das Quell-Clip frame-basiert ist, arbeitet das Filter als ob vorher die fields mittels SeparateFields getrennt wurden.

    Weave ist eigentlich eine Abkürzung für DoubleWeave gefolgt von SelectEven.

    Meistens wird man ein Filter wie SelectOdd oder Pulldown nach diesem Filter verwenden, falls man nicht wirklich ein 50fps oder 60fps Video will. Es mag ineffizient aussehen, zuerst alle field-Paare zu interlacen und dann gleich die Hälfte der entstehenden frames wegzulassen. Da aber AviSynth die frames nur auf Anforderung wirklich berechnet, werden nie benötigte frames auch nie erzeugt.

    Wenn man field-basiertes Video, zum Beispiel Material von der Video-Kamera bearbeitet, wird man dieses Filter eher nicht brauchen. Um NTSC-Video, dass von einem Film konvertiert wurde, mit dem Pulldown-Filter zubearbeiten, braucht man zuerst DoubleWeave. Siehe auch bei Pulldown für weitere Erklärungen.

    Wenn man PAL-Video bearbeitet, dass von Film-Material konvertiert wurde, braucht man kein Pulldown, man könnte aber DoubleWeave so verwendet:

    # Das "PAL deinterlace" Filter von VirtualDub nachbauen
    DoubleWeave
    SelectOdd

    SeparateFields
    SeparateFields(clip)

    NTSC und PAL Video-Signale sind eigentlich eine Hintereinanderreihung von Fields, aber alle Capture-Karten nehmen zwei Fields gleichzeitig auf und verzahnen oder verweben ("weave") diese zu einem Frame. Daher enthält Frame 0 in der aufgenommenen Datei die Fiels 0 und 1, Frame 1 enthält die Fields 2 und 3 und so weiter.SeparateFields nimmt ein Frame-basiertes Clip und teilt jeden Frame in die Fields, aus denen er besteht. Dadurch entsteht ein neues Clip mit der doppelten Frame-Rate und auch der doppelten Frame-Anzahl.
    Das ist nützlich, wenn man Trim und ähnliche Filter Field-genau verwenden will.

    Ausserdem muss so ein Interlaced-Video vorher in die Fields geteilt werden, wenn man Filter verwenden will, die in vertikaler Richtung etwas verändern, z.B. die Höhe ändern. Nach dem Filter werden die Fields dann wieder mit Weave zusammengefügt.

    SeparateFields verwendet die Field-Dominanz-Information des Quell-Clips um die Reihenfolge der Field-Paare zu bestimmen. Wenn dies ein falsches Ergebnis liefert, kann davor ComplementParity verwendet werden. Es könnte auch sein, dass man vorher AssumeFrameBased verwenden muss, falls das Clip fälschlicherweise schon als Field-basiert gekennzeichnet ist..

    Das Filter macht nämlich nichts, wenn das Clip schon field-basiert ist.

    SwapFields
    SwapFields(clip)

    Dieses Filter tauscht Zeile 0 mit Zeile 1, Zeile 2 mit Zeile 3, usw., tauscht daher die Fields in einem Interlaced Frame. Das gleiche geschieht bei
    SeparateFields.ComplementParity.Weave.

    Weave
    Weave(clip)

    Weave ist das Gegenteil von SeparateFields: es nimmt Paare von Fields vom Quellvideo und kombiniert diese zu Interlaced Frames. Das entstehende Clip hat die halbe Frame-Rate und die halbe Frame-Anzahl. Weave verwendet die Frame-Paritäts-Information con Quell-Clip, um zu ermittlen, welches Field mit der ersten Zeile beginnt. Wenn dies ein falsches Ergebnis liefert, kann voher ComplementParity oder nachherSwapFields verwendet werden.

    Alle AviSynth-Filter führen die Field-Parität mit, daher kombiniert Weave die Fields immer in der richtigen Reihenfolge.

    Dieser Filter macht gar nichts, wenn das Clip schon Frame-basiert ist.

    Quelle: deutsche AviSynth Dokumentation

  • Haben im FlaskmpegBoard in einem Post:
    http://www.flaskmpeg.info/board/thread.p…id=22&styleid=4
    mal einige Beispiele gepostet, vielleicht ist dabei ja auch noch was interessantes das man hier noch anhängen könnte als "nützliche Beispiele"

    Cu Selur

    Ps.: Hab momentan leider nicht soviel Zeit, sonst würd ich mir alles mal angucken und eventuell selber posten ;)

Jetzt mitmachen!

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