VHS filtern mit Avisynth

Mit Virtualdub lassen sich die meisten Problemfälle für VHS leicht lösen
aber raffinierte Bearbeitung und Korrektur ist mit Avisynth möglich.

Erweiterte deutsche Hilfe für Avisynth, Scripte für VHS Bearbeitung,
automatischer Ersatz von Duplicate Frames in VHS Grabbings, Links.

Avisynth installieren
Deutsche Hilfedateien für Avisynth
Avisynth Skripte zur Nachbearbeitung von VHS
Duplicate Frames im VHS grabbing ersetzen durch interpolierte Zwischenbilder
Skriptbaukasten
Avisynth-Beispielskript zum Bearbeiten von VHS-Video
Audio abtrennen
Gradationskurven übernehmen aus Virtualdubfilterkette
Links

Avisynth installieren

Du benötigst

Installiere die Programme. Bei Avisynth müssen die Verzeichnisse angegeben werden, in denen Du die Plugins vorrätig hälst.

Die x86- und x64 Version sind zwei völlig getrennte Ökosysteme. Um ein Avisynth-x64 Skript laufen zu lassen, benötigtst du Avisynth+ x64, Virtualdub x64 und auch die Plugins als x64-Version.
Hingegen kann das eigentliche Avisynth-Skript prinzipiell in beiden Umgebungen laufen, solange darin nicht explizit Plugins über ihre Verzeichnisse addressiert werden.

Derzeit (2019) laufen Skripte in der Regel in der x86 Version von Avisynth etwas schneller, als in der x64 Version.
Allerdings kann sich in der x86 Version schneller ein Speichermangel bemerkbar machen, da eine x86-Software nur bis zu 4 GB nutzen kann.

Über Avisynth

Avisynth ist ein FrameServer, also eine Software, die andere Programme mit vorverarbeiteten Frames (Bildern und Ton eines Videos) versorgen kann. Daher kannst du Avisynth Scripte mit einigen Videoplayern und mit VirtualDub öffnen, die sich dann im Hintergrund die Videoframes aus Avisynth abholen.

Der Editor AvsPmod kennt Syntaxhighlighting für die Avisynth Scriptbefehle. Er kann beliebig wählbare Bereiche deines Scripts aktivieren und deaktivieren. Das ist praktisch, um die Wirkung bestimmter Bearbeitungsschritte auszuprobieren. Er kann auch Schieberegler bereitstellen, mit denen du bequem Werte für Filter verändern kannst.
Sehr praktisch ist die bildweise Vorschau des fertigen Films. Kombiniert mit den Tabs kann man so verschiedene Varianten des eigenen Skripts gleichzeitig öffnen, und durch Umschalten direkt die Auswirkungen der Veränderungen auf das Bild begutachten.
Dem Programm AvsP musst du den Pfad zum Kommandozeilenwerkzeig AVS2AVI mitteilen. Dieses kannst du verwenden, wenn du nicht vorhast, einen Film in Echtzeit zu betrachten (das geht bei aufwändiger Bearbeitung sowieso oft nicht, da Avisynth schleichend langsam ist), sondern wenn der Film so schnell wie möglich vor sich hin gerendert werden soll.
Praktischer ist es jedoch, das fertige Avisynth-Skript mit Virtualdup zu öffnen, und dann mit Virtualdup zu rendern.

AvsP Avisynth editor
Abbildung: AvsPmod mit einem geöffneten Avisynth Script, Vorschau des bearbeiteten Videoclips und Schiebereglern

Wenn alles installiert ist, öffne die mitgelieferte Hilfe und arbeite dich am Besten anhand der Beispiele schrittweise ein.

Avisynth erfordert einiges an Einarbeitungszeit und du wirst am Anfang sehr viele Beiträge im Internet lesen müssen, bevor du mit der Sache vertrauter wirst. Als Anfänger solltest du nicht gleich in Foren um Rat fragen. Die anderen mussten sich zunächst auch in Avisynth allein einarbeiten, und sie erwarten so viel Disziplin auch von dir.

