Beiträge von olafp

    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.

    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.