Zwei Videos Bild für Bild vergleichen

  • Das Programm errechnet auch bekannte Werte wie MSE (mean squared error) und PSNR (peak signal-to-noise ratio) im YUV-Farbraum (und zwar getrennt für Y-, U- und V-Komponente). Mir ging es aber zunächst nur um eine möglichst „objektive“ Berechung – daher auch die Einführung des euklidischen Abstands.

    Gruß
    Josef

  • fritz und Selur: Vielen Dank für eure Infos. Die Links sind sehr interessant. Leider komme ich zur Zeit nicht dazu mich näher damit zu beschäftigen.

    @All:
    Mein Ziel ist es, wie bereits geschrieben, meine eigene Software auf fehlerfreiheit zu
    testen. Deshalb brauche ich eigentlich nur eine Software die jede beliebige Video-Datei
    einlesen kann und die Frames meiner eigenen Testfunktion zur Verfügung stellt.
    VirtualDub+AviSynth ist da schon sehr gut geeignet, da sich alles so schön automatisieren lässt.

    Ich werde vorerst auf die DirectShowSource Funktion ausweichen. AviSource scheint ja sowieso nur eine Untermenge von den einlesen zu können, was DirectShowSource kann. Bitte sagt mir bescheit, inwieweit diese Vermutung stimmt.

    Wenn jemand Kontakt zum Entwicklerteam von AviSynth hat, sollte er dort das Problem mit AviSource melden. Würde mich freuen deren Meinung zu erfahren.

    Ich habe es jetzt geschafft einen Filter mit zwei Eingängen zu programmieren - naja, eigentlich nur zusammenkopiert. War einfach, mann muss nur der Versuchung widerstehen alles verstehen zu wollen. Insoweit habe ich mein Ziel erreicht.

  • Zitat von BDAH2005

    Wenn jemand Kontakt zum Entwicklerteam von AviSynth hat, sollte er dort das Problem mit AviSource melden. Würde mich freuen deren Meinung zu erfahren.

    Also für mich ist das Problem noch nicht klar. Mit was ist der Clip eigentlich kodiert?
    bei mir wird das auch nicht ordentlich dekodiert, viele schwarze Flecken, wenn ich mit VDub öffne.

    "Diejenigen, die grundlegende Freiheiten aufgeben würden, um geringe vorübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit."
    Benjamin Franklin (1706-1790)

    Meine Erfahrungen in der Open Source-Welt: blog.bugie.de

  • Zitat von BDAH2005

    Ich werde vorerst auf die DirectShowSource Funktion ausweichen. AviSource scheint ja sowieso nur eine Untermenge von den einlesen zu können, was DirectShowSource kann. Bitte sagt mir bescheit, inwieweit diese Vermutung stimmt.


    Schau Dir doch mal die AviSynth-Doku an: http://www.avisynth.org/DirectShowSource+Deutsch

    Zitat von selur

    vielleicht für euch auch interessant:
    Video Quality Studio von http://www.everwicked.com/vqstudio/


    Cool wieder was zum spielen für mich :) danke für den Link, der war mir noch unbekannt!

    Grüße

    codefish

    ...a seeker of knowledge...swimming in the bitstream...

  • Ich hab's auch mal ausprobiert. Und wollt ihr wissen, warum das Fehler ergibt? Dann probiert mal

    Code
    clip1 = AviSource("test1.avi")clip2 = AviSource("test2.avi")diff = Subtract(clip1,clip2)StackHorizontal(clip1, StackHorizontal(diff, clip2))

    Ich gehe davon aus, dass der Cinepak-Codec "nicht reentrant" ist -- also nicht zwei Videos gleichzeitig parallel decodieren kann.

    Zum Test wollte ich gleich mal versuchen, ffdshow als VfW-Codec zum Decodieren von Cinepak-AVIs einzustellen. Ging aber nicht, der Cinepak-VfW-Codec scheint hier immer bevorzugt zu werden.

    Nächster Versuch:

    Code
    clip1 = DirectShowSource("test1.avi")
    clip2 = DirectShowSource("test2.avi")
    diff = Subtract(clip1,clip2)
    StackHorizontal(clip1, StackHorizontal(diff, clip2))

    Hier funktioniert es je nach verwendetem Decoder auch unterschiedlich: Ist ffdshow an der Reihe, klappt es wie erwartet, keine Unterschiede. Mit Cinepak als Decoder gibt es eine Verschiebung von einem Bild. Das bestätigt meinen Verdacht: Wenn Cinepak ein Bild aus dem zweiten AVI holen soll, wird statt dessen das nächste Bild aus dem ersten AVI gelesen.

    Beim Schließen des Skriptes stürzt VirtualDubMod übrigens ab...

  • He LigH, du hast mich echt beeindruckt. Man merkt dass du ein Video Profi bist. Deine Beweisführung - Einfach Suuuuuuuper!

    Ich habe zwischenzeitlich den Rat von codefish befolgt und mir die Doku zu DirectShowSource und AviSource durchgelesen.
    Nachdem was da steht müsste AviSource die VfW-Codec's bevorzugen. Wenn ffdshow ein VfW-Codec ist, dann hätte bereits das Installieren von ffdshow den Fehler beseitigen müssen.
    LigH schreibt aber dass sich nur mit DirectShowSource der fehlerhafte Cinepak Decoder umgehen lässt. Das verstehe ich nicht.

    Besonders würde mich nun interessieren wie die Suche nach den richtigen Codec vonstatten geht und ob es Debug-Möglichkeiten gibt um rauszubekommen welche Verarbeitungskette dann tatsächlich benutzt wird.
    Wer bestimmt in welcher Reihenfolge die Decoder ausgesucht werden? Gibt es generell eine Möglichkeit, wenn mehrere Decoder für einen Codec installiert sind, die Benutzung eines bestimmten zu erzwingen?
    Fragen über Fragen, wahrscheinlich sollte ich die lieber in ein Newbie-Thread stellen?

  • Zitat von BDAH2005

    Nachdem was da steht müsste AviSource die VfW-Codec's bevorzugen. Wenn ffdshow ein VfW-Codec ist, dann hätte bereits das Installieren von ffdshow den Fehler beseitigen müssen.
    LigH schreibt aber dass sich nur mit DirectShowSource der fehlerhafte Cinepak Decoder umgehen lässt. Das verstehe ich nicht.


    Der Grund ist: ffdshow ist beides - zuerst ein DirectShow-Filter, nebenbei aber auch ein VfW-Codec.

    DirectShow-Filter lassen sich in einer Reihenfolge einstellen, welcher bevorzugt wird und welcher eher vermieden werden soll, wenn mehrere für das gleiche Format zuständig sind. Deshalb kann man auch leicht einstellen: "Benutze den ffdshow-DS-Filter zum Anzeigen von Cinepak-Videos." - oder zum Decodieren per DirectShowSource(). Und ihn auch genauso leicht wieder deaktivieren.

    Bei VfW-Codecs ist diese Reihenfolge aber leider nicht so einfach festzulegen. Es kann also gut sein, dass mehrere Codecs bei AviSource für das Decodieren des gleichen Videoformates in Frage kämen, aber immer nur der selbe tatsächlich zum Zuge kommt. Nämlich der, der in der Registry oder SYSTEM.INI dafür registriert wurde.

    Zitat von BDAH2005

    Besonders würde mich nun interessieren wie die Suche nach den richtigen Codec vonstatten geht und ob es Debug-Möglichkeiten gibt um rauszubekommen welche Verarbeitungskette dann tatsächlich benutzt wird.


    Die kann GSpot relativ detailliert im unteren Bereich seines Fensters für DirectShow-Filterketten melden (die kleinen Buttons "1" und "2"). Bei VfW-Codecs ist der Fall wesentlich kürzer (da reicht in VirtualDub "File - File information", oder auch der obere rechte Bereich von GSpot).

Jetzt mitmachen!

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