Video länger machen ohne fps zu verändern

  • Oh, da fällt mir beim Überfliegen etwas auf:

    Die SC-detection berechnet für jeden zu bearbeitendem Frame vier mal (!) das AverageLuma eines Frames. Ist wohl nicht so schlimm, weil die Frames zur Analyse auf 1/16 der Fläche reduziert werden ... aber trotzdem, einmal wäre genug. Es handelt sich ja immer um die Frames N-1, N, N+1, N+2.

    Freihändig, ohne zu probieren:

    Achtung, scharfi: das ist nur der entsprechende Ausschnitt des Scripts! :D

    Nachteil wäre, dass ganz am Anfang während der ersten 2 bis drei Frames keine Scenechanges erkannt werden. Kann man in der Praxis wohl meistens verschmerzen.

  • Sehr richtig, da muss ein "global" hin ... ist korrigiert, Danke. Wie gesagt, freihändig :)

    Eventuell müsste man die Berechnungen in "f1=..." & "f2=..." ein wenig anpassen: X * 5 + 25 ist vielleicht einfach zu groß. Weiss ich aber nicht sicher ... hab mit dieser Funktion selber noch nicht gearbeitet & kann deswegen nicht abschätzen, wie der Output von MotionMask() in diesem Fall hier genau aussieht :redface:

    Vielleicht fällt dem Erfinder noch was schlaues ein.

  • mvfpsscd() funktioniert eh nicht ganz richtig.
    (bei dem erwachsenenvideo, was mir da zugeflogen ist, hats recht gut geklappt, aber der abspann hat geholpert, da lowmotion, siehe unten)

    grundgedanke: das avgluma eines motionmask-bildes bei einem scenenwechsel ist x-mal höher, als die summe des AVGluma der vorhergehenden und nachfolgenden bilder

    problem:
    ich würde diese erkennung gerne VOR der framerate umwandlung machen und das ergebnisflag dann auf die neue framerate bringen, geht aber irgendwie nicht.

    deswegen läuft die scenechange-erkennung hinter einem changefps().
    problem dabei: bei low motion, oder ungünstig-motion©®™ werden auch zwischendurch mal scenenwechsel erkannt, wo keine sind, weil changefps dupes oder drops ins video schmeisst.
    deswegen ist x*5+25 auch so hoch angesetzt. leider.

    wenn dann jedenfalls ein szenenwechsel erkannt wurde, werden die frames vor & nach dem szenenwechsel mit den frames vom changefps() ersetzt.

  • Also wenn ich ein Szenenerkennungstool hätte, was mir die Szenen in irgendeiner TXT-Form auflistet, könnte ich mit Hilfe von Excel die in ein Script reinbasteln welches dann vom Prinzip so aussähe:
    ______________________________________________________
    LoadPlugin("c:\DGDecode.dll")
    MPEG2Source("test.d2v")

    a=trim(0,394).mvfps(30).assumeFPS(25)
    b=trim(395,517).mvfps(30).AssumeFPS(25)
    c=trim(518,682).mvfps(30).AssumeFPS(25)
    d=trim(683,1218).mvfps(30).AssumeFPS(25)
    e=trim(1219,1354).mvfps(30).AssumeFPS(25)
    .....
    ....
    ...
    return a+b+c+d+e+...+...

    ________________________________________________________________

    Bei 1h Stunde Film mit ca. 10 Szenen pro Min wären das dann ca. 600 Zeilen. Aber das kann man automatisieren. Wieviel "Scriptlänge" hält eigentlich Avisynths aus ?

  • Windows Taskmanager
    Ich musste die Auslagerungsdatei auf einige GB erhöhen damit es überhaupt läuft. Bei 120 Zeilen braucht er 1,8 GB Ram (also *5 = 9GB). Bei mehr Zeilen lädt er bis zu 2,5 GB und dann kommt die Meldung "Zu wenig Arbeitsspeicher" oder der Player stürzt ganz ab.

    Das einfache
    " Trim(0-100)
    Trim(101-143)
    Trim (144-xxx) "
    lädt er ja ohne Probleme 600 mal

    aber weil hinter jede Zeile dann ein ".mvfps(30)" kommt explodiert der Ramverbrauch regelrecht.
    Das Assumefps(25) muss man ja nur am Ende einmal machen. Aber sonst habe ich keine Idee das zu optimieren.

  • Ich habe das Thema nach Jahren mal wieder aufgenommen. Diesmal habe ichs mal mit nem anderen Ansatz probiert
    Ein Beispiel: ich will ein Video (25fps Progressiv) um 50% länger machen. Dazu nutze ich das Plugin "Interframe" http://forum.doom9.org/showthread.php…highlight=speed

    Code
    InterFrame(NewNum=37500, NewDen=1000,Cores=4)
    AssumeFPS(25)

    Das Ergebnis sieht ganz gut aus. Weniger Blend-Schatten. Kaum Ruckeln. Leider auch ein Mischbild beim Szenenwechsel.
    Viellcht interessiert es jemanden und kanns gebrauchen.

  • Ich möchte noch hinzufügen, dass man bei interlaceced Material vorher deinterlacen sollte.
    Tdeint() (25 fps) reicht schon um ein gutes Ergebnis zu erzielen. Wenn ich Tdeint(1) (bobbing 50fps) mache, ruckelt es wieder ein kleines bisschen. Obwohl ich dachte, wenn er aus 50 Bildern 37.5 machen soll, wäre das besser weil ihm ja mehr Ausgangsmaterial zur Verfügung steht als wenn ich von 25 Bildern ausgehe.

  • Ja, beim Bobben von Videos (engl. "bob" ~ "nicken"; bei First-Person-Shootern auch das Auf- und Abbewegen der Kamera als Simulation des Laufens über die Beine) hat man leichtes "Flackern", weil ja immer jeweils die andere der beiden Zeilen eines Paares interpoliert wird. Didée hatte mal was von einem Ausgleich mit Hilfe einer Subpixel-Verschiebung geschrieben...

    Im Falle von Interlaced-Material, das zu exakt halb so schnell spielendem Progressiv-Video konvertiert werden soll, wäre vermutlich eine der besten Lösungen:

    source.QTGMC(...).AssumeFPS(source.FrameRateNumerator, source.FrameRateDenominator)

  • Ich habe einen Vergleich gemacht. Die Interframe-Methode hat bei meiner Testszene besser abgeschnitten. Man beachte das Geländer oben am Balkon. Bei der MFlowFps() Methode flimmern die Stangen in mehreren Bildern nur so herum bei Interframe gibt es kaum Fehler ausser mal in einem Bild.

    [Blockierte Grafik: http://s7.directupload.net/images/user/130416/temp/4jcpxgo7.jpg]

  • Völlig fehlerfrei sind Algorithmen mit Bewegungsschätzung eigentlich nie, selbst wenn man sie erst mal zumindest technisch korrekt verwendet; vielleicht lassen sich die Parameter für MSuper und MAnalyse noch etwas tweaken, um das zu vermeiden. Aber das weiß wohl jemand mit mehr praktischer Erfahrung besser als ich.

  • Das hier produziert recht gute Ergebnisse:

    den threshold beim FDecimate() musst du an dein Video anpassen. Dafür benutzt du die Zeile darüber und sternst die letzte Zeile erstmal aus. Näheres dazu findest du auf der Homepage von Donald (http://neuron2.net/fdecimate/fdecimate.html).

    Die SVSuper-Plugins zum laufen kriegen war, soweit ich mich erinnern kann, pain-in-the-ass, aber wie gesagt, gibt schön smooth extrapolierte Frames und garnichtmal soviele Bildfehler.

  • Ach nee, da gibt's mal was interessantes neues, und das erfährt man nur so nebenbei... :hm:

    Dabei meine ich insbesondere die auf GPU-Unterstützung gepatchte MVTools2-Variante, die allein damit schon Geschwindigkeitsvorteile bringen kann, unabhängig von der zusätzlichen Funktion MSmoothFps.

    Das einzige, was mir noch etwas Kopfzerbrechen bereitet, ist der Parameter "url" in SVSmoothFPS aus der SVPflow.dll. Sieht irgendwie nach "Schutz geistigen Eigentums" aus, aber die Auswirkungen sind nicht dokumentiert...

  • Wobei die mvtools2 Variante wohl vermutlich Probleme mit den neueren Avisynth 2.6 Versionen machen wird, gab dafür ja extra ne neuere mvtools2 Version,...
    + "Their outputs is exactly the same but GPU output can be a little less sharp. " da hat jemand eine andere Vorstellung von 'outputs is exactly the same' als ich, wenn die Ausgabe dann doch unterschiedlich scharf ist. ;)

  • Das einzige, was mir noch etwas Kopfzerbrechen bereitet, ist der Parameter "url" in SVSmoothFPS aus der SVPflow.dll. Sieht irgendwie nach "Schutz geistigen Eigentums" aus, aber die Auswirkungen sind nicht dokumentiert...

    Meinst du die technischen oder rechtlichen Auswirkungen?

    Technisch ists einfach ... fehlt der Parameter oder trägt man da was anderes ein, funktioniert die dll's nicht mehr.
    Rechtlich hab ich nix gefunden, außer das die jungs sich wohl damit von ???vorgängerversion??? abeheben wollen. Warum auch nicht ... ist auch gut gelungen finde ich.

    Wobei die mvtools2 Variante wohl vermutlich Probleme mit den neueren Avisynth 2.6 Versionen machen wird

    Gute Frage ... ich hab die SVP-Version draufgehauen, noch irgendeine DLL ins system32 kopieren müssen und dann lief es. Dafür liefen dann 'ne ganze Menge anderer Sachen instabil, also hab ich die 2.5er wieder drübergebügelt und jetzt läuft bei mir beides.

    Soweit ich das gesehen habe, rauchen die Plugins ab, sobald von der Grafikkarte mehr Speicher gezogen wird, als diese onboard hat ... ich hab in meinem Lappi 1 GB drauf und sobald ich da nahe rankomme (größer 900irgendwas MB) gibts ne Schutzverletzung.

Jetzt mitmachen!

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