Deutsche Hilfedateien für Avisynth

Die von Avisynth mitgelieferten deutschen Hilfedateien sind sehr mager.
Erweiterte deutsche Hilfe für Avisynth runterladen (Changelog, Hinweise zur Mithilfe)

Entpacke das Archiv in einen freien Ordner und kopiere dann die Hilfedateien nach
Avisynt\Docs\German.

WICHTIG! Vermeiden von Bildverlusten (Dropped Frames) beim Importieren

Vor der ersten Bearbeitung sollten die Video-Rohdaten mit Hilfe von VirtualDub2 eingelesen und umkodiert werden!
Sonst können Frames verloren gehen, wodurch Bild und Ton auseinanderlaufen.

Mehr dazu steht unter: Vermeiden von Bildverlusten (Dropped Frames) beim Importieren.

Avisynth Skripte zur Nachbearbeitung von VHS aus verschiedenen Foren

In den einschlägigen Foren wurden schon einige einfache Skripte gepostet, die speziell für VHS Grabbings gedacht sind.
Bevor du beginnst, eigene Skripte zu schreiben, solltest du diese erst einmal ansehen, verstehen und ausprobieren.

Duplicate Frames im VHS grabbing ersetzen durch interpolierte Zwischenbilder

USB Video Grabber ersetzen schlecht synchronisierte Bilder automatisch durch Kopien des letzten noch korrekt gelesenen Frames. Im Ergebnis sind Teile des resultierenden Videos mit einzelnen oder mehreren doppelten Frames aufgefüllt.
Bei längeren Lücken scheint das Bild kurzzeitig einzufrieren.
Vor allem bei VHS-Aufnahmen tritt dieses Problem auf.
Pro Stunde Aufzeichung von VHS habe ich schon bis zu 1500 doppelte Frames gefunden.

Hier gibt es eine Lösung: MorphDups ist ein Avisynth Skript, das solche doppelten Frames findet. Es erzeugt bei der Suche ein zweites Skript (morphmydups.avs) mit einer Funktion, die diese Duplikate ersetzt. Dazu wird die Funktion Morph von Mud Funky genutzt, die künstliche Zwischenbilder errechnet, und mit ihnen die Duplikate ersetzt. Man erhält eine fließende Bewegung zwischen dem ersten Frame der Lücke und dem ersten Frame nach der Lücke.

Replace duplicated frames with Interpolation – Diskussionsthread mit Verweisen auf mehrere ähnliche Lösungen.

Interpolating duplicate frames in grabbed VHS
Die Duplikate in der Lücke werden durch interpolierte Zwischenbilder ersetzt

Das generierte Script sieht so aus:

function morphmydups (clip c) {
   c
 # morph(56,67)           # YDiffNext=10.803629, length = 10==========
   morph(103,105)           # YDiffNext=4.838520, length = 1=
   morph(106,108)           # YDiffNext=4.491889, length = 1=
   morph(109,111)           # YDiffNext=4.452096, length = 1=

} # End of function

Im deinem eigenen Script kannst du morphmydups.avs dann so verwenden:

#0. Imports, Loadplugin ....................­.................................
#import ("J:\plugins\Morph1b.avs") # überlagert einen Infotext auf interpolierten Frames 
import ("J:\plugins\Morph.avs")  
loadplugin ("J:\plugins\mvtools2.dll") #Pfad zu deinen Plugins hier anpassen
import ("morphmydups.avs")             # evtl. Pfad zum Skript hier angeben

stack=true #true= Debug-Ansicht: Quelle und interpolierte Version gleichzeitg ansehen  

#1. Datei öffnen ...........................­.........................­................... 
AVIFileSource("J:\test\test79400.avi") 
source=last 

#morph function.......................­.........................­................... 
morphmydups(source)

#Debug view  ................................­........................­................... 
stack ? stackvertical(last, source.subtitle("Input (unprocessed)")).\
+BilinearResize(width(source)/2, height(source)):last 

