AVISynth-Script zum Denoisen (VHS)

  • Hallo allerseits,

    bin neu hier und hätte eine Frage bezgl. der Richtigkeit eines Scripts.

    Ausgangsgrundlage: S-VHS-überspieltes Material (720*576*interlaced), was als HuffYuv-kodierte avi-Files vorliegt. Rauschbearbeitung + Deinterlacing soll mittels AviSynth erfolgen. Schlußformat soll DVD sein.

    Leider bin ich recht neu auf dem Gebiet AviSynth. Habe Google bereits bemüht und einige interessante Scripte von Didee & Scharfisbrain gefunden. Dank dieser Scripte sieht mein Script nun wie folgt aus:
    ---------------------------------------------------------------------------
    Import("C:\Programme\AviSynth2\plugins\VHSSharp.avs")
    LoadPlugin("C:\Programme\AviSynth2\plugins\convolution3d.dll")
    LoadPlugin("C:\Programme\AviSynth2\plugins\warpsharp.dll")
    LoadPlugin("C:\Programme\AviSynth2\plugins\DustV5.dll")

    AVISource("K:\VIDEO\xxxxx.avi")

    Convolution3D (0,32,128,16,64,10,0)
    PixieDust(5)
    VHSSharp(4)
    Tweak(hue=0.0,sat=0.9,bright=0.0,cont=1.0)
    ---------------------------------------------------------------------------

    Meine Fragen wären nun: Wäre das Script jetzt so okay? Im VDub sah das Bildmaterial ohne PixieDust noch leicht verrauscht aus; nach Hinzufügen von PixieDust dann okay. Weiter würde ich zum Deinterlacen TomsMoComp nutzen. Wie füge ich den mit welchen Einstellungen am sinnvollsten ein?

    Für eure Tipps wäre ich echt dankbar! :)

    Beste Grüße Danny

  • bitte einfach mal auf die Daten (mehrzahl von Datum) der Beiträge gucken, aus denen Du die Informationen geholt hast.
    Das ist schon längst schnee von übervorgestern...

    convolution3d, pixiedust und vhssharp sind schon längst durch bessere methoden ersetz worden...

  • Okay, ich geb zu, daß die Beiträge von 2006 (wenn ich nicht irre) waren. Im Endeffekt geht´s ja doch aber ums Ergebnis, oder?
    Hast Du vielleicht den ein oder anderen Link? War ja schon froh, daß ich diese Lösungsansätze von Dir und Didee gefunden hatte.

    Danke & Gruß Danny

  • Wenn ich recht verrauschtes Material in Angriff nehme, versuche ich, mit einem der folgenden, neueren Scripts (alle ausgiebig behandelt im engl. doom Forum) ein passables Ergebnis zu bekommen:

    - TemporalDegrain (es existieren 2 Versionen - HQ und VHS) von Didée
    - TempGaussMC_alpha3 (auch von Didée)
    - MC_Spuds (von Spuds).

    Die Geschwindigkeit ist nicht so prall (lol... so 1-3 fps!), aber die Ergebnisse sind den Aufwand und die Wartezeit wert. Ferner gibt es noch die Möglichkeit, bei o.g. Scripts die Geschwindigkeit mit Unterstützung von MT bei Core2Duo-Prozessoren zu erhöhen.

    Gruss

  • Kleine Korrekturen:

    - TemporalDegrain verwendet ein Konzept, das ich mal für ein Spezial-Problem ("300") vorgestellt hatte. Die fix-und-fertig-Funktion als solches ist nicht von mir.

    - TempGaussMC ist eigentlich ein Bob-Deinterlacer (auch wenn's der Name nicht vermuten lässt), der hauptsächlich Bob-Flicker wegfiltert, und dabei als Nebeneffekt auch noch Rauschen mitnimmt.


    Zum Ausprobieren würde ich auch noch GTDegrain empfehlen. (Ist auch nicht von mir, hab' nur geholfen, die anfänglich unzureichende Umsetzung zu berichtigen.) Ist relativ einfach in der Bedienung, nicht zu langsam, und macht seinen Job ziemlich gut. Könnte gerade auch für VHS gut geeignet sein, hab's selber aber noch nicht mit solchem Material getestet.

  • Danke @ Didée! Allerdings hätte ich da nochmal ne blöde Anfängerfrage (auch auf die Gefahr hin, belächelt zu werden): :hm:

    1. Ist das auch für interlaced Material?
    2. Wo bitte kommt der Pfad zur avi-Datei eingefügt?

    Irgendwie fehlt das immer in solch komplexen Scripts.

    Danke & Gruß Danny

  • > 2. Wo bitte kommt der Pfad zur avi-Datei eingefügt?

    Prinzipiell geht's genau so wie in dem Script in Deiner ersten Post. Du importierst zusätzlich das Script mit der gewünschten Funktion, und lädst die von dem jeweiligen Script benötigten zusätzlichen Plugins (z.B. mt_masktools.dll, removegrain.dll und repair.dll werden sehr häufig benötigt...). Danach kannst Du im Script diese Funktion in der gleichen Weise wie einen Plugin-Filter benutzen. Also so, wie Du's mit "VHSSharp.avs" bereits gemacht hast.


    > 1. Ist das auch für interlaced Material?

    TemporalDegrain, MC_Spuds, GTDegrain: Nein, diese Rauschfilter sind nur für progressives Material, für interlacte Quellen sind sie NICHT ausgelegt. Da müsste dann *vorher* deinterlaced werden.

    TempGaussMC: Ja, der ist ja ausdrücklich für interlacte Quellen. Verdoppelt aber auch die Bildrate (eben "bobbing"), für normale Bildrate muss danach noch ein "SelectEven()" erfolgen, oder ein "SeparateFields().SelectEvery(4,0,3).Weave()", wenn das Endergebnis interlaced bleiben soll.

    Übrigens solltest Du erst einmal klar machen, welche Art von interlacing Dein VHS eigentlich enthält. Sicher dass das "echtes" interlacing ist (50 zeitlich verschiedene Halbbilder pro Sekunde), und nicht etwa progressiv Phase-shift, oder Normwandlung mit Fieldblending, oder womöglich ein Pulldown ... ?

  • zu 1: TemporalDegrain, GTDegrain und mc_spuds benötigen einen gesonderten Filter für Deinterlacing.

    zu 2: So wie Du das Script geschrieben hast (s.o.), steht die Pfadangabe zur Videodatei an der richtigen Stelle. Übrigens brauchst Du die "LoadPlugins" nicht extra aufzuführen; diese werden automatisch geladen, sofern sich die benötigten dlls im plugin-Ordner befinden. Dies gilt nicht für gesonderte avs-Scripte, die mittels Import geladen werden müssen (es sei denn, du benennst sie in avsi um, was wiederum zu Konflikten beim automatischen Laden mehrere Scripte führen kann).

  • Ahhh okay, verstehe. Das Script ist also wie ein Plugin anzuwenden. Jetzt hat´s "klick" gemacht!

    Zur Frage "interlaced oder progressive":
    Das vorliegende Videomaterial wurde von ner alten Hi8-Cam überspielt und anschließend (Jahre später!) von nem SVCD-Rec. gecaptured. Da sich am Monitorbild die typischen interlaced-Streifen zeigen, nehme ich mal an, daß es sich um interlaced Material handelt.

    Da das Material später allerdings auf DVD gebracht werden soll (Ansicht sowohl DVD, als auch PC) komme ich ums deinterlacen wohl nicht herum.
    Ich hatte schon in einem älteren Beitrag von Dir gelesen, daß der TomsMoComp wohl die beste Wahl zum Deinterlacen wäre. Gibt´s dafür irgendein Script, was nur das Deinterlacing ausführt?

    Dann würde ich erst Deinterlacen und danach GTDegrain ausführen wollen. Das Material ist zwar nicht allzu stark verrauscht, aber man kann die Optionen im Script wohl anpassen (so wie ich gesehen habe).

    Nochmals vielen Dank für Deine Hilfestellung ... :)

    Gruß Danny

  • Übrigens brauchst Du die "LoadPlugins" nicht extra aufzuführen; diese werden automatisch geladen, sofern sich die benötigten dlls im plugin-Ordner befinden.


    Schon richtig, aber u.U. auch "gefährlich". Es gibt ein paar wenige Plugins, die *nicht* mit auto-Loading funktionieren, und dann komische Effekte bis hin zum Absturz der Anwendung produzieren. Und dann haben die Leute dreihundert Plugins im Plugin-Verzeichnis, weil dort alles wild hineingestopft wird ..... und dann finde mal den Fehler.

    Alles manuell zu laden ist zwar manchmal lästig, trotzdem ist es "gute" Praxis.


    Au weia, Danny ...

    Wenn ich mir Dein Script nochmal anschaue, dann schwant mir, Du verwendest noch Avisynth v2.0 ... ? In dem Fall wirst Du mit all' dem Zeug, was wir hier vorschlagen, vermutlich nicht viel Freude haben - weil die meisten "aktuellen" Filter und Plugins unter dieser alten Avisynth-Version gar nicht mehr funktionieren. (Mir ist aufgefallen, dass Du DustV5.dll direkt importierst, ohne LoadPluginEx ... das geht inzwischen gar nicht mehr.)

    Empfehle aktualisierung auf Avisynth v2.5.8, von >hier< ...

  • Tatsachlich war noch die AviSynth2-Version am Start. Problem behoben und nun ist die aktuelle 2.5-Version am Start.

    Nochmal kurz zu meinen vorherigen Fragen und einer weiteren Problemmeldung.

    Hatte jetzt versucht, mal nur das Script zu laden und bekomme die Fehlermeldung, daß RemoveGrain wohl eine SSE2 kompatible CPU benötigt. Ich habe hier einen AMD Athlon 2700 XP am Start.

    Danke auch an Sidewinder für die Vorschläge & Gruß Danny

  • Dann solltest Du aus dem RemoveGrain-Paket nicht die RemoveGrainSSE2.dll, sondern die normale RemoveGrain.dll oder (falls diese wg. fehlender Runtime-Bibliotheken nicht gehen sollte) die RemoveGrainS.dll laden. Ebenso für die RepairXXX.dll.

    Aber, wenn das alle Probleme nach dem Upgrade auf AS v2.5.8 sind, dann ziehe ich meinen Hut! Da warten wohl noch ein paar andere Problemchen und Fußangeln, aus der Farbraum-Ecke YUY2<-->YV12 ... :o-oh:

  • Okay, ich nehme mal an, daß ich das Script dann anpassen müßte! Kämpf ich mich durch! :D

    Im Prinzip habe ich ja nix anderes gemacht, als den Plugin-Ordner vorher zu sichern und dann die Version zu deinstallieren. Neue Version drauf und die Plugins (bis auf 3 neuere) ersetzt.

    Das Material, was es zu bearbeiten gilt, liegt durch HuffYuv-Codec im YuY2-Farbraum vor. Könnte es da noch Probleme geben?

    Wie ist das eigentlich mit dem Deinterlacen? Habe mal gegoogelt, aber nicht wirklich was Brauchbares gefunden bis auf das hier:
    -----------------------------------------------------------------------------
    video1="... xxxxx.avi"
    avisource(video1).ConvertToYUY2(interlaced=true)
    TomsMoComp(-1,5,0)
    -----------------------------------------------------------------------------

    Danke nochmal für Deine "Engelsgeduld" ... Gruß Danny


    Nachtrag: Leider ist im Script nix zu ändern. Die beiden anderen Versionen der RemoveGrain.dll sind im Plugin-Verzeichnis vorhanden.

  • Nachtrag: Leider ist im Script nix zu ändern. Die beiden anderen Versionen der RemoveGrain.dll sind im Plugin-Verzeichnis vorhanden.


    Ah, ein erstes Beispiel für das, was ich oben über Plugin-Auto-Loading gesagt habe. :)

    Wenn Du RemoveGrainXXX und RepairXXX alle zusammen ins "Avisynth 2.5\Plugins\"-Verzeichnis entpackst, dann versucht Avisynth, ALLE diese Plugins zu laden ... und das geht nicht.
    Also, entweder:

    - nur EINE der alternativen DLLs ins Plugin-Verzeichnis entpacken (also z.B. NUR die "RemoveGrainS.dll" + "RepairS.dll", die anderen Varianten NICHT)

    oder

    - ein zweites Verzeichnis erstellen, z.B. Avisynth/MyPlugins. Dort hinein nach Lust, Laune & Bedarf eintpacken, und von diesem Pfad manuell mit LoadPlugin(..) laden.


    Zitat

    Danke nochmal für Deine "Engelsgeduld"

    Och ja .... wenn man Steighilfe über die vielen Stolpersteine geben kann, und es fällt auf fruchtbaren Boden, dann macht's ja auch Spaß. In vielen anderen Fällen geht sehr schnell das Genöle los "was die SCH.. eigentlich soll, warum das alles so SCH.. kompliziert ist, und der BESCH...ENE Kram muss doch auch einfacher gehen, ist doch alles SCH... hier!" Dann macht's keinen Spaß, und die Geduld ist dann auch ruck-zuck zu Ende. :D

  • Ich hab jetzt einfach mal alles aus dem Plugin-Ordner genommen, was SSE als Anhang hatte. Er scheint jetzt auf die "einfache" dll zurückzugreifen.

    Danach hatte ich einen testweise Ausschnitt aus meinem Video per TomsMoComp und den bereits geposteten Einstellungen deinterlaced, was wohl auch geklappt hat. Allerdings, wenn ich das o.g. Script einbinde und mir die Vorschau im VDub anschaue, ist dort kein Unterschied oder Verbesserung zu sehen. Ich hatte das der Einfachheit halber mal so gemacht:
    -----------------------------------------------------------------------------
    Import("C:\Programme\AviSynth 2.5\plugins\Denoiser_VHS.avs")

    AVISource("C:\Dokumente und Einstellungen\Office\Desktop\test.avi")
    -----------------------------------------------------------------------------

    Denoiser_VHS = GTDegrain (ich hab´s halt nur für mich praktisch umbenannt)
    Irgendwie werd ich das Gefühl nicht los, daß ich das Script unter der AVISource auch irgendwie per Code ansprechen muß? Ich meine, ich muß ja doch irgendwie angeben, WAS das Script nun machen soll. So zumindest meine Logik und die unveränderte Vorschau.

    Das mit dem "Rumgenörgel" kenne ich. Sind meist nur Kiddies und aus dem Alter (ich geh mal davon aus) sind wir ja nun raus ...::cool:
    Im Prinzip blicke ich schon bei Videobearbeitung durch, nur ist AviSynth für mich Neuland. Bin eigentlich auch mehr im Audiobereich "zuhause" ... :)

  • dannyx

    "....Engelsgeduld...." ..., lol, die müssen wir Newbies auch mitbringen, um das Fach-Chinesisch einigermassen zu erfassen. :D Wenn dann aber etliches davon funktioniert, was Didée und andere Spezialisten ausgetüftelt haben, dann werden die Bemühungen reichlich belohnt.

    Bzgl. des Deinterlacings ist es am besten, Du lädst zum Begutachten einen Teilausschnitt aus Deinem Video auf einen FileSharer. Ansonsten läufts Du Gefahr, Dutzende von Deinterlacings- oder anderer Scripts ausprobieren zu müssen (s.o. die anderen von Didée aufgeführten möglichen Problemfälle).


    Didée

    - "...LoadPlugIn..." ...wieder was dazugelernt mit den Plugins, danke! :)
    - "...Steighilfe...". Dazu kann ich nur sagen, dass viele Deiner Erläuterungen (hier und im engl. Forum) mir geholfen haben, einiges (besser) zu verstehen. :daumen:+danke.

    - Ich habe GTDegrain aufgrund Deines Hinweises einmal ausprobiert. Es ist um einiges schneller als TemporalDegrain (mit MT ca. 30-40%) und mein erster Eindruck ist, dass die Qualität sich auch sehen lassen kann. Ich werde aber noch weitere Tests machen, bevor ich eine belastbare Aussage abgeben kann.

    Gruss


    Edit: Bei meiner langsamen Schreibweise komme ich gar nicht hinterher...hehe.
    Beispielscript:

    ##### BASICS ###############################################
    Import("C:\Programme\_video\AviSynth 2.5\plugins\functions\GTDegrain.avs")

    ##### SOURCE ###############################################
    SetMemoryMax(1024)
    AviSource("...\deinvideo.avi")

    ##### DEINTERLACE,SHARPEN #####################################
    TDeint()
    GTDegrain()
    #GTDegrain(degrain=3,sharp=2)

  • Passt schon, nur der eigentliche Aufruf muss halt noch dazu:

    -----------------------------------------------------------------------------
    Import("C:\Programme\AviSynth 2.5\plugins\Denoiser_VHS.avs")

    AVISource("C:\Dokumente und Einstellungen\Office\Desktop\test.avi")
    GTDegrain()
    -----------------------------------------------------------------------------

    Wobei das natürlich für eine interlacte Quelle "falsch" ist, weil GTDegrain wie gesagt für progressives Material ausgelegt ist. Eine einfache, nicht zu kompliziert Möglichkeit wäre diese hier:

    -----------------------------------------------------------------------------
    Import("C:\Programme\AviSynth 2.5\plugins\Denoiser_VHS.avs")

    AVISource("C:\Dokumente und Einstellungen\Office\Desktop\test.avi")
    Bob(0,0.5)
    ConvertToYV12()
    GTDegrain()
    # SelectEven() # <- für 25fps progressiv
    ## -oder-
    # SeparateFields().SelectEvery(4,0,3).Weave() # <- für 25i und DVD-Authoring
    -----------------------------------------------------------------------------

    Ob deinterlaced werden soll oder nicht ist letztlich Geschmackssache. Deinterlaced ist besser komprimierbar und etwas einfacher für Darstellung am PC-Monitor, aber es entfernt eben auch die Hälfte der zeitlichen Information ("Flüssigkeit" von Bewegungen).
    Interlacing behalten ist ideal für Darstellung am TV (wenn's ein Röhren-TV ist, mit neuen LCDs ist's so ne Sache), und für Wiedergabe auf'm PC-Monitor kann man auch den Software-Player beim Abspielen ein Bob-Deinterlacing durchführen lassen ...

    Es gibt keine "Endlösung" in dieser Frage, sondern nur unterschiedliche Vorlieben.

    So, Feierabend für mich, gut's Nächtle ...

Jetzt mitmachen!

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