PAL-Speedup 23.976 -> 25 fps ->50fps

  • Hallo,

    Ich würde gern zu Testzwecken einen Pal Speedup mit Avisynth machen. Und zwar einmal nach 25fps und einmal nach 50fps.
    Ausgangsdatei ist ein MKV (1 280x720 23,976 FPS +AC3 2.0). Das direkte Muxen (tsMuxer) mit 25fps funktioniert zwar, aber Bild ->Ton sind total asynchron.

    Ist dafür ChangeFPS/ ConvertFPS oder AssumeFPS geeignet ?

    GGRUB

  • Ist dafür ChangeFPS/ ConvertFPS oder AssumeFPS geeignet ?

    Ja.

    ;D

    NTSCclip.AssumeFPS(25, 1, true) beschleunigt den Film und auch die Tonspur (mit höherem Pitch), die dann wieder auf eine gewünschte Rate resampelt werden sollte. Soll die Tonhöhe erhalten bleiben, würde man wohl statt dessen die TimeStretch-Funktion benötigen.

    Um noch von 25 auf 50 fps zu kommen, würde man wahrscheinlich einen Bobber verwenden, wenn die Quelle echt interlaced sein sollte, was aber bei 720p wohl nicht der Fall ist; progressives Material wird dann wohl eher verdoppelt, dafür ist ChangeFPS(50, 1) geeignet. Wenn man interpolieren wollte, wären die MVTools und z.B. MVFlowFPS geeignet.

  • Vielen Dank, so werde ich es machen.

    Die AC3 2.0 Spur bearbeite ich mit eac3to. (-speedup : convert 23.976 and 24.000 content to 25.000 fps )


    GGRUB

  • Hat alles wunderbar geklappt.

    Wie würde man denn mit avisynth die Frames bis auf 25fps auffüllen, ohne die Datei einfach nur schneller abzuspielen ? Da müssten doch an bestimmten Stellen doppelte Frames eingefügt werden, oder ?


    Gerd

  • ConvertFPS() erlaubt hier durch den Parameter "zone" ein gewisses Tuning, in einem Bereich innerhalb des Bildes zum nächsten Frame zu überblenden, eine Art sanftes "Tearing". Man kann also in Bewegungen leichte Überblendungsstreifen sehen, das kann aber zu einem gleichmäßigeren Bewegungseindruck führen als das Verdoppeln jedes 24. Bildes, das doch ein merkliches Sekunden-Ruckeln hervorruft, oder ein 25:24-Pulldown, der halbsekündlich die Phase verschiebt (das müsste dan interlaced encodiert werden). Ohne diesen "zone"-Parameter würde ConvertFPS() das komplette Frame graduell überblenden. Mehr dazu auch bei "exotisches Interlacing" von scharfis_brain.

    Erheblich aufwändiger, aber erfreulicherweise noch vernünftig schnell, arbeitet MFlowFPS() von den MVTools v2. Hier werden durch Interpolation und Bewegungsschätzung aus angrenzenden Frames insgesamt neue Frames berechnet. Falls man ein interlacetes Original hatte, wird man hier wahrscheinlich gleich vor der Anwendung mit Anpassung der Frame-Höhe bobben, bei progressivem Original wohl nur resizen. Optimale-Qualitäts-Strategien überlasse ich anderen...

    Code
    super = MSuper(pel=2)
    backward_vec = MAnalyse(super, isb = true)
    forward_vec = MAnalyse(super, isb = false)
    MFlowFps(super, backward_vec, forward_vec, num=25, den=1)
  • Generell würde ich von einer 24->25fps Wandlung mit MFlowFPS ganz entschieden abraten. Die Methode ist dann am "besten" einsetzbar, wenn eine (niedrig) integrale Änderung der Bildanzahl-pro-Sekunde stattfindet. Allen voran die Verdoppelung der Bildanzahl, das ist ein besonders günstiger Fall. Im Gegesatz, 24->25 ist ein ganz besonders ungünstiger Fall.
    Immer bedenken, dass Bewegungsinterpolation "grundsätzlich Mist" ist ;) - in einfachen Fällen wie z.B. Kamera-Panning funktioniert es wunderbar, aber sobald die Bewegungen bzw. Vorder-/Hintergrund-Geschichten etwas schwieriger werden, entsteht ganz schnell Unsinn, sprich Artefakte.
    Jedenfalls: Wenn eine Bildsituation Fehler provoziert, dann ist bei z.B. 25->50 jeder Fehler nur 20 Millisekunden präsent, bevor das Auge wieder mit 20 Millisekunden "Originalbild" verwöhnt wird.
    Wandelt man 24->50, dann ist ein Fehler potentiell fast eine komplette Sekunde durchgängig präsent. Dann kommt für 20ms ein Originalbild. Dann wieder eine Sekunde "Fehler". Dann wieder ein Originalbild. (Genauer: ein Fehler baut sich eine halbe Sekunde auf, baut sich eine halbe Sekunde wieder ab, baut sich eine halbe Sekunde wieder auf, eine halbe Sekunde wieder ab, ...)

    Noch schlimmer, der "üblichere" Fall 23.976 -> 25. Da ist die Phase dann 1001 Frames lang, d.h. nur ein einziges Mal in ca. 40 Sekunden erscheint ein einziges Originalbild. Die restlichen 39.96 Sekunden gibt's nur interpolierte Bilder.

    Wenn besonders geeignetes Bildmaterial vorliegt, vorzugsweise nur langsame Kamerafahrten ohne Bewegung "im" Bild, dann kann man auch 24->25 mit MFlowFPS machen. Aber als "generelle" Methode ist das ein ziemlich übles Ding.

    Zitat

    Wenn es in die Hose geht, (-und das wird es-), dann geht es dermaßen in die Hose, dass die Scheizze unten zu den Hosenbeinen wieder herausquillt.

  • Auf den ersten Blick sieht das Resultat ganz gut aus. Ich habe aber testweise nur ein 2 Minuten Video mit wenig Bewegung verarbeitet. Die Performance war zuerst ziemlich mies, und das bei einem übertakteten I7-2600k (Win7 64bit). Also habe ich Avisynth 2.6 MT (2012.05.16) verwendet mit den SetMTMode Tipps von euch beiden.

    So hatte ich mit MeGUI wenigstens 11fps, allerdings mit einer total schwankenden CPU-Last von 5%-70%. Ist das normal ?

    Didée
    Also ist es besser die Finger ganz von der 24->25 Wandlung zu lassen ?

    Ich werde trotzdem mal einen ganzen Film nach LigH´s Tipp encoden, mal schauen was dabei rauskommt.

    Gerd

  • Vermutlich ein überschärfter, eher schwer komprimierbarer Film, in dem Kompressionsartefakte des Originals und Interpolationsfehler deutlicher dargestellt werden. Sharpen() dürfte kaum jemand im Allgemeinen empfehlen.

    Aktuelle HD-Fernseher sollten verschiedene Frameraten recht problemlos darstellen können. Die Notwendigkeit von Normkonvertierungen ist daher heutzutage recht gering.

  • Probier's einfach mal aus. Wenn das Ergebnis subjektiv gefällt, dann ist's egal, ob es objektiv Murks ist ...

    Anderer Tipp zum Probieren:

    - setze zusätzlich "pel=1" in MSuper
    - Ersetze "MFlowFPS" durch "MBlockFPS"
    - Wenn Quellvideo bereits in HD-Auflösung, setze "blksize=16" in MAnalyse()

    => jetzt kann Dein i7 das in Echtzeit abspielen. Z.B. auch, indem man das Script in den "Avisynth"-Tab von ffdshow reinklatscht. (Für ffdshow braucht's dann noch einen "Distributor()" am Scriptende.)

  • tach auch !
    Mag sein, daß ich im falschen Fil mbin, bare :
    - 23,9* ist doch NTSC welches dazu gedacht ist auf 29,9* "aufgebalsen" zu werden.
    Gut 24 FPS (FILM) ist nicht weit weg davon.
    Deshalb ist ja PAL Speedup erfunden worden.
    Man nimmt 24 FPSW und läßt sie schneller laufen.#
    Erfol : es beleiben dieselebn Oridginalen Frames nur eben etwas scheller, der Ton wird ohne die Höhen zu ändern auch beschleunigt und gut ist .
    Die 4% schneller merkt man in der Regel nicht.

    Das zu interpolieren (24 auf 25) muß ja grauenhaft aussehen.
    (Wie von didiee angemerkt).

    Aber warum muß man heutzutage noch 23,9 auf 25 up speeden?
    Die Player und TVs spielen das i.d.R. ohne Probleme ab.

    Gruss BergH

Jetzt mitmachen!

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