Duplicate Frames in VHS grabbings interpolieren, die zweite

  • USB Video Grabber ersetzen automatisch gestörte Bilder durch Kopien des letzten intakten Frames. Bei Grabbings von VHS tritt diese Situation regelmäßig auf. In einer Videokassette, die von einem billigen Recorder ohne Synchronspur aufgezeichnet wurde, hatte ich auf 80 Minuten laufzeit etwa 2000 Duplicate Frames. Diese Duplicate treten meist allein auf. In selten Fällen gibt es auch Serien bis zu 10 aufeinanderfolgenden identische Kopien.

    ..abc...........opq..stuvwxyz......... Originalframes des Films (gute Frames)
    ..a-c...........o-q..s------z......... VHS mit Dropouts (Bandknitter)
    ..aac...........ooq..sssssssz......... Ausgabe vom USB Video Grabber (Duplicate statt Originalframes)

    Die Duplikate sind 100% des Vorgängerbildes und können daher nachträglich mit YDifferenceFromPrevious gefunden und genau lokalisiert werden.

    Für das Problem wurden hier und hier Lösungen gezeigt, die einzelne Duplicate Frames durch ein aus Vorgänger und Nachfolger interpoliertes Zwischenbild ersetzen.

    Um in einem Testklip einen längeren Aussetzer zu korrigieren, habe ich Didées Vorschlag auf 10 Frames angepasst.

    Wie lässt sich diese Funktion so schreiben, dass sie allgemein M Frames an Position N ersetzen kann?

    Das Vorgehen per explizit aufzurufender Funktion hat noch zwei Mängel:

    • es werden Szenenwechsel nicht erkannt. Fällt zufällig das nächste Frame nach den Dups auf einen Szenenwechsel, dann blendet das Script via Motionkompensation zwischen zwei Szenen über. In solchen Fällen sollte aber besser gar nichts passieren. Die Resultate sähen befremdlich aus.
    • sollte es ein Möglichkeit geben, das Script automatisiert arbeiten zu lassen, um unterschiedlich lange Aussetzer automatisch zu reparieren.


    Eine Lösung bestände darin, zweistufig zu arbeiten.
    In einer Analyse wird erst eine Steuerdatei erzeugt, in denen Position und Anzahl der Dupes gelistet werden. Dabei werden Abschnitte bereits ausgeklammert, die mit einem Szenenwechsel beginnen oder enden. (Weil dann Interpolation keinen Sinn macht.)

    In einem zweiten Schritt könnte dann die Steuerdatei via ConditionalReader() eingelesen werden und würde Interpolationsroutinen für 1...m Frames starten.
    (siehe Beispiel auf http://avisynth.org/mediawiki/ConditionalReader)
    Dies hätte diese Vorteile

    • die Dupes werden in der Quelldatei genau gefunden
    • die Interpolation kann sauber an der deinterlacten und gefilterten Variante erfolgen
    • man kann "unglückliche" Stellen aus der interpolation ausklammern, indem die entsprechenden Positionen in der Steuerdatei gelöscht werden.
    • die Steuerdatei ist damit gleichzeitig ein Index, um hinterher gezielt die reparierten Stellen via Framenummer visuell überprüfen zu können


    Leider bin ich nicht in der Lage, so ein Script zu erstellen. Bedarf daran dürfte jeder haben, der USB Video Grabber verwendet.
    Sorry, ich bin blutiger Anfänger mit Avisynth.


    Lösung
    MorphDups ist ein Avisynth Skript, das solche doppelten Frames findet. Es erzeugt bei der Suche ein zweites Skript (morphmydups.avs) mit einer Funktion, die solche Duplikate ersetzt. Dazu wird die Funktion Morph von Mud Funky genutzt, die künstliche Zwischenbilder errechnet, und mit ihnen Duplikate ersetzt.

    Einmal editiert, zuletzt von olafp (13. März 2012 um 10:34) aus folgendem Grund: Lösung ergänzt

  • Also 2000 dupe Frames auf 80 min klingt wirklich böse :eek: . Selbst mit meiner uralten Hauppauge WinTV/Radio hatte ich beim Capturen von VHS in einer von drei unterschiedlichen 90 min Aufzeichnungen maximal 1 doppeltes Frame drin.

    Wenn ich sowas lesen, habe ich stark den Eindruck, dass die A/D-Wandler aktueller "USB Videograbber" noch WESENTLICH empfindlicher auf Gleichlaufschwankungen vom Recorder reagieren, als der betagte BT848 Chip auf meiner Hauppauge. Traurig sowas - vor allem weil bei den Grabbern (im Gegensatz zu früher bei derartigen TV-Karten) damit geworben wird :( ...

    Who is General Failure and why is he reading my hard drive?

    He was trying to get in touch with Private Data but if it involves a Major Disaster I understand that the fault lies with General Protection.

    Furthermore, if you cannot reboot it may be because of a corrupt Colonel.

  • Wenn ich sowas lesen, habe ich stark den Eindruck, dass die A/D-Wandler aktueller "USB Videograbber" noch WESENTLICH empfindlicher auf Gleichlaufschwankungen vom Recorder reagieren, als der betagte BT848 Chip auf meiner Hauppauge.( ...


    Ja ist auch so und kann ich nur bestätigen. Videograbber sind der letzte Schrott zum capturen aber zum einfachen digitalisieren(also nur anschauen) reichen sie allemale.

  • Ich glaube aber, die meisten kaufen die sich tatsächlich zum Digitalisieren ihrer alten VHS-Kassetten :( . Liegt ja auch meist darauf zugeschnittene Software bei...

    Who is General Failure and why is he reading my hard drive?

    He was trying to get in touch with Private Data but if it involves a Major Disaster I understand that the fault lies with General Protection.

    Furthermore, if you cannot reboot it may be because of a corrupt Colonel.

  • Lösung, erster Teil: erstellt Textdatei mit Duplicate Frames

    Gut, dann versuche ich selbst eine Lösung. Das folgende Script durchsucht die source nach Duplicate frames und schreibt sie in die Datei dups.txt.

    Code
    [B]frame position : gap-length : Ydiffpregap : Ydiffpostgap : marker[/B]57 10 3.217846 10.803629 104 1 4.960470 4.838520 107 1 7.204895 4.491889 ...

    Neben Frame nummer und Länge des Aussetzers stehen hier auch die Ydifference vor und nach dem Aussetzer, damit später Szenenwechsel oder zu große Unterschiede von der Interpolation der Lücke ausgeschlossen werden können.

    Hier das Script:

    Dies lässt sich sicher vereinfachen und eleganter schreiben.

    Diese Version hat noch zwei Fehler:

    • Der visuelle Marker gapmarker behält die Länge 0, statt mit der aktuellen Gap-Länge gap_l zu skalieren.
    • Anscheinend notiert das Skript die Ydifference zu vorher und nachher aus dem Kontrollvideo (welches sich ändernde Untertitel enthält), statt aus der Original source. Woran liegt das?


    Ich bitte um Hilfe. Danke.


    Lösung gefunden
    MorphDups ist ein Avisynth Skript, das solche doppelten Frames findet. Es erzeugt bei der Suche ein zweites Skript (morphmydups.avs) mit einer Funktion, die diese Duplikate ersetzt. Dazu wird die Funktion Morph von Mud Funky genutzt, die künstliche Zwischenbilder errechnet, und mit ihnen Duplikate ersetzt.

    Einmal editiert, zuletzt von olafp (13. März 2012 um 10:28) aus folgendem Grund: Lösung gefunden

Jetzt mitmachen!

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