Vergleich zweier Videos

  • Vermutlich bereits diskutiert, aber ich scheine nicht die richtigen Suchwörter zu finden.

    Um die Qualität zwischen zwei encodierten Filme (z.B: mkv - x264) zu vergleichen, muß ich immer abwechselnd beide Filme möglichst schnell nacheinander im Player öffnen und dieselbe Stelle ansteuern.

    Gibt es eine Möglichkeit, zwei Filme gleichzeitig laufen zu lassen und quasi im selben Videofenster on-the-fly z.B, per Tastendruck zwischen beiden laufenden Videos umzuschalten? Das wäre so genial zum Qualitätsvergleich! :)

  • Beide Filme in einem Fenster nebeneinander oder untereinander mit Avisynth

    Beide Filme müssen im selben Farbraum arbeiten (mit ConverttoXXX anpassen) und dieselbe Höhe haben

    z.b

    Quote


    vid_a=avcsource("X:\h264\video1.dga")
    vid_b=mpeg2source("X:\mpeg2\video2.d2v")
    vergleich=stackhorizontal(vid_a,vid_b) #nebeneinander
    #vergleich=stackvertical(vid_a,vid_b) #untereinander
    return vergleich

  • ok danke. dann muß ich mich erstmal reinfummeln, wie man sowas mit AviSynth hinbekommt.
    Nebeneinander ist schon ganz gut, aber ich glaube, noch deutlicher würden unterschiede werden, wenn man tatsächlich im selben Viewport schnell und mögl. nahtlos zwischen beiden Videos hin und herschalten könnte. Gibts dafür keine Möglichkeit?

  • Oder sich das Differenzbild betrachten: http://avisynth.org/mediawiki/Subtract

    PHP
    clip1 = AviSource("Film1.avi")
    clip2 = AviSource("Film2.avi")
    Subtract(clip1, clip2) # identische Stellen sind mittelgrau
    Levels(96, 1, 160, 0, 255) # Kontrast erhöhen

    Bitte beachten: Diese Darstellung entspricht nicht dem Empfinden, wie störend Unterschiede wahrgenomen werden!

  • Danke für Tipps!

    LigH: Genau, ich will aber eher meinen subjektiven Vergleich fördern. Daher hilft mit ein Differenzbild oder andere "objektive" Vergleiche nicht so richtig. Ich will eigentlich nur nach dem Encoding die beiden Videos gut vergleichen können. Sonst weiß ich nie, ob das Encoding nun wirklcih unschärfer, pixeliger, blockiger ist oder ob es täuscht, weil ich immer leicht unterschiedliche Szenen sehe, bzw. hin und her schauen muß. Daher meine Idee mit dem schnellen switchen zwischen Original und Encoding.

    Eigentlich müßte dafür ein player (bzw. AviSynth) ja nur beide Vids gleichzeitig spielen können und ein umschalten der Display-Ausgabe erlauben. Könnte AviSynth das irgendwie erlauben? Dann würde ich mich da jetzt mal rein stürzen. Ich weiß ja nicht, wieviel ich darüber lernen muß, um sowas hinzubekommen :)

  • AviSynth kann das nicht interaktiv ermöglichen, weil es keinerlei Reaktionen auf Maus- oder Tastatureingaben implementiert.

    Allerdings kannst du durchaus (z.B. jede Sekunde) abwechselnd Bilder aus je einem von beiden Videos zeigen. Zur Unterscheidung kannst du denen auch per "Subtitle()" ihren Namen einblenden.

    PHP
    red = BlankClip(1000,320,240,"YV12",25,color=$C00000).Info()
    blue = BlankClip(1000,320,240,"YV12",25,color=$0000C0).Info()
    ConditionalFilter(red,blue,red,"current_frame / 25 % 2","equals","0")

    http://avisynth.org/mediawiki/ConditionalFilter
    http://avisynth.org/mediawiki/Subtitle

  • Ich öffne VirtualDub mit Film1 und eine weitere VD-Instanz mit Film2 und lege zur Vergleichbarkeit die jeweiligen Vorschaubilder mit identischen Frames nebeneinander.

  • ich hab mich jetzt in die AviSynth-Lösung mit dem sekunden-Wechsel beider Videos kurz reingefummelt und zum Test zwei Fernseh-Aufnahmen "verglichen":

    DirectShowSource("24_cut_001.mkv")
    redTrim = Crop(0,0,600,300)
    DirectShowSource("24_cut_001.mkv")
    blueTrim = Crop(0,0,600,300)
    ConditionalFilter(redTrim,blueTrim,redTrim,"current_frame / 25 % 2","equals","0")


    Wenn ich das im MediaPlayerClassic abspiele, entsteht allerdings noch bei jedem Wechsel immer ein kurzer Sprung, d.h. er bleibt kurz (~1/3 Sekunde) hängen und gelegentlich springt er im video kurz zurück. Vermutlich, weil AviSynth beim Wechsel kurz stark rechnen muß? Gibts einen Weg, das zu verbessern, so daß es einen flüssiges PlayBack gibt?

  • AviSynth ist nicht dafür gedacht, in Echtzeit abgespielt zu werden. Es bevorzugt Qualität, und wenn die verwendeten Filter mehr Zeit brauchen, dann brauchen sie eben mehr Zeit.

    Dein Problem wird insbesondere die Decodierung des MKV mit DirectShowSource sein. Du weißt doch schon längst, dass DirectShowSource immer die schlechteste Wahl ist, solange es Alternativen gibt. Für den Fall, dass AVC-Video in den MKVs steckt, wäre das DGAVCDec. DirectShowSource müsste eventuell, je nach Aufrufmethode, ein Video öffnen, vom letzten Schlüsselbild vorher bis zum Wunschbild decodieren, dann das andere Video öffnen, vom letzten Schlüsselbild vorher zum Wunschbild decodieren, wieder das erste Video öffnen...

    Und auch wenn es keine Alternative gibt, dann gibt es zumindest Parameter für DirectShowSource, die dabei helfen, sehr komplexe Videoformate sinnvoll decodieren zu lassen. Wenn man beispielsweise darauf verzichten kann, ständig im Video hin und her zu springen, dann kann man Videos auch so öffnen lassen, dass sie nur einmalig von Anfang bis Ende gelesen werden (vergleiche mal die Parameter "seek" und "seekzero").

    Wahrscheinlich wird dir zu einem Echtzeit-Vergleich doch nichts anderes übrig bleiben, als das Video herauszurendern, z.B. als HuffYUV-AVI. Das wird bei einem kompletten Kinofilm sicher einige 'zig Gigabytes belegen.

  • Danke LigH für die Erläuterung!
    ich als blutiger AviSynth-Beginner habe diesen Überblick tatsächlich noch nicht. Daß DirectShowSource nciht die erste Wahl ist, habe ich allerdings auch schon irgendwo gelesen, mangels nicht gefundener Alternative aber erstmal verwendet.

    Dei Variante mit dem rausrendern habe ich auch schon ins Auge gefaßt. Da mir ja meist nur einige Sekunden zum Vergleich genügen, müßten dafür nicht etliche GBs aus meiner Platte bevölkert werden. D.h. ich kümmer mich jetzt erstmal darum, wie ich das AviSynth-Ergebnis auf die Platte gespeichert bekomme.

  • Ok, also ich muß mich schon sehr freuen, es klappt mit dem Speichern in ein Avi und ich kann so recht gut den Vergleich machen.
    Leider gibts da auch auch kleine Sprünge, wahrscheinlich wg. DirectShowSource, wie du schon sagtest, LigH. Nach fast 1h Suche hier im Forum habe ich aber noch keinen Weg gefunden, wie ich mit AviSynth das mkv so in eine dga zerlegen könnte, daß es dann mit DGAVCDec lesbar ist.
    Oder geht das nur so, daß ich vorher beide mkvs manuell demultiplexe und dann mit avi-synth nutzen kann? Diese Extra-Schritte würde ich natürlich gern noch vermeiden.

  • Wenn Du Avi erstellt hast, kannst Du in deinem Script statt directshowsource("film.avi") avisource("film.avi") verwenden.

    mawi2006

    Intel Q9550@2500 MHz / Motherboard Name Asus P5N-VM WS / Grafikkarte NVIDIA Quattro FX470 / 4x2 GB 800 MHz / DVD-RAM DVR-216DBK / LiteOn IHas 322 / HDD: 500 GB HD502HJ / SSD: Solidata K5 64GB

  • Danke für die Antwort, aber die Situation ist ja anders:
    Ich habe 2 mkv's (mit h264), diese beiden möchte ich über das avi-Script mergen. Dabei möchte ich verhindern, daß ich erst manuell die mkvs zerlegen muß, damit avisynth das dga einlesen kann.

  • Ah, hatte ich falsch verstanden, dachte Du hättest aus den beiden Videos bereits jeweils einen Schnipsel gerendert. Die könntest Du dann vergleichen.

    Ansonsten, wie sähe es denn mit der schon erwähnten Variante aus, die Videos nebeneinander abzuspielen.

    Der Befehl wäre entweder stackvertical(a,b) oder stackhorizontal(a,b). Kann man auch kombinieren um 4 Videos oder mehr zu vergleichen, z.B. stackvertical(stackhorizontal(a,b),stackhorizontal(c,d))
    a=directshowsource("video1")#.crop(120,0,-120,-0)#schneidet 120 Pixel links und recht weg
    b=directshowsource("video2")#.crop(120,0,-120,-0)#schneidet 120 Pixel links und recht weg
    c=directshowsource("video3")#.crop(120,0,-120,-0)#schneidet 120 Pixel links und recht weg
    d=directshowsource("video4")#.crop(120,0,-120,-0)#schneidet 120 Pixel links und recht weg

    Beachten muss man hierbei, das die Videos in gleicher Auflösung(Size) und gleichem Farbraum(Format, z.B.: yv12,yuy2 oder RGB) vorliegen. Man kann auch die Videos an den Rändern croppen, wie im oberen Beispiel beschrieben (einfach das"#" vor ".crop" löschen), damit es besser auf den Bildschirm passt.

    mawi2006

    Intel Q9550@2500 MHz / Motherboard Name Asus P5N-VM WS / Grafikkarte NVIDIA Quattro FX470 / 4x2 GB 800 MHz / DVD-RAM DVR-216DBK / LiteOn IHas 322 / HDD: 500 GB HD502HJ / SSD: Solidata K5 64GB

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!