Beiträge von Highwayman

    Oh, bei den Vergleichen mit subtract (zwischen ori und den jeweils aus einem Halbbild berechneten Clips) ist mir erneut aufgefallen, dass die Abweichungen bei odd größer sind als bei even.

    Nun habe ich auch eine Erklärung.

    Das Verfahren oben arbeitet nicht symmetrisch.


    Bei even sind die oberen Halbbilder zeilenweise identisch.

    Bei odd hingegen (hier müsste die interpolierte Zeile jeweils oberhalb eingefügt werden) findet eine Verschiebung statt, die Originalzeile matcht mit der interpolierten Zeile.



    Wenn es bei TomsMoComp keinen entsprechenden Parameter gibt (den ersten teste ich noch), dann muss ich vielleicht mit FlipVertical arbeiten. Das funktioniert dann jedenfalls in der Theorie (und dann auch mit üblichen selectEvery(4,0,3).

    Du möchtest also nicht die Variante verwenden, die ich empfohlen habe: QTGMC oder TDeint im Bob-Modus (der sollte bei QTGMC Standard sein)?

    Doch, ich möchte nach und nach alle Varianten probieren. QTGMC habe ich erst einmal zurückgestellt, weil ich da die Avisynth-Version wechseln muss (die läuft auf einer anderen, Win 10-Partition). Mit TDeint hat es noch nicht so funktioniert, dass die Gegenprobe (Wiederherstellung ori) Identität zeigt.

    OK, ich habe den Fehler gefunden.

    even und odd werden von TomsMoComp natürlich nach dem gleichen Verfahren erstellt.

    Unter einer (Original-) Zeile wird eine interpolierte Zeile eingefügt.

    Die Originalzeilen erhalte ich also in beiden Fällen durch selectEven:


    even2 = even.separatefields().selectEven()

    odd2 = odd.separatefields().selectEven()



    Mit q = interleave (even2, odd2).assumetff().weave() erhält man dann den Originalclip ori unverändert zurück.

    Alternativ dazu geht auch:

    q7 = interleave (even, odd).SeparateFields().SelectEvery(4,0,2).Weave()

    q8 = interleave (even.SeparateFields(), odd.SeparateFields()).SelectEvery(4,0,1).Weave()


    ori = q = q7 = q8

    Idee ist also, eine Zerlegung in Halbbilder vorzunehmen.

    Mein Material ist TFF:


    ori = ori.AssumeTFF()

    xTop = ori.separatefields().selectEven()

    xBot = ori.separatefields().selectOdd()


    TomsMoComp (0,-1,0) rechnet die Halbbilder hoch, aus sich selbst heraus durch interpolierte Zwischenzeilen, ohne Betrachtung anderer Frames:


    even = xTop.TomsMoComp(0,-1,0).assumeframebased().assumeTFF()

    odd = xBot.TomsMoComp(0,-1,0).assumeframebased().assumeTFF()


    Die Einzelbetrachtung der Clips even und odd macht einen guten Eindruck.


    Jetzt wollte ich zu Testzwecken daraus wieder den Urspungsclip ori berechen:


    even2 = even.separatefields().selectEven()

    odd2 = odd.separatefields().selectOdd()


    q = interleave (even2, odd2).assumetff().weave()

    oder

    q4 = interleave (even, odd).SeparateFields().SelectEvery(4,0,3).weave()


    Ableich mit subtract zeigt q=q4, aber keine Identität mit ori.

    Es sieht so aus, als ob die Bilder vertikal verschoben sind, vielleicht um eine Zeile.

    Die Auflösung in aus Halbbildern erzeugten Frames erreiche ich mit folgenden Varianten:


    SeparateFields().Bob(0.0, 1.0)

    TDeintBob(tff=True)

    TMCBob(tff=True)


    Bei meinem Testclip trat bei allen 3 Varianten das Phänomen auf, dass die Frames abwechselnd "brauchbar" und "unscharf" waren. Dann habe ich festgestellt, dass dies schon bei SeparateFields der Fall ist. Es sieht aber wohl so aus, dass das nur bei einem Clip der Fall ist.


    Derzeit experimentiere ich mit TomsMoComp(0,-1,0).


    Mir geht es nicht um ein Ersetzungsskript. Das habe ich bereits: ich hinterlege zu einem Frame aus einer Python-Anwendung heraus eine Zahl, die einen Alternativclip beschreibt. So ist z.B. 2 eine zweite Digitalisierung, 3 eine Bereinigung von Fischen, 4 eine Wiederherstellung aus dem oberen Halbbild etc.


    Jetzt geht es um die Definition der Alternativen, also z.B. eine (optimale) Formel für einen Clip berechnet nur aus oberen Halbbildern.

    Dort, wo ein Bild eine Störung im unteren Halbbild hat, wird der Frame durch den entsprechenden Frame im Alternativclip ersetzt (mit den bekannten Avisynth-Funktionen).

    Hallo,


    ich suche nach einer Avisynth-Funktion oder einem Skript oder einer Möglichkeit, fehlende oder defekte Halbbilder in Interlaced-Material (YUY2) durch ein interpoliertes Halbbild zu ersetzen.

    Dabei sollte das andere vorhandene Halbbild (vorrangig) genutzt werden.

    Lösungen, das ganze Bild durch Interpolation zwischen Vorgänger und Nachfolger zu ersetzen, brigen bei bewegten Bildern schlechte Ergebnisse.


    Gruß

    Highwayman

    Bei bewegten Bildern erscheint es besser, den Ersatzframe aus einem Halbbild zu berechnen. Natürlich nur, wenn die Störung auf ein Halbbild beschränkt ist.

    Wie oben beschrieben:


    oriB = oriA.SeparateFields().Bob().SelectEven()

    oriC = oriA.SeparateFields().Bob().SelectOdd()


    Hier ist mir aufgefallen, dass der Odd-Frame in der Regel sehr viel schlechter ist als der Even-Frame.

    Woran kann das liegen?


    stackhorizontal (oriA, oriB, oriC)

    Leider ist die Qualität des interpolierten Frames nur bei ruhigen Bildern akzeptabel, bei Bewegungen haben Personen schon mal 3 Beine oder 6 Finger.

    Kann man an der Funktion noch etwas schrauben?


    function fflow (clip c)

    {

    sup = c.msuper (pel=1)

    bv = sup.manalyse (isb=true)

    fv = sup.manalyse (isb=false)

    c.mflowfps (sup, bv, fv, num=0)

    return(c.mflowfps (sup, bv, fv, num=0))

    }

    Das war schon klar, allerdings hatte ich die Funktion fflow nicht verstanden. Ich bin davon ausgegangen, dass ich mit selecteven und selectodd die Halbbilder getrennt bearbeite.

    OK, mit selecteven und selectodd nehme ich jeweils nur jeden zweiten Frame, und fflow setzt dann immer einen interpolierten Frame dazwischen.

    Dann werden die getrennten Clips wieder zusammengefügt (interleave) und jeweils nur die interpolierten Frames herausgepickt (selectevery).

    Das ist prinzipiell das, was ich wollte.

    Hallo,


    ich greife das Thema noch einmal auf.

    Ich möchte gerne einen Clip definieren, der jeden Frame (der ersten und letzten erst einmal ausgeklammert) durch eine Interpolation des vorherigen und des nachfolgenden ersetzt.

    Dabei bin ich auf folgendes gestoßen:


    function fflow (clip c)

    {

    sup = c.msuper (pel=1)

    bv = sup.manalyse (isb=true)

    fv = sup.manalyse (isb=false)

    c.mflowfps (sup, bv, fv, num=0)

    return(c.mflowfps (sup, bv, fv, num=0))

    }



    Aufruf dieser Funktion wie folgt:


    function I1ClipV (clip c)

    {

    o = c

    flowed = interleave( o.selecteven().fflow(), o.selectodd() .fflow() ).selectevery(4, -1, 2)

    return (flowed)

    }


    Ist das so korrekt bzw. was lässt sich verbessern?


    Mich irritiert, warum hier oberes und unteres Feld nicht erst getrennt werden müssen, also so:


    function I1ClipV (clip c)

    {

    o = c.SeparateFields()

    flowed = interleave( o.selecteven().fflow(), o.selectodd() .fflow() ).selectevery(4, -1, 2)

    return(flowed.weave())

    }


    Das Ergebnis ist hier aber ein anderes, unerwünschtes.

    Aus einer Sequenz von Frames blau blau rot blau blau macht

    (1) blau dunkelrot blau dunkelrot blau

    (2) blau violett dunkelrot violett blau


    Demnach arbeitet nur (1) richtig, weil es den roten Fehlerframe durch einen blauen ersetzt.

    OK, die Runtimes fehlten. Ich habe den Installer genommen.

    Jetzt läuft AVS+ r2772 MT, x86_64.

    Aber mvtools2 nicht.


    Einzige 64-Bit Version ist "mvtools2 2.7.39\x64\", und obiges Skript ergibt sehr grünes Bild.



    Und die neue 2.7.40 macht das Bild noch schöner !



    Es liegt übrigens nicht an der 64-Bit-Version.

    2.7.39\x86 und 2.7.40\x86 erzeugen ebenfalls vorrangig grün.


    Die letzte Fizick-Version mvtools-v2.5.11.20\mvtools2 funktioniert noch.

    Neuinstallation unter Win 10:

    AvsPmod 32 kommt nicht mit allen AVS Versionen klar:


    AVS258 AviSynth Fenster erscheint kurz und schließt sofort wieder

    AVS260 AviSynth 2.60, build:Mar 31 2015 [16:38:54] OK

    AVS261_Alpha Fenster erscheint kurz und schließt sofort wieder

    AVS260_ICL AviSynth 2.60 (ICL10) OK

    AVS260_MT AviSynth 2.60, build:Feb 20 2015 [03:16:45] OK

    AVSPLUS_X86 Fehlermeldung [Error 126] Loading avisynth.dll failed.


    AvsPmod 64:

    AVSPLUS_X64 Fehlermeldung [Error 126] Das angegebene Modul wurde nicht gefunden.


    Fazit: AvsPmod läuft nur als 32 Bit mit den AVS260-Varianten.

    Vielen Dank, FatFaster.


    Wenn ich den Universal Avisynth Installer benutze, muss ich dann noch etwas von https://github.com/pinterf/AviSynthPlus runterladen? Was?


    Ich brauche die 32-Bit-Version, wenn ich die vorhandenen Plugins nutze, richtig?


    Und noch eine Frage zu Vapoursynth:


    Gibt es eine Möglichkeit des "Einbaus" in meinen Ablauf?

    Ich lese in Avisynth/AvsPmod eine avi.Datei mit Codec Lagarith ein und bearbeite Sie mit mehreren Filtern, zuerst kommt denoise.

    Die Ausgabe könnte entweder wieder in Lagarith erfolgen oder Eingabe für ffmpeg (x264) sein.

    Ich müsste dann also eine mit Vapoursynth bearbeitete Datei in Avisynth einlesen.

    Das geht wahrscheinlich nicht ohne zwischenspeichern. Ist das im geleichen Format (Lagarith, ohne Farbraumkonvertierung) möglich?


    Gruß

    Highwayman.

    http://avs-plus.net/get-started.php

    Editing tools

    • AvsPmod is our recommended editor. It gives you instant preview, support for direct visual comparison, syntax highlighting, code completion, and many other features. There is currently no official release for AviSynth+, so we recommend you get it from here (for 32-bits). An official release which will add support for 64-bit AviSynth+ is expected soon.
    • Users of Notepad++ will be delighted that there is a language add-on for AviSynth.
    • And of course you can use any text editor too to edit scripts.


    D.h. von AvsPmod gibt es noch keine offizielle Version für Avisynth+ ??

    Ich habe mir erst einmal den overlap-Parameter vorgenommen.


    In MDegrain2i2 ist der Default-Wert ja 0. Keine Ahnung, warum ich den damals auf 4 eingestellt habe.


    Und hier ist ja schon ein enormer Performance-Unterschied.

    Meine Werte für einen 4-Minuten-Clip (SD, 720 x 576, Lagarith --> YUY2):


    overlap = 4: ~3.5 fps, ca. 27 Minuten

    overlap = 0: ~11.5 fps, ca. 9 Minuten


    Das ergibt bei einem 1h-Band: 6 3/4 h gegen 2 1/4 h.

    Das wäre schon einmal sehr viel besser.


    Kann jemand beantworten, was der overlap-Parameter genau bewirkt? Auf den ersten Blick sehe ich keinen Unterschied.


    FatFaster : 40 fps klingt natürlich super. Python schreckt mich nicht, nutze ich zusammen mit AvsPmod.

    Was genau ist Vapoursynth? Wie kann es einbunden werden?

    Neuere mvtools2.dll (von https://github.com/pinterf/mvtools/releases) die eventuelle die CPU besser nutzt ist das Einzige was mit einfällt.

    Dafür scheint mein Avisynth zu alt zu sein: ... is not an Avisynth 2.5 plugin


    Ich nutze Avisynth zusammen mit AvsPmod 2.5.1 unter Windows 7 und weiß nicht, welche Baustellen entstehen, wenn ich Avisynth durch eine neue Version ersetze. Evtl. baue ich das parallel unter Win 10 auf.