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
Audio abtrennen
Gradationskurven übernehmen aus Virtualdubfilterkette
Links

Avisynth installieren

Du benötigst

Installiere alle drei Programme. Bei Avisynth solltest du das angebotene Standardverzeichnis beibehalten.

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 Filmbilder aus Avisynth abholen.
Der Editor AvsP 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, da du hier die Prozessorlast des Renderprozesses stufenlos einschränken kannst. Dein Prozessor dankt es dir, und du bekommst bei Bedarf genug Prozessorzeit für andere Anwendungen freigeschaltet.

AvsP Avisynth editor
Abbildung: AvsP 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.

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.

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
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)
 	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
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. Viele Plugins und Skripte benötigen ihrerseits andere Skripte und Plugins. Es ist nicht ratsam, Plugins direkt in das Plugin-Verzeichnis von Avisynth zu speichern, so dass diese automatisch geladen werden. Manche Skripte benötigen ältere Versionen eines Plugins, und man kann nicht verschiedene Versionen gleichzeitig in das Verzeichnis legen, da das seltsame Fehler hervorrufen kann. Besser ist es, alle Plugins in einem bequem erreichbaren Sammelverzeichnis abzulegen. In den Skripten musst du dann explizit die nötigen Plugins laden (mittels loadplugin ("Pfad zum Plugin") ).

Damit du die wichtigsten Avisynth-Filter und ihre Wirkung leicht ausprobieren kannst, habe ich die folgende Scriptsammlung geschrieben. Pro Scriptdatei sind immer die wichtigsten Plugins für ein bestimmtes Thema vereinigt – beispielsweise alle Denoiser. Wenn du diese Dateien mit AvsP lädst, bekommst du Slider für die Einstellung der wichtigsten Parameter, und du kannst jedes Plugin im Script mit einem Klick an- und abschalten. In dein eigenes Skript kannst du dann die für dich sinnvollsten Abschnitte kopieren.

Donwload-Link folgt ...

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