Eigene Skripte schreiben

Im Prinzip sind Avisynth-Skripte nach genau dem selben Schema aufgebaut, wie die typische Filterreihenfolge in Virtualdub. Der Unterschied liegt eher in der Qualität der Filter. Für Avisynth gibt es Interlacer, die mehr Details des Bildes erhalten und ausgeklügelte adaptive Rauschfilter, adaptive Schärfefilter und Filter für einige spezielle Bildstörungen.

Bevor wir uns an die Reparatur wagen, wollen wir uns vergegenwärtigen, mit welchen Störungen wir bei VHS rechnen müssen.

Typische Störungen in VHS Aufnahmen

Öffne ein VHS Grabbing in Virtualdub und bewege dich langsam frameweise durch das Video. Du wirst wahrscheinlich folgende Störungen sehen:

Zusätzliche Probleme durch Mehrfachüberspielungen (Kaufkassetten):
Zeilenstörungen, VHS Überschärfung (Halos), Weichzeichung und Chroma-Versatz vervielfachen sich.

Zusätzliche Probleme bei Aufnahme von Analog-TV:
stärkeres Rauschen, Geisterbilder, Chroma-Störungen (Moiree, Regenbögen), Interferenz durch Nachbarsender (Diagonale Streifen)

Zusätzliche Probleme bei alten Filmen:
Helligkeitsschwankungen (Flicker), Wackeln des Bildes, senkrechte Kratzer, Flecken (Spots), ausgeblichene Farben, Farbstich

Avisynth Scriptbaukasten

Dies sind die wichtigsten Skripte und Filter für typische Aufgaben der Videonachbearbeitung.

8 mm Schmalfilm restaurieren:
        alter Thread mit Beispielscripten: The power of Avisynth: restoring old 8mm films
        neuer Thread ab 2017: The power of Avisynth: new 8mm film restoring examples
exotische Formate öffen:
        siehe avisynth.org/mediawiki/FAQ_loading_clips
Deinterlace: 
        das oben erwähnte Script von Didée interpoliert die verwackelten Zeilen von VHS besser, 
        als alles andere, und erledigt dabei auch noch Chromashift, Chroma nachschärfen, 
        schärfen und temporal filtern
        TDeint (schnell und scharf, reicht für VHS)
        scharfe Deinterlacer für gute Digitalquellen: QTGMC, MCBob, MvBob, TDeint
Folgen von Normwandlungen beseitigen (falsche Zwischenbilder)
        Srestore ersetzt überblendete Zwischenbilder (siehe hier)
	RestoreFPS, Exblend - entfernen bei Frameratekonversion eingefügte Blendings
Blockartefakte aus Videos mit schlechter Bitrate entfernen
        amDCT ist adaptiv auf Frame, Block- und Pixelebene
        Deblock QED (Didée), DeBlock (Manao, Fizick), qqfix
Chroma Delay:
        ChromaShiftSP.avsi (erlaubt Verschiebung mit Subpixel-Genauigkeit)
Farbe an Kanten versteilern:
        mt_edge
Farben anpassen
        Colormill aus Virtualdub2 verwenden
Flatterzeilen gerade richten (schlechte Zeilensync): bisher keine Softwarelösung 
        Das TBC Script von 2008 und Dejitter leisten dies nicht! (siehe Diskussion)
        Der Versatz entsteht nicht, wenn das Signal vor dem Capturen einen Hardware-TBC durchläuft.
Bild stabilisieren: 
        Depan (nur bei wackligen Kameraufnahmen und altem Film), Deshaker3D (mit perspektivischer Entzerrung), Deshaker
Flackern entfernen: 
        ReduceFlicker (nur bei altem Film nötig)
Flecken (Spots) entfernen: 
        RemoverdirtMC(), DeSpot
Levels anpassen:
        SmoothAdjust (SmoothLevels)
Kratzer entfernen
        siehe dieses Posting 
