Farbkorrektur durch Metatags im MKV-Container?

  • Hallo zusammen,

    weiß jemand von euch, ob es möglich ist, über den videocontainer die Farbsättigung, Helligkeit und den Kontrast zu ändern?

    Über diverse Player (mpc Player, Pot Player usw.) kann man das ja direkt im Player machen, aber ich würde es gerne fest (dauerhaft) so einstellen, ohne Reencoden zu müssen.

    Geht das?


    Danke euch

  • Ja genau in die Richtung ging mein Gedanke.

    Wenn ich jetzt Filme habe, bei denen ich die Farbsättigung, Helligkeit und den Kontrast geringfügig anpassen möchte, wäre es super, wenn man das irgendwie mit Custom Tags / Container Metainformationen oder was auch immer da reinschreiben könnte, sodass der Player direkt weiß, wie er den Film darstellen soll.

    Dann müsste ich das in den Filmen nicht jedes Mal selber wieder durch rumprobieren einstellen.


    Gibt es denn irgendwelche Container Command Lines oder derartiges, mit denen man Dinge wie z.B. (sat=1.2, bright=0.9, cont=1.1) vorgeben könnte?

  • Zitat

    Gibt es denn irgendwelche Container Command Lines oder derartiges, mit denen man Dinge wie z.B. (sat=1.2, bright=0.9, cont=1.1) vorgeben könnte?

    In Hybrid könntest Du über ne *hidden* option ein oder mehrere mkv tags hinzufügen und die unter Config->MKV tagging nutzen.

    Alternativ sollte es auch mkv tag Editoren geben, bei denen man beliebige Tags setzen kann. (könnte man vermutlich auch mit mkvpropedit, da kann man aber glaub ich nur ne xml Datei angeben)

  • Hmm, ich denke ich verstehe.

    Ich hatte gehofft, dass player wie mpc player oder pot player oder KM player, bei denen man Helligkeit, Farbsättigung und Kontrast während der Wiedergabe anpassen kann, solche Tags automatisch erkennen würden.


    Wenn dem nicht so ist, würde das ja bedeuten, dass die entsprechenden Videos auch immer nur mit dem entsprechend angepassten player wie gewünscht aussehen, richtig?

  • Zitat

    Wenn dem nicht so ist, würde das ja bedeuten, dass die entsprechenden Videos auch immer nur mit dem entsprechend angepassten player wie gewünscht aussehen, richtig?


    Richtig. -> das wesentliche Problem ist einen der Playerentwickler davon zu überzeugen, dass das, was Du willst ne sinnige Idee ist, damit das in die offizielle Version des Players kommt.

  • Ich sehe da grundsätzlich ein bis möglicherweise zwei positive Aspekte:

    • Man müsste bei Filmen, bei denen Farbe/Helligkeit/Kontast nicht passt nicht reencodieren, um eine dauerhafte Korrektur zu erwirken
    • Mögliche Bandbreiteneinsparung (wollte ich demnächst mal austesten)

    Grundsätzlich erfordert mehr Kontrast und mehr Farbe ja auch mehr Bitrate beim Encoden.

    Jetzt wäre es meiner Ansicht nach evtl. eine interessante Sache (insbesondere für sehr bitratenlastige Filme und 4K Filme oder ähnliches), wenn man im Film selbst den Kontrast und Farbsättigung auf ein Minimum runterdreht und dann einfach dem Container die für die Kompensation notwendigen Metadaten mitgibt. Ob das Bild hinterher wieder exakt gleich aussieht und wie viel man damit sparen kann, will ich demnächst mal ausprobieren. Grundsätzlich kann ich das ja über die playerinternen Farbe/Helligkeit/Kontast-Regler testen.

  • Davon mal abgesehen, dass der Thread hier der total falsche Ort ist dafür. ;) (da die allgemeine Diskussion nicht wirklich was mit Hybrid zu tun hat) Hab mal die Posts gemeldet und gebeten das in Generelle Laberunterforum zu schieben.


    Okay, wenn ich Dich nicht missverstehen ist, was Du willst, Deiner Quelle ColorGrading (HDR) Informationen hinzufügen,


    Wenn Dein Material als HEVC vorliegen würde, würde ich sagen, dass Du Dich mit ColorGrading und dem Erstellen und Austauschen der HDR10+/DolbyVision Metadaten beschäftigen solltest.


    Zitat
    • Man müsste bei Filmen, bei denen Farbe/Helligkeit/Kontast nicht passt nicht reencodieren, um eine dauerhafte Korrektur zu erwirken
    • Mögliche Bandbreiteneinsparung (wollte ich demnächst mal austesten)

    Zum ersten Punkt: okay.

    Zum zweiten Punkt: sehe ich nicht. Das da irgendwas eingespart wird. Wenn die Informationen nicht da sind, bringt an der Helligkeit&Co drehen nix. Wenn Du einen zu dunklen oder zu hellen Film hast, werden da keine Informationen erfunden. Aus YUV 4:2:0 kann man nicht einfach bessere 4:4:4 machen. ;)

    Informationen in zu dunklen/hellen Stellen verwerfen ist ja, was alle hvs (human visual system) Optimierungen machen.


    Cu Selur

  • naja, die Sache ist doch die:

    Wenn ich eine Szene habe und durch Colorgrading im Video selbst den Kontrast und die Farbsättigung stark erhöhe und danach neu codiere (diese Farb- und Kontrastanpassung also hart ins Video reinbügele), brauche ich definitiv mehr Bitrate. Dasselbe gilt logischerweise auch umgekehrt ;)


    Meine Idee wäre jetzt, einfach die Sättigung mal um 30-40 % zu verringern und den Kontrast um 20-30 %.

    Natürlich darf man die Werte nicht auf 0 setzen. Das hatte ich mal vorausgesetzt.

    Wie viel das bringt, werde ich später mal austesten, sobald meine CPU wieder frei ist :)

  • Wenn ich bei einem Video über interne Filter den Kontrast und die Sättigung reduziere, verringere ich die Informationen pro Frame, die gerendert werden müssen und reduziere damit die erforderliche Bitrate. Vermutlich hat das bei 4K Filmen auch einen gewissen Einfluss auf die Rendergeschwindigkeit.

    Wenn ich also beispielsweise per Filter den Kontrast um 30 % reduziere und die Sättigung um 40 %, wird weniger Bitrate benötigt.

    Anschließend würde ich mit dem Player Kontrast wieder um 30 % erhöhen und die Sättigung um 40 %.


    Wenn man das über Colorgrading mit HDR Informationen irgendwie so reinschreiben könnte, wäre das also in der Hinsicht interessant. Wie viel das bei normalen Videos ausmacht und ob das sich das lohnen kann, muss ich noch testen.

    Das war nur grundsätzlich die Idee hinter meinem zweiten Punkt.

  • Zitat

    Wenn ich bei einem Video über interne Filter den Kontrast und die Sättigung reduziere, verringere ich die Informationen pro Frame, die gerendert werden müssen und reduziere damit die erforderliche Bitrate.

    Ja, wenn Dein Kontrast / Sättigung ändern Informationen vernichtet, sind die erforderliche Bitrate.


    Zitat

    Wenn ich also beispielsweise per Filter den Kontrast um 30 % reduziere und die Sättigung um 40 %, wird weniger Bitrate benötigt.

    Anschließend würde ich mit dem Player Kontrast wieder um 30 % erhöhen und die Sättigung um 40 %.

    Okay, aber die verlorenen Informationen würdest Du nicht zurückerhalten, entsprechend hast Du keinen Kompressionsgewinn.

    Wenn Du die Sättigung vor dem Encoden auf 0 setzt (und damit Graustufen Videos hast), bring die Sättigung erhöhen im Player, nichts mehr.


    Was Du Dir da denkst, ist HSV und im Prinzip, warum Filme als 4:4:4, sondern i.d.R. als 4:2:0 vertrieben werden.

    Du eine Datenreduktion, nicht Datenkompression. :)

    Ist wäre wie ein Denoisefilter, der erhöht nicht die Kompression, der reduziert die Daten. :)


    Das Argument bzgl. der Bequemlichkeit, dass man für Player angepasste Werte in Dateien hat und der User sie nicht jedes Mal angeben muss, sehe ich ein. Problem ist, dass die Playerentwickler darin vermutlich nicht wirklich einen Sinn sehen. :)


    Zitat

    Wenn man das über Colorgrading mit HDR Informationen irgendwie so reinschreiben könnte, wäre das also in der Hinsicht interessan

    Was machen den HDR Informationen anderes?

    grafik.png

    => Das Problem ist nur, dass das Erstellen von HDR Informationen, die man einem HEVC Stream hinzufügen kann, umständlicher ist, als Sättigung und Kontrast zu setzen.


    Was Du natürlich mal ausprobieren kannst, wäre, ob Du das, was Du willst, auch hinbekommst, wenn Du die HDR10 Daten im MKV Container einfach änderst. Wobei das eventuell auch nur bei manchen Formatkombinationen von den Playern unterstützt wird. Bei mir werden die HDR Metadaten zwar von MediaInfo angezeigt, aber haben keinen Effekt. (Das kann aber an meinem Setup liegen.)


    Cu Selur


    Ps.: Vielleicht kriegt man nen Playerentwickler überredet, dass er eine im mkv enthaltene LUT automatisch anwendet.

  • Kommt halt auf die Quelle an.

    Wenn keine Daten verloren gehen, klappt es mit dem Kompensieren. ;)

    Aber das hängt stark vom Material und um wie viel Prozent Du da heruntergehst ab.

    Kann man mit:

    Code
    1. X=0.125
    2. Y=1/X
    3. org=clip
    4. clip1=adjust.Tweak(clip=clip,hue=0.00, sat=X,cont=1.00,coring=True)
    5. clip2=adjust.Tweak(clip=clip1,hue=0.00, sat=Y,cont=1.00,coring=True)
    6. clipa=core.std.StackHorizontal([org.text.Text("Original"), clip1.text.Text("Desaturated")])
    7. clipb=core.std.StackHorizontal([clip2.text.Text("Resaturated"),core.std.MakeDiff(org, clip2).text.Text("Diff(Org, Resaturated)")])
    8. clip=core.std.StackVertical([clipa, clipb])

    Einfach simulieren. :)

    Hier ein Bild:

    grafik.png

    bei X=0.5