ffdshow mit gestreiften Rechtecken beim Encoden

  • Hallo Community,

    ich habe bei einem nach DivX umgewandelten MPEG2-Material und der Wiedergabe mit dem ffdshow-Filter einen unschönen Effekt entdeckt, den ich bei der Wiedergabe mit dem Original-DivX-Codec nicht feststellen konnte. Auch beim Öffnen in VDub wird bei den entsprechenden Stellen kein fehlerhaftes Bild angezeigt.

    Das Ganze spielt sich zwischen 2 Keyframes ab und wird je näher die Zeitmarke zum "abschließenden" Keyframe geht, immer schlimmer. Es bilden sich im Bild Rechtecke, die hell gestreift sind.

    Anbei ein auf 200% vergrößerter Screenshot:

    [Blockierte Grafik: http://img246.imageshack.us/img246/5107/test2wr.jpg]

    und die mit einem Grafikprogramm nochmals verstärkten Kanten:

    [Blockierte Grafik: http://img483.imageshack.us/img483/4451/te…iededges6gj.jpg]

    An 5-6 anderen Stellen des umgewandelten Materials tritt dieser Effekt ebenfalls auf.

    Anbei zur Analyse die "Szene", deren Schlussfram Ihr oben seht zum Download:

    http://rapidshare.de/files/7299964/test.avi.html

    und die u.U. benötigte vcf-Datei aus VDub, um die Kompressoreinstellungen transparent zu machen:

    Leider habe ich die exakten Kompressoreinstellungen von damals nicht mehr, ich mutmaße aber, dass ich es mit DivX 5.2.0 Pro und keinen Sondereinstellungen umgewandelt habe.

    -----------------------------------------------------------------------
    VirtualDub.RemoveInputStreams();
    VirtualDub.stream[0].SetSource(0x73647561,0);
    VirtualDub.stream[0].SetMode(0);
    VirtualDub.stream[0].SetInterleave(1,500,1,0,0);
    VirtualDub.stream[0].SetClipMode(1,1);
    VirtualDub.stream[0].SetConversion(0,0,0,0,0);
    VirtualDub.stream[0].SetVolume();
    VirtualDub.stream[0].SetCompression();
    VirtualDub.stream[0].EnableFilterGraph(0);
    VirtualDub.stream[0].filters.Clear();
    VirtualDub.video.AddComment(0x00000002,"ISFT","MPGConvert\xc2\xb2 2.01");
    VirtualDub.video.SetDepth(24,24);
    VirtualDub.video.SetMode(3);
    VirtualDub.video.SetFrameRate(0,1);
    VirtualDub.video.SetIVTC(0,0,-1,0);
    VirtualDub.video.SetRange(0,0);
    VirtualDub.video.SetCompression(0x78766964,0,10000,0);
    VirtualDub.video.SetCompData(512,"zAEAAAAAAAACAAAA4OYLAAAAgEABAAAAAAAAAAAAAAAAAAAAAAAAACwBAAAyAAAAIBFqAAAAMAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAmpmZmZmZyT+amZmZmZnJPwAAAAAAAAAAAAAAAIACAADgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAZAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAgAAAAEAAAABAAAAAAAAAGM6XGRpdngubG9nAGM6XHRlc3QuZGl2eABjOlxtdmluZm8uYmluAGM6XG5ld3JjLnR4dAA=");
    VirtualDub.video.filters.Clear();
    VirtualDub.subset.Delete();
    -----------------------------------------------------------------------

    Der Effekt konnte auf anderen Rechnern mit ffdshow nachvollzogen werden. Im ffdshow sind für diese Tests keine besonderen Optionen/Nachbearbeitungen aktiviert gewesen. Der Effekt trat sowohl mit einer Originalversion von ffdshow (12.10.2004) als auch mit den "CVS builds by celtic_druid" (03.11.2005) auf.

    Ich hoffe, dass ich alle relevanten Daten für eine Fehleranalyse geliefert habe und Ihr mir einen Tipp geben könnt.

    Vielen Dank im Vorab für Eure Bemühungen.


  • Das sieht danach aus, als ob einzelne Frequenzkomponenten auf zu große Amplituden gesetzt werden.

    Es könnte ein Fehler in DivX sein, ein Fehler in ffdshow. Der Fehler könnte bei der Quantisierung/Dequantisierung oder Run Length Encodierung oder Decodierung passieren.

    Da (zumindest mir) aber ein solcher Fehler nicht bekannt ist, versuch doch nochmal neu zu encodieren. tritt der Effekt auch bei anderen Encodes mit diesem Codec auf? Nur bei diesem Clip?

    Hast du eine spezielle Quantisierungsmatrix verwendet?

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Danke für Deine Mühe.

    Ich habe keine spezielle Quantisierungsmatrix verwendet. Der Clip wurde mit ca. 1800kbps im 2-Pass umgewandelt.

    Deine Vermutung, dass es nach einem erneuten Encoding mit dem verwendeten Kompressor DivX 5.2.0 "weg sein" könnte, muss/kann ich bestätigen.

    Ich habe den oben verlinkten Schnipsel nochmals im SinglePass mit VDub, DivX 5.2.0 und 2000kbps encodet und der letzte Frame sieht nun (bei Wiedergabe mit ffdshow) wie folgt aus:


    [Blockierte Grafik: http://img364.imageshack.us/img364/1282/test13lx.jpg]

    Somit wissen wir, wie wir das Problem möglicherweise im Nachgang beseitigen können, aber noch nicht, warum es auftritt ...

    Kannst DU den Effekt mit dem verlinkten avi-Schnipsel und ffdshow ebenfalls nachvollziehen?


  • Ich bin nur sehr schmalbandig mit dem Internet verbunden, deshalb habe ich den Schnipsel nicht ausprobiert.

    Hast du das DivX nochmals neu kodiert oder die Originalquelle?

    Ich persönlich würde ja auf einen Bug in DivX spekulieren. Es könnte mit irgendwelchen Rundungsfehlern zusammenhängen, die sich bis zum Keyframe aufschaukeln.

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • Zitat von Kopernikus

    Es könnte mit irgendwelchen Rundungsfehlern zusammenhängen, die sich bis zum Keyframe aufschaukeln.


    Exakt diese Vermutung hatte ich bei einem kurzen vorherigen e-Mail-Austausch auch schon. Die Frage ist nur, welche Option im DivX-Encoder oder DivX/ffdshow-Decoder diese provoziert...

    Ich bin der Meinung, dass starkes Rauschen eine wesentliche Ursache sein kann. Deshalb hatte ich empfohlen, das mit "AddGrain" nachzustellen.

    (Danke für's Veröffentlichen, mullar.)

  • Zitat

    Ich bin nur sehr schmalbandig mit dem Internet verbunden


    Oh sorry - dann hätte ich die Beispiel-Bilder auch noch stärker komprimieren können.

    Die AVI-Datei ist 1,6MB groß.

    Ich habe den "schadhaften" Schnipsel einfach nochmal im SinglePass durch VDub geschickt (also NICHT das Originalmaterial, sondern das oben angeführte gestörte AVI-Stück).

    Zitat

    Es könnte mit irgendwelchen Rundungsfehlern zusammenhängen, die sich bis zum Keyframe aufschaukeln.


    Die Frage für mich ist, warum der Originalcodec (also DivX) das Problem bei der Wiedergabe NICHT hat - dort sehen die Stellen wunderbar aus ... ich möchte allerdings aufgrund der besseren Performance und den manigfaltigeren Einstellmöglichkeiten auch nicht auf ffdshow bei der Wiedergabe verzichten ...


  • Wenn das ein bekannter bzw. oft auftretender Bug wäre, dann hätte man davon sicher schon einmal etwas mitgekriegt.

    Die MPEG4 ASP Decodierung ist nicht so exakt festgelegt wie z.B. AVC, so dass es in manchen Szenarien Probleme mit Fehlerdrift gibt. Walken hat dequantisierungsroutinen mit einer bestimmten Rundungscharakteristik geschrieben, die eigentlich allgemein akzeptiert und verwendet wird. Wenn es das wäre, dann hätten das sicher schon andere festgestellt.

    Eine weitere Idee: Hast du evtl. aus Versehen den DCT-Filter in ffdshow aktiviert?

    Kann jemand mit Breitbandinternet mal den Schnipsel testen, damit wir wissen, ob Fehler in Encoder oder Decoder.

    mullar: kannst du nochmal das Original komprimieren, und die verwendeten Einstellungen posten?

    Es gibt eine Theorie, die besagt, dass das Universum sofort verschwinden und etwas noch Unerklärlicheres und Bizarres an seine Stelle treten wird, sobald jemand herausfindet, wofür es gut ist und warum es existiert.

    Es gibt eine andere Theorie, die besagt, dass das bereits geschehen ist.

  • scharfis_brain: Problem erkannt - kommt nicht wieder vor - versprochen!

    Kopernikus: Bei einem erneuten Encode der Originaldaten konnte ich den Fehler mit den oben bereits geposteten Codec-Einstellungen nicht noch einmal reproduzieren. Schade, dass es dennoch in mehreren (bereits gebrannten) Clips bereits auftritt, die ich eigentlich nicht alle nochmals umwandeln möchte.

    Ich hatte zur Kontrolle des fehlerhaften Abschnitts nach der ersten Sichtung im ffdshow ALLE Zusatzfunktionen deaktiviert - das Ergebnis seht Ihr oben: unverändert mit Karos.

    Apropos Breibandanschluss: Da ich daheim auch mit 56k-Anschluss arbeite, weiß ich, dass man die 1,6MB in ca. 4-5 Minuten heruntergeladen haben kann - muss man nicht, aber kann man ;)


Jetzt mitmachen!

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