Temporal Entrauschen: 
        mdegrain2 - temporal Smoother mit Bewegungskompensation, entspricht etwa temporal 5 in Vdub
        mdegrain  - temporal Smoother mit Bewegungskompensation, entspricht etwa temporal 3 in Vdub
        die verschiedenen Varianten fast das super-Script SMDegrain zusammen (SMDegrainMod, 2)
        Neat Video for Virtualdub (zaubert viele Details hervor)
VHS-Störungen entfernen:
        weiße oder schwarze horizontale Störzeilen: deVCR (Ricardo Garcia), Depulse, DepulseC
Halos bzw VHSÜberschärfung entfernen: (nur wenn nötig)
	HaloBuster
        BlindDeHalo, BlindDeHalo3 (mit Strength < 70)
        FixVHSOversharp, YAHR (Didée)
Schärfen:
        SeeSaw, LSFmod, limitedsharpen faster (schärfen 3x3 Area, bei VHS erst nach verkleinern sinnvoll)
        für sehr scharfe Quellen von DVD (nicht für VHS): iiP 
        FQFocusDeFocus, FQRestore (schwer einzustellen)
        erhöhen feiner Details in DVD-Quellen: Plum for VapourSynth
    Für Cartoons/Animee: SuperToon, aWarpSharp2, Toon1.1
	Echtzeitschärfen von HQ Quellen während Wiedergabe: FineSharp
Finales Beschneiden:
        Crop
Resize auf Endgröße: 
        LanczosResize oder das schärfere Lanczos4Resize(512,384 oder 480,352)
        bei starken Vergößerungen (Faktor 2) Interpolation mit NNEDI3
	noch besser: AviSynthShader + SuperRes - erzeugt feinere Details
Szenenwechsel automatisch finden: verschiedene Ansätze (siehe Forumsbeitrag)
Broadcast Störungen beseitigen (bei Aufzeichnung von Analogempfang)
        Geisterbilder entfernen: Ghostbuster oder Virtualdub Exorcist
        Chroma-Rauschen entfernen: CNR2 (Nur bei Aufnahme von verrauschen TV Broadcasts)
Farben anpassen: (nur bei altem Film oder eigenen Videos nötig)
        GamMAC streckt automatisch die Histogramme in RGB auf den selben Bereich 
        manuell erfolgt dies am besten mit dem Virtualdub Plugins Gradition und ColorMill
        vorübergehend in Graustufen anzeigen: Greyscale
        Gamma, Levels anpassen: Levels, SmoothLevels (zeigt auch Histogramm)
        Farbsättigung ändern (auch für einzelne Farben): Tweak
        Farbsättigung und Farbbalance ändern (Ge-Bl, R-G): SmoothTweak
        Gradationskurve (auch für R,G,B separat): SmoothGradationRGB.avs (von dieser Seite)
	HDR Effekt (lokalen Kontrast erhöhen): HDRAGC
        Helligkeit, Kontrast ändern: Nicht angeraten, besser mit Levels und Gradationskurven arbeiten
Farben: ausgeblichene Highlights korrigieren: siehe improve overexposed
		Filmrauschen simulieren (macht Videos mit wenig Details lebendiger)
        Grainfactory3
Blending zwischen Frames beseitigen:
        Exblend (macht weniger Artefakte als die anderen), srestore,  FixBlendIVTC
Geometrische Verzerrung:
        perspektische Trapezverzerrung: Reform (V. C. Mohan)
        schräger Zeilenversatz: SkewRows
        Drehen: rotate (Fizick)
Duplicate Frames durch Interpolationen ersetzen:
        MorphDups
Framerate conversion (Bildrate/s umwandeln)
        Sammlung (PAL->NTSC, TNSC-> Pal und andere), Verdopplung in Echtzeit, interframe
Hohe Bittiefe (10 bit) verwenden
        High bit-depth Support with Avisynth
