H.264 - Dinge, die mir (noch) unklar sind...

  • Mir ist jetzt nach einigen Encodings einiges Aufgefallen:

    Bei schwarzen Flächen, bzw. einfarbigen vollflächigen Bereichen, neigt es irgendwie zu Blöcken.

    Wie kann ich dem entgegen wirken? Hat es was mit den bei Brother John erwähnten Effekt von mbtree zu tun oder hilft daher vorsichtiges Optimieren mit deblock?
    Lt. DGIndex passt eigentlich auch der Farbraum, ohne Colormatrix nutzen zu müssen.

    Das sind jetzt alles Sachen die mir auffallen, wo ich bei MPEG2 keine Probleme hatte.

    Bitspy

    Der Weg zur Dunklen Seite... Schneller er ist, verführerischer, leichter.

  • Bitspyer, bist du sicher, dass du ein aktuelles x264 Build benutzt und dass du keine allzu ungewöhnlichen Settings verwendest? Gegen Klötzchen und Banding in "flachen" Bildbereichen sollte eigentlich die Adaptive Quantisierung (VAQ) gute Dienste leisten! Das einzige "Problem" das mir bezüglich MB-Tree Ratecontrol bekannt ist, sind "Fades" (Ein-/Ausblenden). Aber das sollte dank Weighted P-Frames ebenfalls der Vergangenheit angehören. Ansonsten kann man natürlich den Loop-Filter leicht erhöhen oder zumindest nicht herabsetzen, um Klötzchen weg zu filtern. Ich bevorzuge allerdings -1:-1, weil es einfach mehr "Schärfe" erhält. Auch solltest du mal überprüfen, ob dein Monitor korrekt kalibriert ist. Vllt sind die "Klötzchen" in den dunklen Flächen bei korrekter Kalibrierung gar nicht sichtbar?

  • LigH: Brother John erwähnte auf seiner Website, das man stattdessen pyramid einsetzen sollte...

    @Mulder:
    Das mit den Flächen ist mir jetzt bei einem letzen Encoding aufgefallen, zT. auch an meinem LCD-TV.

    Mein Build ist x264-r1369. Wobei ich da mal mit dem Build direkt von x264.nl arbeite, aber auch schon mit den optimierten Builds von http://komisar.gin.by/ gearbeitet habe, da die nochmal etwas mehr output haben.
    Des Weiteren habe ich Deinen Tipp aus dem anderen Thread übernommen und meine Einstellung mit den Presets und Tunings abgeglichen und diese dann weggelassen.
    --deblock -1:-1 hat mir halt bei einem Encoding mal richtig fiese Blöcke verschafft. Leider habe ich das Orginal nicht mehr, daher kann ich nicht sagen, ob die Quelle nicht schon in dem Bereich verblockt war.

    Ein Gedanke war auch, das es vielleicht zu niedrige Bitrate ist, aber eigentlich arbeite ich fast durchgängig mit --crf18. (Im Mittel kommen dann Bitraten von 1800-3200 kbit/s raus, je nach Quelle).

    Meine Stellschrauben sind bis jetzt, was ich so nach mehrmaligen Studium von Encodingwissen glaube gelernt zu haben: deblock, psy-rd und trellis.

    Vielleicht ist meine Fehlerquelle ja auch wo anders.
    Ist es ratsamer die Quelle per Mpeg2Source("film.d2v") einzubinden, wie es zB. Staxrip macht, oder beeinflusse ich mit (Mpeg2Source("film.d2v",idct=4) den Decoder zu sehr?
    Oder zB. ColorMatrix. MeGUI hat das fast immer mit drin. StaxRip nicht...
    Wobei ich da jetzt durch einlesen von ColorMatrix wegkomme, da die Farbräume eigentlich stimmen.
    Dh. meine Avisynth-Scripte sehen eigentlich nur wie folgt aus:

    Code
    Mpeg2Source("film.avs")
    crop()


    Eventuell deinterlace, falls Quelle interalced ist. Aber zu 90% ist das Zeug meistens falsch geflaggt. Zumindestens das, was ich dann habe.

    So, vielleicht fällt mir nachher noch mehr ein....
    Danke für Antworten!

    Gruss,
    Bitspyer

    Der Weg zur Dunklen Seite... Schneller er ist, verführerischer, leichter.

  • Na, was heißt hier "falsch geflaggt" ... es sind tatsächlich die meisten MPEG2-Videos im Interlaced-Modus encodiert worden, auch wenn sie nicht "combed" sind. Das tun die meisten DVD-Studios oder DVB-Sender aber nur zur Sicherheit - damit sie nicht aus Versehen mal Combed-Material progressiv encodieren (das sieht dann übel aus).
    __

    Ich würde im Allgemeinen schon empfehlen, den Deblocker von MPEG2Source zu verwenden, vor allem wenn man DVB-Material hat. Es ist durchaus denkbar, dass du MPEG2-Blöcke schon im Original hast, und dich jetzt darüber beschwerst, dass dein MPEG4-AVC-Encoder die so originalgetreu wiederherstellt ... ;)

  • Ich würde im Allgemeinen schon empfehlen, den Deblocker von MPEG2Source zu verwenden, vor allem wenn man DVB-Material hat. Es ist durchaus denkbar, dass du MPEG2-Blöcke schon im Original hast, und dich jetzt darüber beschwerst, dass dein MPEG4-AVC-Encoder die so originalgetreu wiederherstellt ... ;)

    Ja, das sollte man in der Tat sehr genau überprüfen. Der H.264 Loop-Filter entfernt ja keine Blöcke, die im Quellmaterial enthalten waren, sondern er unterdrückt nur solche Blöcke, die durch die H.264 Kompression hinzugefügt werden bzw. würden. Außerdem ist CRF=18 schon ziemlich hoch gegriffen. Niedrigere CRF-Werte braucht man eigentlich fast nie für "transparente" Qualität. Würde mich schon sehr wundern, wenn du da noch auffällige Blöcke rein bekommst. Am besten wäre es, wenn du mal einen Schnippsel unbearbeitetes(!) Quellmaterial hochlädst...

  • LigH:
    Ich vertraue jetzt mal ganz auf das alte Sprichwort: "Es gibt keine dumme Fragen." und frage mich, welche Deblock Option ein gutes Mittelmaß ist (cpu=1, cpu=2)?

    Zitat

    es sind tatsächlich die meisten MPEG2-Videos im Interlaced-Modus encodiert worden, auch wenn sie nicht "combed" sind.

    Schliesse ich daraus, das ein generelles TDeint() oder Yadif() dann nicht verkehrt ist? Wenn mich bei DGIndex das interlaced Flag anlacht, suche ich mir schnelle Scenen und Bildwechsel und schaue, ob es Kämme gibt. Falls nicht, gehe ich von Progressive aus.

    Der Weg zur Dunklen Seite... Schneller er ist, verführerischer, leichter.

  • Schliesse ich daraus, das ein generelles TDeint() oder Yadif() dann nicht verkehrt ist? Wenn mich bei DGIndex das interlaced Flag anlacht, suche ich mir schnelle Scenen und Bildwechsel und schaue, ob es Kämme gibt. Falls nicht, gehe ich von Progressive aus.

    Nein! Wenn das Material nicht "interlaced" ist, dann braucht man es auch nicht durch einen Deinterlacer zu jagen. Damit zerstörst du nur Details ohne einen Gewinn zu haben. Ob man sinnvollerweise einen Deinterlacer einsetzt oder nicht, hängt vom Inhalt ab, nicht davon wie er kodiert wurde! Progressives Material kann man "interlaced" kodieren. Es schadet dem Material nicht, aber es wird dadurch auch nicht plötzlich interlaced! Umgekehrt wäre es fatal wenn man interlaced Video progressive kodieren würde. Deshalb gehen die Studios auf Nummer sicher und kodieren meistens gleich alles interlaced, auch wenn das weniger effizient ist. Um zu entscheiden, ob ein Video interlaced ist oder nicht, helfen nach wie vor nur deine Augen. Auf "Flags" kann man sich nicht verlassen, sie sagen nichts über den Inhalt.

  • Der "cpu"-Parameter legt nicht fest, wie viel Deblocking verwendet werden soll, sondern worauf und in welche Richtung (siehe DGMPGDec-Dokumentation). Die Stärke hängt von der Quantisierung des Videos ab. Wenn du davon abweichend steuern willst, wie stark entblockt werden soll, könntest du eventuell die Threshold-Parameter ausprobieren.

  • Mir hat's jetzt nicht total die Sprache verschlagen, sondern ich muss den Input erstmal noch etwas verdauen... :)

    *Please wait...>>>Brain Loading>>>*

    Der Weg zur Dunklen Seite... Schneller er ist, verführerischer, leichter.

  • OK, ich habe die letzten Tage etwas herumprobiert, unter anderem mit Optionen von Mpeg2Source ( cpu) und Deblock.

    Mit diesen Ergebnissen war ich nicht zufrieden. Zu glatt, feine Details waren weg, dafür natürlich bessere Kompression...

    Also anderer Weg...

    cft 18, preset slow, tune grain. Allerdings deblock mit 0:1 überschrieben und b-pyramid mit mbtree kombiniert.
    Bitraten lagen erwartungsgemäß über dem vorherigen Encoding, auf die Dateigröße übertragen waren es ca. 300Mb

    Allerdings ist damit dieser Thread bestimmt noch nicht abgeschlossen... :)

    Der Weg zur Dunklen Seite... Schneller er ist, verführerischer, leichter.

Jetzt mitmachen!

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