Benutzerdefinierte Funktionen in AviSynth

  • Ich weiss nicht ob es nötig ist (bin auch Avisynth Experte), aber mir fehlen da die Load Plugin Zeilen....
    Mein (zugegebenermassen überfrachtetes) Testscript sieht so aus:


    Vielleicht kann einer der Avisynth Experten hier Klarheit bringen.

  • Wenn Gothmog keine Fehlermeldung kriegt, scheint das Script ja rein technisch schon mal richtig zu funktionieren.

    Diesen "Halos" wird man mit den üblichen Halo-Entfernern nicht so richtig beikommen. Alle Scripte diesen Zweckes gehen von einer "symmetrischen" Überschärfung aus, die durch Einsatz eines oder mehrerer Schärfungsfilter/s hervorgerufen wurde.
    Nur solche Artefakte können gut genug rückgängig gemacht werden: indem man die "umgekehrte" Operation anwendet - nämlich einen Unschärfefilter. Und die arbeiten normalerweise immer "symmetrisch".

    In diesem Beispiel haben wir aber "unsymmetrische" Halos: den guten alten "Schlagschatten"-Effekt (den einige Veteranen vielleicht noch aus VHS-Zeiten kennen): Die Artefakte treten hauptsächlich nur *rechts* von stark-kontrastigen Kanten auf.
    Und dass es sich um eine ganze Kette von Artefakten handelt (die Halos haben Halos, die Halos haben, die Halos haben) macht die Sache nicht wirklich einfacher ...

    Solche Dinger sind praktisch nicht wegzubekommen, ohne die Source merklich zu beleidigen. (In diesem Zusammenhang habe ich auch schon "un-symmetrische" Blur-Filter ausprobiert, und das eindeutige Ergebnis war "nein, so geht das nicht.")
    Für Chainmax (Doom9) hatte ich mal ein angepasstes Spezialscript erstellt, für Extras auf einer Simpsons-DVD, mit noch schlimmeren Artefakten als hier. Das Ding hat zwar funktioniert, aber wirklich nur bei diesem sehr einfachen Comic-Inhalt. Keine Chance für Realquellen. Und Geschwindigkeits-mäßig konnte man Lord Helmchen zitieren: "Umschalten auf Lächerliche Geschwindigkeit!"

  • @ Didée
    Danke für die Aufklärung! :daumen:
    Dann kann ich mich jetzt voll und ganz auf die Rauschentfernung konzentrieren. :) Ich muss "nur noch" die richtige Balance zwischen Rauschentfernung und Detailverlust finden. Aber ich komme der Sache immer näher.

    Quapla'
    Gothmog

    Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist. (Art. 20(4) GG)[SIZE=-1]
    [/SIZE]

  • Bei MCNR_simple2 sollte auf jeden Fall "chroME=true" gesetzt werden.
    Mehr Detail wird erhalten, wenn die LP-sens Werte reduziert werden ... "LPlosens=0" + "LPhisens=2" wird mehr Detail behalten, aber auch die Entfernung des Rauschens abschwächen.

    Probier' mal die neuesten Variationen von Heini011. Arbeiten gut & schnell, und ich :seher: vermute :seher: mal, dass irgendwas zwischen mq_filter() und lq_filter() für Deine Source passen sollte.

  • Ich habe etwas gelernt: Traue keinem Screenshot!:)

    Ich habe ein Stückchen meines Filmes mittels VirtualDubMod ausgeschnitten und mit meinem o.g. Script encodet (CCE). Das Ergebnis war bei weitem nicht so gut, wie es die einzelnen Frames in VDM erscheinen ließen, trotz hoher Bitrate und Doppel-Pass.

    Ich habe mir dann das Script von Heini011 per Copy & Paste als Heini011_Denoiser.avs abgespeichert sowie die notwendigen Plug-Ins runtergeladen und ins entsprechende Verzeichnis gepackt.
    Dann habe ich versucht, seine mq_filter Funktion (die ich vorher als mq_filter.avs abgespeichert habe) in mein Script einzubinden.
    Sein Filter:

    Code
    function mq_filter(clip c){  c=c.RemoveNoiseMC(rdlimit=10,rgrain=2,denoise=8)  c=c.LimitedSharpenFaster(Smode=4,strength=20,overshoot=1,wide=false,ss_x=1.3,ss_y=1.3)  return c}

    Mein Script mit diesem Filter:

    Code
    AviSource("F:\Captured\Videos\nacht.avi")
    Import ("F:\AviSynth Scripte\Heini011_Denoiser.avs")
    Import ("F:\AviSynth Scripte\LimitedSharpenFaster.avs")
    Import ("F:\AviSynth Scripte\mq_filter.avs")
    Trim(1900,127398)
    Crop(8,8,-8,-8)
    telecide(0)
    mq_filter()
    Tweak(hue=0.00,sat=1.1,bright=2.0,cont=1.0)
    AddBorders(8,8,8,8)

    Klappte natürlich nicht.
    Als Fehlermeldung kam ein:

    Zitat

    ScriptError: There is no function named "RestoreMotionBlocks"


    Es ist mir schon peinlich, euch dauernd um Rat zu fragen, aber die Syntax von AviSynth scheint mir eine Wissenschaft für sich zu sein. So langsam wird es frustrierend für mich.
    Wenn ich für die höhere Syntax zu dämlich bin, bleibt mir immer noch Undot und asharp. Das sieht zwar bescheiden aus, aber funktioniert einwandfrei. :)
    Tut mir leid, wenn ich hier ein wenig frustriert klinge, aber so ganz ohne Erfolgserlebnis macht das ganze auch keinen Spaß.

    "Ich bin Historiker, kein Informatiker". (So ähnlich hat es Pille McCoy immer gesagt.) :)

    Quapla'
    Gothmog

    Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist. (Art. 20(4) GG)[SIZE=-1]
    [/SIZE]

  • Zitat von Gothmog

    Es ist mir schon peinlich, euch dauernd um Rat zu fragen, aber die Syntax von AviSynth scheint mir eine Wissenschaft für sich zu sein. So langsam wird es frustrierend für mich.


    Keine Angst - dein Skript sieht soweit ganz vernünftig aus. Aber

    Zitat

    ScriptError: There is no function named "RestoreMotionBlocks"


    weist darauf hin, dass dir wohl noch eine Funktion (aus einem weitern Skript, oder letztendlich aus einer Plugin-DLL) fehlt, damit die offensichtlichen Funktionen ihre Arbeit erledigen können.

    Also schau noch mal, ob "RemoveNoiseMC" oder "LimitedSharpenFaster" (welche in "mq_filter" verwendet werden) ihrerseits noch die Funktion "RestoreMotionBlocks" irgendwo verwenden, und von welchem Plugin die bereitgestellt wird.

  • Soweit ich verstanden habe, ist "RestoreMotionBlocks" Bestandteil der neuen removedirt.dll, welche von RemoveNoiseMC verwendet wird. Müsste das dann nicht automatisch mitgeladen werden?

    Quapla'
    Gothmog

    Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist. (Art. 20(4) GG)[SIZE=-1]
    [/SIZE]

  • Dann musst du dir aber auch ganz sicher sein, dass du

    - wirklich diese spezielle neue Version besitzt,
    - exakt diese DLL in deinem Skript geladen wird (manche sammeln Versionen über Generationen),
    - keine Fehler in verwendeten Pfaden und Dateinamen auftauchen, wenn du explizit lädst.

    Je mehr DLLs hier notwendig sind, umso weniger würde ich dem AutoLoad-Verzeichnis vertrauen, besonders wenn sich da alte und neue Versionen tummeln.

  • Zitat von LigH

    Dann musst du dir aber auch ganz sicher sein, dass du

    - wirklich diese spezielle neue Version besitzt,

    Ich fasse es nicht. Daran lag es wirklich. Und ich hätte schwören können, dass ich die entsprechende Version im Verzeichnis hatte. Ich habe es doch mehrmals geprüft! Und jetzt ... :wall:
    Jetzt gibt es keine Fehlermeldung mehr; jetzt muss ich nur noch schauen, ob das Ganze auch gut aussieht.
    Danke.

    Quapla'
    Gothmog

    Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist. (Art. 20(4) GG)[SIZE=-1]
    [/SIZE]

  • :D

    Ist mir auch schon passiert, dass ein Unpacker die Datei nicht in das Verzeichnis entpackt hat, was ich wollte. WinAce verhält sich da beispielsweise sehr unzuverlässig, wenn man den Dialog mehrfach verwendet. Und manchmal wird bei einigen Tools mit Unterverzeichnis entpackt, obwohl man's ausdrücklich nicht wollte...

  • So, die ersten Tests mit diesem Script sind gelaufen:

    Ich habe mich nun doch für den hq_filter entschieden, weil er bei ordentlichem Entrauschen noch genug Details übrig lässt. Ob ich mir ein paar Plug-Ins am Anfang sparen kann, muss ich noch mal prüfen.
    Alles in allem ist das Ergebnis jedoch eher zwiespältig:
    Bei Szenen am hellichtem Tag ist alles wunderbar.
    Im Dunkeln und vor allem wenn noch Nebel/Rauch dazu kommt sieht die Sache leider anders aus: extreme Weichzeichnung und ziemlich hoher Detailverlust sind da die Folge. Oder sieht das nur am Monitor so aus und später am TV nicht mehr?

    Mein PC (AMD Athlon XP 2600+; 512 MB RAM) hat für ein 16-Sekunden-Clip (ca. 400 Frames) übrigens fast 7 Minuten gebraucht (CCE; 2-Pass+vaf). Ist das normal? Wenn ich das auf den ganzen Film hochrechne (85 min.), kann ich den Rechner ja in den nächsten Tagen gar nicht mehr anders nutzen.

    EDIT: Die niedrige Geschwindigkeit liegt definitiv am Script. Die reine avi-Datei von 16 Sekunden (ohne Filter) war in ca. 45 Sekunden fertig encodet. Ist es möglich, dass ich mein Script ein wenig schneller kriege oder ist das mit den benutzen Filtern/Plug-Ins/Funktionen gar nicht möglich?

    Quapla'
    Gothmog

    Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist. (Art. 20(4) GG)[SIZE=-1]
    [/SIZE]

  • Nö, mit dem Script kriegst Du die Render-Zeit nicht schneller. Einfache Filter -> schnelles Script, ausgefeilte Filter -> langsames Script.

    Was Du zur Beschleunigung tun solltest, genug freien Plattenplatz vorrausgesetzt, ist: Script laden, als Huffyuv speichern, und >das< dann mit CCE encoden. Auf diese Weise wird das Script mit all der Filterei nur EIN Mal abgearbeitet, und anschließend kann der Encoder seine X Passes mit Fullspeed durchziehen.
    Wenn Du das Script direkt in den Encoder fütterst, dann wird ja die ganze Filterei für jeden einzelnen Durchgang aufs neue durchgeführt ... Eulen nach Athen, und so weiter ;)

    Und sooo langsam war das gar nicht:
    400 Frames / 3 Passes / 7 Minuten ... rattata ... ~2.9 Frames pro Sekunde. Da haben wir auch schon langsamer encoded. VIEL langsamer.

    Betreffs Detailverlust/Weichzeichnung im Dunkeln, bei Nebel & Rauch usw.:

    Tja. das sind eben auch "schwierige" Bildinhalte. Und das ist dann auch der Grund, warum Heinis MC-Denoiser so schnell :zunge: arbeitet: dafür ist er nicht optimiert.
    Z.B. hätte ich hier auch noch mein eigenes MC-Filterkonzept, dass das alles noch'n Stück besser zu machen versucht. Aber wenn Dir das obenstehende Script eigentlich schon zu langsam ist, dann willst Du meines ganz, ganz bestimmt nicht benutzen. :)

    Andererseits ... schon mal ein Testencoding ganz ohne Rauschfilter probiert? Wenn später sowieso nur auf'm Röhren-TV geschaut werden soll, dann ist die Röhre oft der einzige benötigte Filter.

  • Naja, wenn man alles zusammenrechnet, kommt man schon auf 2,9 fps, das mag schon sein. Aber als ich eben angefangen habe, den kompletten Film zu encoden, ist der CCE bei der Erstellung der vaf-Datei nicht über 0.1 hinausgekommen. Bei den eigentlichen Passes wird er zwar dann schneller, das weiß ich, aber ich habe dann erst einmal angebrochen, weil alleine das Erstellen der vaf-Datei sich sehr lange hingezogen hätte.

    Zitat von Didée

    Script laden, als Huffyuv speichern,

    Über VirtualDubMod, nehme ich an? Save As ... Full Processing Mode als Huffyuv? Da muss ich aber wirklich erst einmal schauen, ob ich noch genug Platz habe (200 GB sind schneller voll, als man glaubt, vor allem, wenn man mehrere Partitionen hat. :))

    Da ich so ganz ohne Filter doch nicht arbeiten möchte habe ich ein sehr einfaches Alternativ-Script erstellt, dass bei Tests etwas schneller war:


    Für TV-Gucken müsste das eigentlich ausreichend sein.
    Nachteil: Verschmutzungen werden nicht entfernt, doch ein RemoveDirt (mit RestoreMotionBlocks) zerstört einiges an Details.

    Die letzte Zeile ConvertToYUY2() habe ich nach Lektüre hier im Forum noch eingefügt, obwohl der CCE auch ohne encodet hat. Ich Esel habe nämlich durch einen Bedienungsfehler versehentlich in YV12 gecaptured. :redface:

    Quapla'
    Gothmog

    Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist. (Art. 20(4) GG)[SIZE=-1]
    [/SIZE]

  • Die DVD ist fertig, encodet mit meinem letztgenannten Alternativscript (Dauer ca. 10h, ein knappes Drittel der Zeit im Vergleich zum anderen Script.) Das Ergebnis ist für meinen Geschmack in Ordnung. Ich hatte schon schlimmere gekaufte DVDs in den Händen (ich sage nur: Laser Paradise :D)

    Erstellt habe ich die DVD mit DVDLab, klappte auch gut.
    Aber: Am TV taucht in zwei Szenen bei schnellen vertikalen Schwenks bzw. Bewegungen ein Zittern auf. Durch die Suchfunktion hier, habe ich feststellen können, dass es wohl an einen falschen FieldOrder liegt. Da es sich um insgesamt ca. 30 Sekunden handelt, ist es nicht ganz so schlimm.
    Daher eine eher theoretische Frage: Wie kriege ich eine falsche Field Order in den Griff, die nur bei bestimmten Szenen und nicht den ganzen Film über auftaucht?

    Oder anders gefragt: Macht es Sinn, einen ganzen Film zu deinterlacen, wenn nur ein paar Szenen betroffen sind? In vorangegangenen Posts habe ich nämlich zu einer dieser Szene ein Screenshot gepostet, auf dem eindeutig zu sehen ist, dass diese interlaced ist (Bild 1 im Link) - der Rest des Films alllerdings nicht.
    http://forum.gleitz.info/showpost.php?p=264879&postcount=10
    Ich habe jetzt doch einen ca. 1/2-Sekündigen Clip angehangen; ich hoffe die Länge reicht aus. Ein viel längerer Clip ist mit Analog-Modem leider nicht drin. :)

    Dateien

    Quapla'
    Gothmog

    Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist. (Art. 20(4) GG)[SIZE=-1]
    [/SIZE]

  • Es gibt doch DeInterlance-Filter , die progressive Frames unberührt lassen , und nur an wirkliche Frames mit Lacing rangehen.
    Da zu schau dir z.B. TDeint im Modus full=false an.

    Wie gut diese Erkennung allerdings arbeitet => Keine Ahnung.

    Die Rotation der Erde wurde in den letzten Jahren primär durch sich im Grab umdrehende Musiker angetrieben - Mainstream sei dank.

  • Danke für den Tipp; werde ich mir für die Zukunft merken.
    Die erstellte DVD bleibt jetzt, wie sie ist. Nochmal encoden? Nee, nee! Sooo dolle ist der Film eh nicht und es sind ja nur ein paar Sekunden, bei denen das Bild zittert. Außerdem brauchte ich Festplattenplatz für zwei Star-Trek-Folgen und den Italowestern eben auf Arte. :) D.h. die gecapturte Datei ist schon im Datennirwana.
    Aber ich habe trotzdem einiges gelernt - z.B. wie man benutzerdefinierte Funktionen ins Script einbindet - und das ist ja auch nicht schlecht.

    Quapla'
    Gothmog

    Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist. (Art. 20(4) GG)[SIZE=-1]
    [/SIZE]

Jetzt mitmachen!

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