Bildelemente überlagern
       mt_merge (aus Masktools 2,  für YV12 video, YUY2 nur mit Tricks, RGB gar nicht)
       Overlay() (langsam und vielseitig, alle Farbräume)
       Layer() für RGB und YUY2 clips, kann bei RGB32 den Alphakanal als Maske verwenden

Verwende eine Suchmaschine, um die Plugins zu finden. Die meisten sind auf der Avisynth-Webseite verlinkt.

Manche Skripte benötigen ältere Versionen eines Plugins. In diesen Skripten musst du dann explizit die nötigen Plugins laden (mittels loadplugin ("Pfad zum Plugin") ).

Avisynth-Beispielskript zum Bearbeiten von VHS-Video

Dieses Skript enthält folgende Bearbeitungsschritte. Je nach Qualität des gegrabbten Videos benötigst du nur einzelne von diesen Schritten. Nur sehr selten wird alles notwendig sein:

Video laden – verschiedene Varianten möglich

Chroma-offset korrigieren: ChromaShiftSP ()

Deinterlacer: Qtgmc () – verringert Shimmern von Kanten und kann bei Bedarf das Bild verschärfen (Kanten klarer trennen) ohne die sonst üblichen Artefakte sowie Rauschen vermindern

Temporales Entrauschen über 0...6 Frames: SMDegrain()

VHS-Überschärfung entfernen (nur horizontal): FixVHSOversharp ()

Chroma schärfen (Flanken versteilern an Luma):  aWarpSharp2 ()

Bildschärfe erhöhen, Details herausarbeiten: Schärfungsalgorhithmus aus "Videofred's 8 mm script", LimitedSharpenFaster () und andere

Hochskalieren auf doppelte Auflösung: Nnedi3 ()
 

VHS Script 2018 – Version des Skriptes, in der explizit alle benötigten Plugins adressiert und geladen werden.
Die Befehle zum Laden sind auskommentiert, können aber durch Löschen der "#"-Zeichen am Zeilenanfang freigeschaltet werden. In dem Fall musst du die Pfadangaben anpassen, so dass sie zum richtigen Verzeichnis auf deinem System zeigen.

Natürlich kann noch sehr viel mehr nötig sein: Verwackler reduzieren, Rainbowing entfernen, Farbanpassungen, ...

Audio abtrennen

Bei komplexen Bearbeitungen des Videos lasse ich gern die Audiospur völlig außen vor und füge sie erst am Schluss dem fertigen Video hinzu (nach dem Rendern). Je nach Herkunft des Videos (Videokamera, Internet, DVD) kann die Audiospur in irgendeinem exotischen Format vorliegen. Nicht immer passt dieses zum später anvisierten Container.
Es gibt mehrere Möglichkeiten, um exotische Formate wie aac umzuwandeln. Wenn du für die Umwandlung das Programm Avidemux nutzt, musst du dich nicht in Spezialsoftware einarbeiten.

So gehts: Öffne das Ausgangsvideo mit Avidemux. Wähle links unter dem Punkt Audio deinen Zielcodec. Bei MP3 sollte die Bitrate etwas höher als im komprimierten Original liegen, um Qualitätsverluste zu vermeiden. Dann wähle Audio > Tonspur speichern … und gib den Namen an, unter dem du die konvertierte Audiospur speichern willst.

Ins fertige Video kannst du diese Audiospur einmuxen mit Hilfe von Virtualdub oder auch mit Avidemux. Beide Programme musst du anweisen, die externe Audiospur zu laden, und die geladene Videospur zu übernehmen (copy). Dann das Ausgangsvideo speichern.

Gradationskurven übernehmen aus Virtualdub-Filterkette

Mit dem hier präsentierten Werkzeug kannst du in Avisynth die Farbveränderungen deine Lieblingsprozesses aus Virtualdub nachbilden. Es besteht aus zwei Teilen:

faded film and color correction in virtual dub
AvsP Avisynth editor
Abbildung: Alter Film und bearbeitete Variante in Virtualdub,
die Wirkung der selben Filter auf einen Graukeil und die daraus resultierende Gradationskurve

Links