Frage zu den Masktools

  • Ich habe mich mal etwas mehr mit den Masktools beschäftigt, da es sinnvolle Funktionen für eine Reihe komplexer, guter Skripte bereitstellt.
    Trotz dessen, dass ich mir die readme recht eindringlich zu Gemüte geführt habe, sind leider noch ein paar Fragen unbeantwortet geblieben. Hoffe die Fragen sind nicht zu unsinnig oder newbiehaft, bin erst seit wenigen Monaten mit Avisynth vertraut und habe das aller erste Mal mit den Masktools zu tun. :hm:
    Ich möchte yv12lutxy für die Umsetzung einer neuen Idee zur Blenderkennung nutzen. Mit Hilfe dieser Funktion möchte ich drei Clips vergleichen und testen wie oft der Wert eines Pixels des zweiten Clips zwischen den Werten der beiden anderen Clips liegt. Da man mit yv12lutxy nur zwei Clips vergleichen kann, muss ich dazu entweder dreimal diese Funktion aufrufen, oder halt nur zweimal und denn die Ergebnisse mit Logic zusammenfassen. Auch kenne ich die grobe Syntax von yv12lutxy.
    Nun aber zu meinen Fragen:
    1.Ich möchte nur mit dem Lumaanteil arbeiten und mit yv12lutxy eine Art binäre Maske erzeugen (also nur 0 oder 255 für Luma). Ist es notwendig auch uexpr und vexpr zu setzen? Da der Clip nur zur Analyse da ist, ist mir eigentlich egal was aus dem Chroma wird, Hauptsache es läuft möglichst schnell und ich kann das Ergebnis mit Logic zusammenfassen.
    2.Sollte ich lieber greyscale zu Beginn aufrufen (ich hatte bis jetzt das Gefühl, dass der zusätzliche Filteraufruf nur mehr Arbeit bedeutet und Geschwindigkeitsverlust bedeutet)?
    3.Die Funktionsweise von Logic ist ziemlich simpel und lässt sich prima auch mit yv12lutxy bewerkstelligen. Welches der beiden Funktionen ist jedoch die schnellere (aufgrund von Code Optimierungen usw.)?
    4.

    PHP
    thick = yv12lutxy(c, exin, yexpr="y "+lum+" < y "+lum+" ? x "+thr+" + > x y "+lum+" < y "+lum+" ? - 0 ? "+str+" * x +",uexpr="x",vexpr="x")

    Zwar habe ich mich über die Syntax belesen, mit diesen Codefragment aus fastlinedarken aber zum Beispiel kann ich ziemlich wenig anfangen. Wofür ist das "+lum+" dar? Weshalb auch "+str+" usw.? Inwiefern verändert sich die Syntax der Funktion dadurch? :ichdoof:

    Würde mich sehr freuen, wenn jemand mit etwas mehr Erfahrungen in Bezug auf Masktools mir helfen könnte. :ja:

  • Zu 4.:

    "+lum+" und "+str+" sind eigentlich leicht zu erklären: So werden mehrere einzelne Zeichenketten zusammengesetzt. Beispiel:

    PHP
    Wochentag = "Sonntag"
    Jahreszeit = "Sommer"
    
    
    Text = "Heute ist ein "+Wochentag+" im "+Jahreszeit


    Dann ergibt sich als Wert für die Variable "Text" der Inhalt "Heute ist ein Sonntag in Sommer".

    Ich habe deine AviSynth-Zeile mal als PHP-Quelltext formatiert, da sieht man's besser: Rot sind "Literale" (Zeichenketten-Konstanten, wie sie geschrieben stehen), blau sind Variablen, grün sind Operatoren (z.B. die "+", die die Stückchen zusammenfügen zu einer langen Zeichenkette).

    Da du nur eine Zeile ausgeschnitten hast, ist hier nicht zu sehen, welchen Wert die Variablen "str" und "lum" vorher hatten.

  • 1: Ja.
    2: Nein.
    Wenn Du nur nur mit den Luma-Ebenen herumrechnest , sind U und V einfach wurscht - also ist U=1, V=1 die schnellste Methode zum herumrechnen.

    3: Logic sollte etwas schneller sein. Puste nen Clip auf 400% Fläche auf, schreib beide Varianten zehn mal hintereinander hin, und schau' wieviel Zeit jede Variante für 1000 Frames braucht. Praxisorientiertes Benchmarking.

    4. Is doch klar: Funktionen haben Parameter, und deren Werte sind variabel. Da also in den LUT-Strings variable Werte auftauchen müssen, werden die Werte der entsprechenden Variablen in Strings gepackt, und diese in die Strings der LUTs eingebaut.


    Zitat

    möchte ich drei Clips vergleichen und testen wie oft der Wert eines Pixels des zweiten Clips zwischen den Werten der beiden anderen Clips liegt

    Zu spät. Patent ist schon angemeldet. :)

  • LigH & Didee
    Danke für die schnellen hilfreichen Erklärungen. :D

    Zitat

    Zu spät. Patent ist schon angemeldet.


    Nein, hätte ich mir die Masktools doch nur früher angeschaut :wall:.
    Meine erste Idee, als ich mir die Readme etwas genauer durchlas war ebend diese Blenderkennung. Rein prinzipiell ist sie meiner jetzigen und auch deiner letzten deutlich überlegen, oder? Naja, wenn du diese Funktion schon nutzt, dann werde ich wohl noch ein bisschen mehr nachdenken müssen :grübeln:.
    Dadurch sollten denn auch die Resultate für Animes sehr viel besser werden (20% meiner Quellen sind Animes, genauso viele fieldblended :( ) Trotzdem interessiert mich noch, wie die Dezimierung in deiner neuen Funkton abläuft.
    Nun gut, der Punkt geht an dich, habe aber natürlich auch schon viele andere Ideen die Masktools sinnvoll zu nutzen :ja: .

    Edit: Ok, dass Variablen in dieser Form verwendet werden müssen, verstehe ich nun, aber wie kann man denn mehrmals "?" innerhalb des Strings verwenden? Wie ist das mit der internen Klammersetzung? Könnte mir jemand bitte den String in normaler mathematischer Form (mit Klammern und sinnvoller Zeichenfolge aufschreiben?

    Cu, MOmonster.

  • @ incredible

    Ääähhh ... was den für Beckenbauer-Theorien? Sorry, steh' grad echt auf'm Schlauch??


    Zitat von MOmonster

    wie kann man denn mehrmals "?" innerhalb des Strings verwenden? Wie ist das mit der internen Klammersetzung?


    So ist das halt mit der "inversen polnischen Notation".

    Hmmh, Beispiel ...
    Wenn A kleiner 64 ist, gebe Null aus, wenn A kleiner 128 ist, gebe eins aus, zwei wenn A kleiner 192 ist, ansonsten drei. Am Ende wird mit 85.333 multipliziert, um das Ergebnis auf 256 zu normalisieren.

    In Avisynth schriebe man: (ohne \ Zeilenumbrecher)

    Code
    (  A <  64 ? 0: A < 128 ? 1: A < 192 ? 2:           3) * 85.333

    In verkehrt polonesisch schreibt sich das:

    Code
    "A 64 < 0 A 128 < 1 A 192 < 2 3 ? ? ? 85.333 *"

    Einfach mal darüber schlafen :)

    Zitat

    Rein prinzipiell ist sie meiner jetzigen und auch deiner letzten deutlich überlegen, oder?


    Jjj...ein. Geht ganz gut, braucht aber noch'n zusätzlichen Trick, um gut zu funktionieren. Weil, etwas anderes (und gerne Vergessenes), was die ganze Blendetection auch noch erheblich stören kann (je nach Methode) ist die "Frame-ist-I-oder-P-oder-B" - Frage, wenn die Quelle mpeg-codiert ist ;)

    Zitat

    Trotzdem interessiert mich noch, wie die Dezimierung in deiner neuen Funkton abläuft


    Ach so, ja ...
    immer noch ganz genauso. Stream bobben, Blends erkennen & ersetzen, Ergebnis in den Dezimierer 'reinstopfen. Da hat sich nix geändert.

  • Ok, gerafft, danke. :ja:

    Zitat

    Jjj...ein. Geht ganz gut, braucht aber noch'n zusätzlichen Trick, um gut zu funktionieren. Weil, etwas anderes (und gerne Vergessenes), was die ganze Blendetection auch noch erheblich stören kann (je nach Methode) ist die "Frame-ist-I-oder-P-oder-B" - Frage, wenn die Quelle mpeg-codiert ist


    Naja, die simple Idee kann man meist so simpel ja nun auch nicht anwenden. Auch hier wäre ein geringes Resizing vielleicht sinnvoll, grundsätzlich hätte ich aber zu geringe Schwellwerte einfach 128 (oder so) gesetzt, damit diese keinen Einfluß auf das Ergebnis haben (bzw. einen geringen). Diese kleinen Tricks brauchte ich schon für meine jetzige Blenderkennung und du auch für deine letzte (siehe Doppelsobel). ;D
    Grundsätzlich ist das Prinzip aber in Einfachheit und Wirkung unseren anderen Methoden überlegen.

    Zitat

    Ach so, ja ...
    immer noch ganz genauso. Stream bobben, Blends erkennen & ersetzen, Ergebnis in den Dezimierer 'reinstopfen. Da hat sich nix geändert.


    Na, wenn das so ist, werde ich an meiner Funktion wohl doch noch ein bisschen machen, zumal die Blenderkennung sowieso nur zweitrangig agiert in der nächsten Version und meine Umsetzung sich wahrscheinlich auch mächtig von deiner Unterscheiden wird. :ja:
    Vielleicht fällt mir ja auch noch was anderes ein.
    Vielen Dank zumindest nochmal für die schnellen Erklärungen, stand wohl gestern irgendwie auf´m Schlauch. ;)

  • Zitat

    Ääähhh ... was den für Beckenbauer-Theorien? Sorry, steh' grad echt auf'm Schlauch??

    FinalReleaseNewDidéeBlenddetection > TheoryNewDidéeBlenddetection ? MegaFreude : Vorfreude

    ;)

    Und der Beckenbauer, naja ... du kennst doch den eplus Spot:
    "Jo iss denn scho' Woinacht'n?" = Dicke Geschenke schon vor dem Fest
    Aber ich nehme lieber ein spartanisches Handy und freue mich dafür lieber auf eine fixe und tolle Blenddetection (anti-Pro7/SAT1'ing)

    Alles klar? ;D


    Eigentlich nennen mich die Leuts mittlerweile "Inc.", der protzigen Name da unter meinem Pic entstammt noch von einer Registration bei vcdhelp.com: Die "schwierige" Situation damals: Such ein Alias .... der Andrej sitzt über einem DailyMirror Titelblatt und da steht drauf "INCREDIBLE ..... bla bla bla" ... und zack war's drin.

    Call me snake.

  • Zitat

    Na, wenn das so ist, werde ich an meiner Funktion wohl doch noch ein bisschen machen, zumal die Blenderkennung sowieso nur zweitrangig agiert in der nächsten Version und meine Umsetzung sich wahrscheinlich auch mächtig von deiner Unterscheiden wird.
    Vielleicht fällt mir ja auch noch was anderes ein.
    Vielen Dank zumindest nochmal für die schnellen Erklärungen, stand wohl gestern irgendwie auf´m Schlauch.


    Hat zwar nicht viel mit dem Thema zu tun, aber nun ja. Das gesamte C_package ist durch dieses Verfahren überholt. Ich habe einen kleinen Test gemacht und es läuft wie erwartet. :daumen:
    Ich werde das Prinzip vielleicht in eine simplen Deblendfunktion umsetzen, da Didee es aber zuerst entdeckt hat wird es in meiner Restorefunktion nicht zum Einsatz kommen (definitiv nicht).
    Zumal meine Funktion ja sowieso ohne externe Filter zurecht kommen soll und die Masktools erst in Version 2.6 in Avisynth integriert werden, ist das wohl auch die richtige Entscheidung.
    Crestore ist tod (wird nicht mehr weiter entwickelt).
    Ich setze mir trotzdem den Hut auf dich zumindest teilweise auch zu einer neuen Version von restore24 angetrieben zu haben, Didee. :D

    Dass heißt jedoch nicht, dass restore24 zukünftig wieder die einzige Restorefunktion sein wird. Ich arbeite an einer Funktion, die völlig ohne Blenddetection Normwandlungen dieser Art rückgängig machen soll. (Ach ja diese wird natürlich noch schneller laufen :D )

  • Zitat von MOmonster

    Ich werde das Prinzip vielleicht in eine simplen Deblendfunktion umsetzen, da Didee es aber zuerst entdeckt hat wird es in meiner Restorefunktion nicht zum Einsatz kommen (definitiv nicht).


    Nee, halt mal.

    Das mit der Patentierung wird wohl nix :D - lass' Dich also *davon* bloß' nicht abhalten! Zumal ich nicht den leisesten Ton gesagt habe - Du bist ja ganz allein draufgekommen. Wenn es also funktioniert, dann benutz' es gefälligst auch! (Imperativ!)

    Ausserdem, solange Du bei dieser Auswertung mit YV12LUTxy im Kreis herumwurschtelst, schau' ich mir das völlig entspannt von meinem Sessel aus an ... :)

  • Wie bereits gesagt, soll auch meine nächste Version völlig ohne externe Filter auskommen. Auch arbeite ich wie gesagt an ein total anderen Prinzip völlig ohne Blenderkennung, wenn überhaupt, dann wird diese Funktion diese Idee nur als Sicherheit integrieren.
    Du hast also einen besseren Weg als yv12lutxy? Interessant. :grübeln:

    (um das nochmal deutlich zu machen. Ich wollte einfach ein neues Prinzip für meine Restorefunktion entwickeln und habe auch eins gefunden, was hiermit nichts zu tun hat :D . Aber als ich mich wegen anderen Funktionen mehr mit den Masktools beschäftigt habe, kam mir diese Idee hier, die sehr vielversprechend war. Ich sehe aber kein Grund hier weiter anzusetzen, da du ja bereits diese Idee umgesetzt hast. Ich finde es einfach nicht sinnvoll an einer Idee zu arbeiten, wenn diese bereits schon so professienell von dir in Angriff genommen wird. Gibt ja noch so viele andere Ideen die man umsetzen kann. Hab das "Patent" natürlich auch nur scherzhaft verstanden.)
    Wie sagt man so schön?
    Mach´s besser! :cheers:

Jetzt mitmachen!

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