Bug im h264-Farbraumfilter (Full Range Metadaten)

  • Ich gehe davon aus, dass die Einstellungen im Farbraumfilter des H.264-Encoders eigentlich nur Metadaten schreiben sollten, ohne den Videostream selbst zu verändern. Das ist auch der Fall, wenn ich die Einstellungen auf "Begrenzt/709/709/709" setze. Wenn ich aber die Metadaten auf Full Range setzen möchte (also "Voll/709/709/709"), dann werden zwar die Metadaten im encodierten File korrekt gesetzt, aber auch die Pegel des Videostreams werden gespreizt.

    Diese Metadaten möchte ich ja manuell entsprechend der Charakteristik der benutzten Videoeigenschaften setzen. Wenn ich aber ein Projekt rendern möchte, das schon mit Full-Range-Pegel vorliegt und ich nun per Voukoder die Full-Range-Metadaten setzen möchte, dann ist das Resultat ein Video mit nicht wiederherstellbar geclippten Schwarz- und Weiß-Werten.

    Wenn ich diese Full-Range-Metadaten direkt per FFmpeg setze, dann funktioniert es so wie erwartet: Der Pegel des Videostreams wird nicht verändert und nur die Metadaten werden entsprechend geschrieben.

    Marco

  • Vouk 24. November 2019 um 00:03

    Hat das Label In Bearbeitung hinzugefügt.
    • Offizieller Beitrag

    Das ist derzeit noch Baustelle die mir noch Kopfschmerzen bereitet. Ich fordere aktuell einen I420 Framebuffer an, bekomme aber keinerlei informationen über Farbraum und Pegel.

    Der Workaround geht von Begrenzt/709 aus und das führt natürlich zu Problemen wenn es anderes ist.

    Die Farbraum Filter konvertiert meines Wissens nach immer (spreizt/komprimiert). Sollte ich die Informationen von VEGAS korrekt bekommen müsstest du meinem Verständnis nach auch keinen Filter nutzen.

    Der bekannte Frameserver macht es sich da einfacher. Er holt sich alles als RGB und rechnet es sich es dann in YUV ... um so wie er es gerade braucht. Diese Konvertierung will ich mir aber eigentlich sparen.

  • »Der Farbraum Filter konvertiert meines Wissens nach immer (spreizt/komprimiert).«

    Also er tut's nicht, wenn ich bei einem Encoding oder Remuxing den Farbraum per FFmpeg-Script patche. Es sollte meiner Meinung nach auch nicht passieren, da das ja immer mit einem verlustbehaftetem, nicht reversiblen Banding und/oder Clipping einhergehen würde. Diese Aufgabe soll ja schließlich der Player anhand der Metadaten übernehmen, während Bearbeitungssysteme in der Lage bleiben sollen, den Originalstream auch ohne Clipping oder Banding bearbeiten zu können. Ansonsten wäre das qualitativ bei mehreren Rendergenerationen eine mittlere Katastrophe.

    Und auch per Voukoder passiert da keine Komprimierung des Signals, wenn ich umgekehrt diesen Filter auf »Begrenzt« anstatt auf »Voll« setze. Da werden dann ausschließlich die Metadaten korrekt gesetzt.

    Auch bei anderen FFmpeg-basierenden Programmen wie myFFmpeg oder FFAStrans werden in diesem Fall ausschließlich die Metadaten entsprechend geschrieben, ohne den originären Stream zu verändern.

    »Sollte ich die Informationen von VEGAS korrekt bekommen müsstest du meinem Verständnis nach auch keinen Filter nutzen.«

    Der einzig echte Knackpunkt bei Vegas Pro ist ja, dass es beim Encoding bestenfalls gar keine Metadaten zum Color Range schreibt, im ungünstigsten Fall (beim AVC-Encoding per MainConcept AVC) aber sogar die falschen. Der größte Segen fürs Encoding mit Vegas Pro wäre, wenn man selbst eine Option hätte, diese Metadaten auf »Full« oder »Limited« zu setzen. Das würde den größten Teil der Irritationen, die bei manchen Usern bezüglich der Pegel der Vegas-Pro-Exporte enstehen, beheben (und auch der YouTube-Encoder würde die Vegas-Uploads dann so behandeln, wie es vom Editor beabsichtigt ist).

    Ich habe unten mal einen Ordner mit drei Beispielen angehängt.

    »Chart_h264« ist der direkte AVC-Export aus Vegas Pro (diesmal per Intel H.264 anstatt per MainConcept, denn dann fehlen die entsprechenden Metadaten einfach).

    »Chart_h264_limited« ist die per FFmpeg remuxte Datei, wobei nur die Metadaten für »Limited« geschrieben wurden.

    »Chart_h264_full« ist die per FFmpeg remuxte Datei, wobei nur die Metadaten für »Full« geschrieben wurden.

    Wenn du diese drei Clips in Vegas Pro öffnest und sie per Waveform-Monitor und Histogramm analysierst, dann siehst du, dass der originäre Videostream tatsächlich völlig unverändert ist, kein Banding, kein Clipping.

    Wenn du diese drei Clips aber im MPC-Player abspielst, siehst du, dass nur der Clip mit »Full«-Metadaten den Stream unverändert lässt. Der Version ohne Metadaten wird strikt »Limited« unterstellt und für die Wiedergabe im Pegel gespreizt und gleiches passiert logischerweise auch für die »Limited«-Version.

  • Also mit dem aktuellen Release Build funktioniert alles korrekt, wenn ich die Farbraum-Metadaten "begrenzt" und "voll" über den Parameter-Filter setze. Die entsprechenden Einstellungen des Farbraumfilters habe ich nicht mehr überprüft, denn wenn es mit per Parameter-Filter funktioniert, genügt mir das.

    Danke für die Arbeit!

  • Vouk 9. Dezember 2019 um 10:45

    Hat das Label von In Bearbeitung auf Behoben geändert.