Frame verwerfen und neu berechnen

  • Hi zusammen

    In meinem video gibt es Bilder die zum Teil gedoppelt wurden um auf die entsprechenden FPS zu kommen. Nur scheinbar nicht nach einem festen Muster. Manchmal gibt's 5 aufeinander folgende Bilder und das sechste ist eine Kopie des fünften, manchmal nur drei oder vier aufeinander folgende und dann eine Kopie des letzten ... Dadurch entstehen zwangsweise Ruckler.
    Nun könnte man die Kopien via TDecimate einfach killen, aber meine Idee wäre es die Kopie zu verwerfen und aus dem vorherigen bzw. nachfolgendem Frame ein eues zu berechnen. Nur leider komme ich nicht weiter:

    Das Problem sollte wohl klar sein: Wie verwerfe ich die Kopie und interpoliere das neue Bild ? Z.Z. scheitert es an SelectEvery(1,1). Das sollte doch das aktuelle Bild überspringen und zum nächsten übergehen ... Wenn nun MAnalyse(isb = true) zuschlägt, sollte die Kopie nicht mehr vorhanden sein und das vorherige Bild als backward_vec genommen werden ...

  • Das verdoppelte Frame soll ja wohl nicht gelöscht, sondern mit einer Interpolation ersetzt werden, wenn ich das richtig verstanden habe, weil sonst durch das Löschen die Spieldauer verändert wird. Aber eben mit etwas aufwändigerem als bei BadFrames() interpoliert, mit der Bewegungsschätzung der MVTools2.

    Und wenn es um ConditionalFilter und MVTools2 geht, muss ich wohl wieder nach dem Meister rufen, vor allem wenn ich den Verdacht habe, dass das Problem hier ganz anders angedacht werden sollte (war das mal VFR, oder Nonsense-Vertuschungs-Normwandlung?).

    Mach du schon mal einen Ausschnitt fertig, anhand dessen man das ganze testen kann (oder ganz bestimmt sagen, dass hier nichts mehr zu retten sei).

  • Zitat

    Das verdoppelte Frame soll ja wohl nicht gelöscht, sondern mit einer Interpolation ersetzt werden


    So habe ichs auch verstanden.
    Früher ging das mit Topaz Moment.
    Das Tool rechnete aus dem verdoppelten Frame und dem sauberen Nachfolgenden ein neues Bild.
    Leider gibts diese Version nicht mehr neu zu kaufen und die alte version will nicht mehr unter Win 7 arbeiten.

    Nachtrag-
    http://www.topazlabs.com/moment/

    Datenrettungen Normwandlungen Restaurierungen Digitalisierungen

  • ne, Selur hat schon recht. p=delta Frame, b=Kopie des vorherigen Bildes
    Der Stream (kann) so aussehen pppppbpppppbpppbpppppbpppb.... nur folgt das scheinbar keinem festen Muster. Und ich gehe mal davon aus das die Normwandlung verhunzt wurde ...
    Wie auch immer, meine Idee: Wenn eine Kopie festgestellt wird (siehe ConditionalFilter) dann soll aus dem vorherigen Bild und dem Nachfolgenden ein Neues errechnet werden das die Kopie ersetzt. Und genau das versuche ich mit den MVTools zu machen indem ich das aktuelle Bild (das ja die Kopie des Vorgänger ist) verwerfe und danach mittels MFlowFps mir ein neus errechnen lasse. Soweit ich's verstanden habe schaut backward_vec doch ein Bild in die Vergangenheit und forward_vec eins in die Zukunft. Die Kopie gibt es nicht mehr und MFlowFps produziert ein interpoliertes Frame aus backward_vec & forward_vec

    Selur: Das mit dem Trim funktioniert nicht. Ich bekomme: Ivalid arguments to function Trim

  • Nee, kann kein Typo sein weil sonst die Fehlermeldung anders wäre ...
    Wie auch immer, ich hab's mal umgestellt und es kommt jetzt keine Fehlermeldung mehr:

    ABER, das Ganze zaubert mir jetzt an die Stelle wo vorher die Kopie war zwar ein interpoliertes Bild, das aber aus einem ganz Anderen Zeitraum. So wie's ausschaut wird last nicht richtig an clp weitergegeben und clp steht daher auf einem andren Framecounter als last ... oder es liegt an MSuper der nicht neu angelegt wird wenn die Funktion aufgerufen wird.

  • Der ursprüngliche Ansatz ist okay ... bis auf zwei Dinge:

    - Threshold=0 für Ydifference ist i.d.Praxis vermutlich zu klein, bei Mpeg2-Codierung sind die Dup-Frames vermutlich nicht völlig identisch. Überprüfen und den Threshold ggf. etwas größer wählen.
    - Es ist keine so tolle Idee, den Komplex aus SuperClip-Erstellung + Bewegungssuche innerhalb des Conditionalfilter anzulegen. Die komplette Conditional-Environment wird doch irgendwie bei jedem Frame neu initalisiert.
    Besser ist's, den Clip mit neu-errechneten Frames komplett extern außerhalb der Conditional-Enironment zu erstellen, und dann im ConditionalFilter eben nur noch darauf zuzugreifen.

    In etwa

    Die MVTools-Parameter in der "fflow()" -Deklarierung dürfen natürlich nach belieben erweitert & verfeinert werden. ;)

  • Versuchs mal hiermit:

    Den threshold musst du per Sichtvergleich ermitteln.
    Dazu die Zeile mit metrics=true einsternen und die letzte Zeile aussternen ... was da genau angezeigt wird, weiss ich nicht mehr :)
    Alternativ nimm den Wert höher oder Tiefer und guck dir an, welches der beste Kompromiss zwischen "verbleibende doppelte Frames" und gelöschten "nicht doppelten Frames" ist.

    Ups ... sorry ... hab ganz übersehn, das da noch eine Seite 2 war :)

Jetzt mitmachen!

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