Zeitlupe von einem VFR-Clip

  • Für dieses Vorhaben könnte ich eventuell etwas Hilfe im Weiterdenken gebrauchen; ich bin mir aber noch nicht mal sicher, ob sich das lohnt...

    Es wurde ein 720p-HD-Video mit einer kleinen Action-Kamera aufgezeichnet, die allerdings die Framerate wohl der Frame-Bytegröße anpassen muss, jedenfalls liegt die laut MediaInfo-Bericht maximal bei NTSC-Rate, häufig aber auch darunter.

    Mit DirectShowSource habe ich eine CFR-Variante mit PAL-Rate erstellt. Die wird sicherlich den gewissen Nachteil haben, dass ab und zu mal Frames übersprungen werden, die Bewegung also nie flüssig ist.

    Setzt man nun solches Material einer Funktion vor, die eine 4x-Zeitlupe berechnen soll, werden solche Ungleichmäßigkeiten stark bemerkbar. Beim einfachen ConvertFPS().AssumeFPS() durch "merkwürdiges Ruckeln"; bei MFlowFPS().AssumeFPS() noch schlimmer durch erhebliche Artefakte. Die wollte ich schon mit einem Extra-Schritt MFlowBlur() aufweichen, aber das klappte im Ergebnis auch nicht wirklich "besser".

    Ich hab sogar eine Variante mit zweistufiger Frameratenänderung versucht, inklusive nachfolgender Bewegungsunschärfe. Das Ergebnis kitzelt ein wenig den Brechreiz, fürchte ich...

    Meine Befürchtung wäre nun: VFR ist für bewegungskompensierte Funktionen schlicht keine geeignete Basis. Aber vielleicht hat jemand einen ganz anderen Ansatz?

  • Zitat

    jedenfalls liegt die laut MediaInfo-Bericht maximal bei NTSC-Rate,


    VFR und maximal 24 Bilder pro Sekunde ist nicht schön für normal aufgezeichnetes Material,...

    Ich vermute der Ton ist wichtig, sonst könnte man ja einfach:
    1. AssumeFPS() mit synch_audio=true verwenden und dann
    2. die Stellen die gestreckt werden sollen mit SalFps3 oder InterFrame bearbeiten (und mit Assume FPS wieder auf die gewünschte Framerate einstellen), dabei ist dann natürlich der Ton nicht dolle,...

    -> Ordentlich wird es vermutlich nur wenn man da 'Szenen'-weise vorgeht. (würde da den Stream mal nach mkv umpacken und die Timecodes extrahieren und angucken um einen groben Blick dafür zu bekommen wie schlimm das Problem wirklich ist)

    Cu Selur

  • "NTSC hat 30/1,001." normalerweise aber nicht bei progressivem Material ;)

    Zitat

    Es wäre vermutlich auch nicht allzu sinnvoll, zunächst auf eine höhere CFR zu rechnen, weil es da nur mehr Duplikate gibt?


    Denke das sinnigste ist erst mal abchecken wie oft das Problem wirklich auftritt, wenn es nur ein paar Szenen sind, könnte man diese separiert behandeln,...

  • Damit die Timecodes korrekt extrahiert werden, muss man wirklich die Dokumentation exakt lesen, sonst hat mkvextract "nichts zu tun" ... :rolleyes:

    Code
    mkvextract timecodes_v2 RPXD0005.mkv 1:RPXD0005.mkv.csv

    Und siehe da — regelmäßige Abstände von 32 ms. Ton kann man weglassen, der würde eh bloß doof klingen. Damit sollte es also möglich sein, auch vernünftige Bewegungsinterpolation hinzukriegen. Mal testen... :floet:

  • Murks... stimmt auffällig. Ja, in Spur 0 (Video) schwankt es um 30-36 ms, meist 32 oder 34. Für den interessanten Abschnitt (Frames 1080-1180) also 33,54 fps. Na, egal, auf jeden Fall regelmäßig genug, dass es für die paar Sekunden als CFR durchgeht.

    Ich hab mal Beispiele auf MediaFire hochgeladen:

    • Skeet_base.mkv — recodierter Ausschnitt ohne weitere Filter (noch mit 32 ms, egal)
    • Skeet_intl.mkv — Interleave(4×).AssumeFPS(25) — nun ja, ruckelt, aber vertretbar
    • Skeet_conv.mkv — ConvertFPS(100).AssumeFPS(25) — völlig vergeistert, in die Tonne
    • Skeet_mvf.mkv — MFlowFPS(100).AssumeFPS(25) — fast flüssig, bis auf die Schlieren; leider nix
    • Skeet_mvfb.mkv — MFlowFPS(100).MFlowBlur(blur=50).AssumeFPS(25) — auch nicht wirklich angenehmer

Jetzt mitmachen!

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