Gleiche Frames entfernen? Dedup?

  • Hallo.

    Vor einigen Jahren hatte ich aus einem Video mit VirtualDub/VirtualDubMod/Avisynth/Dedub gleichartige Frames entfernt.

    Grund war, dass ich nur Frames im Film haben wollte, welche sich vom vorherigem Frame unterscheiden. (Ton ist nicht von Belang)

    Es ist eine Desktopaufzeichnung. In einem Teil ändert sich der Wert einer Zahl, im anderem Teil springt eine Markierung in einem bestimmen Bereich hin und her.

    Ziel ist es, je nach Position der Markierung, den variablen Zahlenwert zu erfassen.

    Das geht halt einfacher wen ich in VirtualDub immer zum nächsten Einzelframe springen kann und die gleichartigen schon fehlen.

    Leider bekomme ich es das nicht mehr hin. Ist auch schon sehr lange her.

    Mein DesktopRecorder hat mehrere Videoformate. VirtualDub spielt keins von denen ab. VirtualDubMod nur VOB und OGM. Wenn ich die in das Script für DeDub einbinden will, kommt entweder "YUY oder xxx nötig" oder "die Anschlüsse können nicht verbunden werden".

    Hat jemand einen Tipp, wie man es einfacher machen kann?

    ffmpeg.exe mit mpdecimate hatte ich auch schon getestet - hat bei mir nicht funktioniert. Scheinbar ändern sich bei mir zu wenig Teile des Frames.

    Gibt es vielleicht einen Desktoprecorder, welcher nur Änderungen aufnimmt?

  • was ist denn dei ziel(format) am ende?

    wenn du diesen weg durch hast,

    codier den auch einmal unbehandelt.

    eigendlich sollt ein codec differenzen erkennen und nur die änderungen speichern,

    auch bei 1000fps, nur der overhead wird etwas höhr. ist das signifikant?

    ich werde deinen weg nicht streitig machen,

    ich weiß selbst wie es ist, scheinbar nutzlose dinge zu machen um sein wissen zu erweitern.

    am ende solltest du dann prüfen ob sich der aufwand für das ziel künftig lohnt.

    da du provleme hast die desktopaufzgichnung zu öffen,

    stellt sich mir die frage:

    - welche software und/oder codec verwendest du zur aufzeichnung

    - ist virtualdub die neuste?

    - was sagt "mediainfo" zu deiner datei

    - ggf. kannst du eine testdatei erueugen und zur verfügung stellen?


    edit:

    ich weiß von alten avi codecs, die D (dropped frames) und K (key frames) haben.

    es wäre sicher möglich die D-frames zu erkennen, bzw. ganz einfach zum nächsten K-frame zu springen. wobei bei denen ich mir nicht sicher bin ob gleich bei jeder geringen veränderung gleich ein K-frame generiert wird.

    dazu bräuchte man volle konzrolle & wissen über den verwendeten codec.

    ggf. konvertiert man die aufzeichnung in einen solchen.

  • Hallo, danke für deine Rückmeldung.

    „was ist denn dei ziel(format) am ende?“

    ->das ist Egal. Es könnten auch Einzelbilder sein – Interesse liegt nur auf der Änderung im Videoinhalt. Ich möchte Informationen von zwei Verschiedenen Programmen (auf/in dem Desktopvideo) erfassen. Daher sollen die Frames ohne Inhaltsänderung raus.

    „such bei 1000fps, nur der overhead wird etwas höhr. ist das signifikant?“

    ->verstehe das nicht so recht.

    „ich werde deinen weg nicht streitig machen, am ende solltest du dann prüfen ob sich der aufwand für das ziel künftig lohnt.“

    ->genau so etwas „nutzloses“ ist meine Aktion. Aufwand/Nutzen sind Fragwürdig – ist halt Hobby.

    „ich weis von alten avi codecs, die D (dropped frames) und K (key frames) haben.“

    ->hatte ich schon getestet, bringt nichts.

    VirtualDub 1.10.4 nutze ich – von 2012. Gibt nichts Neueres. Ich vermute, mit dem Anstieg von Speicherplatz, hat das Interesse an speziellen Videothemen nachgelassen. Heute ist es ja fast egal wie groß die Dateien sind.

    Ich bin jetzt ans Ziel gekommen. Statt dem Screenrecorder „oCam“ hab ich „Free Screen Recorder“ genommen. Dort kann man AVI:

    MPEG4

    H264

    XVID

    auswählen. Direkt liest der VirtualDub das nicht. Aber über den Avisynth Import mach er es.

    Aus 845 Frames sind so 118 geworden. (14%)

    Noch besser wäre es aber, einen ScreenRecorder zu haben, welcher gleich nur Änderungen speichert.

    Als nächstes wird der Film in Einzelbilder zerlegt. Dann mit Linux Script nach dem gelben Feld gesucht und je nach Position des gelben Feldes die Bilddatei in ein passendes Verzeichnis verschoben. Dann per Batch die Bilder so bescheiden, das nur die veränderbare Zahl über bleibt. Dann per Texterkennung die Bildzahl zu Text machen und in eine Textdatei übertragen. J

  • korrektur:

    neben 's' ist ein 'a', es sollte "auch" heißen

    habs oben korrigiert...

    war ein tippfehler auf den dummen touch dingern... ;P

    vdub:

    es gibt eine aktuellere vetsion von virtualdub

    und zwar "VirtualDub2"... muhahaha!

    das ist so unerwartet, dass selbst google es nicht findet.

    die letzte version ist 44282 2020-03-19.

    und kann dank ffmpeg auch mit nicht avi-formaten umgehen.

    u.u. verwende ich auch avidemux als vdub ersatz.

    recorder:

    da wir in zeiten von streaming leben,

    hat sich nach fraps OBS als ein sehr brauchbares tool etabliert.

    der erzeugt H264 mit x264 und sogar hardwarebeschneunigt (nvidia codec)

    mein gedanke ist auch, gibt es nicht recorder,

    die den input in einem PNG/einzelbilder stream zerlegen*.

    codecs:

    MPEG4 (in avi) und XVID sollte selbst ein altes virtualdub können.

    ggf. fehlen dir die VfW codecs. kannst ja mal das alte ffdshow codec versuchen,

    wenn du nicht die orginal codecs hast/findest.

    für deine anwendung sollte XVID auf jeden fall funktionieren.

    "Noch besser wäre es aber, einen ScreenRecorder zu haben, welcher gleich nur Änderungen speichert."

    schwierig, wüsste garad kein tool (input) der das macht.

    aber von alten featurephones kenn ich VFR (variable frame rate).

    d.h. es wäre wieder an einem geeigneten codec, der das unterstützt.

    *mein gedanke wäre:

    wenn der input 100% statisch ist,

    dann könnte man den >verlustlos< codierten videostream in einzelbilder zerlegen.

    da die meisten bilder jetzt identisch sein müssten, sollte sich via prüfsummen-berechnung

    alle mehrfach vorkommenden bilder, bis auf eins, via script gelöscht werden können.

    mit OBS, der ja auch zusätlich nur bereiche und fenster aufzeichnen kann,

    gibt es ein ffmpeg plugin von 2019. vielleicht kann man damit was zaubern.

    ansonsten kann der x264 codec auch in einem losslesmodus eingestellt werden.

    ~Jäger und Sammler~ [0001 0110]
    meine Scripte: MPack/DriveSnapshot:Cln&Bak/SuRun:ShellExt.

    6 Mal editiert, zuletzt von HQ-LQ (2. Juli 2023 um 12:04) aus folgendem Grund: keine chance irgendwas ma fehlerfrei zu schreiben... XD

  • Ich glaube dein Vorhaben wäre mir Vapoursynth relativ einfach umzusetzen, falls du ein wenig Python kannst.

    Dieses script hier hashed alle Frames und checkt dann durch zufälliges rumspringen ob das Video korrekt dekodiert wird.

    https://github.com/theChaosCoder/…64/seek-test.py

    Du brauchst eig nur den hash loop + dort müsste man dann hash n mit n+1 vergleichen. Falls unterschiedlich, dann schreibe frame in TXT oder exportiere frame über imwri plugin als png.

    EDIT

    Schau dir dieses script an (ist quasi das gleiche nur kürzer)

    https://gist.github.com/dubhater/3a2c8…cae25cd47ff78d2

    EDIT2

    Das wird aber nur funktionieren wenn die Desktopaufnahme verlustfrei ist. Ändert sich nur ein Pixel dann hat man schon einen anderen hash

    VapourSynth Paketmanager VSRepo + GUI

    Avisynth Paketmanager AVSRepo + GUI

    3 Mal editiert, zuletzt von FatFaster (6. Juli 2023 um 09:33)

Jetzt mitmachen!

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