Hi444PP: 4:4:4 statt 4:2:2/4:2:0

Als erstens sollte dir klar sein was 4:4:4 bzw. Hi444PP ist und wie es funktioniert.
Dazu einen kleinen Gast-Artikel von Gebbi (den ich erlaubt benutzen darf):

Das Material auf Blu-rays (und im HDTV) wird im YV12-Farbraum mit 4:2:0-Farbunterabtastung ausgeliefert. Das bedeutet konkret, dass erst mal Farb- und Helligkeitsinformationen getrennt voneinander gespeichert werden. Die Helligkeitsauflösung liegen auf BDs in der vollen Auflösung (1920×1080) vor, d.h. jeder Pixel besitzt eine Information über seine Helligkeit. Bei den Farbinformationen wird hingegen gespart, hier werden jeweils vier Pixel zu einem „Paket“ zusammengefasst und erhalten eine einzige Farbinformation, die dann über die Helligkeitsinformation wiederum Abstufungen für die einzelnen Pixel des „Pakets“ erhalten kann. Effektiv haben wir dann also quasi eine halbierte Auflösung von 960×540 für die Farbinformationen.

Wikipedia hat da eine nette Grafik zur Veranschaulichung:
150px-Yuvformats420sampling.svg

Wie man sich jetzt vielleicht schon denken kann, geht die Auflösung der Farbinformationen beim regulären Runterskalieren des BD-Materials effektiv auf 640×360 runter (eben auf die reguläre Auflösung der Farbinformationen bei 720p-YV12-Material). Dadurch gehen Farbinformationen verloren. Um diese zu erhalten, werden die Informationen einzeln skaliert: Die Helligkeitsinformationen von 1920×1080 auf 1280×720, die Farbinformationen von 960×540 auf 1280×720. Dadurch gehen entsprechend keine Farbinformationen beim Downscale verloren und das Resultat ist Videomaterial im YV24-Farbraum mit 4:4:4-Unterabtastung, sprich, jeder Pixel besitzt eine Helligkeitsinformation und eine Farbinformation.

Der Vollständigkeit halber wieder ein Wikipedia-Bild:
150px-Yuvformats444sampling.svg.png

Deutlich sichtbar ist das dann zum Beispiel bei Rottönen, hier mal ein Vergleich vom KyoAni-Logo aus dem Tamako-Movie:

Regulärer Downscale mit 4:2:0-Farbunterabtastung:
ss+(2014-12-27+at+02.51.46)

Getrennter Downscale (bzw. Upscale bei den Farbinformationen) mit 4:4:4-Farbabtastung:
ss+(2014-12-27+at+02.51.52)

Original-Artikel

Noch als Anmerkung, dass es bei 720p+ (oder gar 1080p) Produktionen keinen großen Sinn macht 720p Hi444PP zu encoden, da das Luma dort eh schon geschädigt wird. Der Qualität Schaden tut es nicht, vergrößert jedoch die Datei und verringert die Kompatibilität. Es ist also im Grunde nicht nötig.

Hier noch ein Beispiel von mir
(Rechtsklick-> „Bild in einem neuen Tab öffnen“):

Diese Diashow benötigt JavaScript.

Und wie genau mache ich das?

Wie vorher erwähnt, skaliert man Luma/Chroma verschieden. Eine mögliche Variante würde so aussehen (gibt es auch bei  „yuv444=true“ in gradfun3mod):

Dither_convert_8_to_16()
ly = DebilinearY(1280,720,chroma=false,lsb_inout=true)
lu = utoy().dither_resize16(1280,720,kernel="blackmanminlobe",src_left=0.25,u=1,v=1)
lv = vtoy().dither_resize16(1280,720,kernel="blackmanminlobe",src_left=0.25,u=1,v=1)
ytouv(lu,lv,ly)

Zu beachten ist, dass die Parameternamen im Hi444PP-Raum anders lauten:
Debilinear -> DebilinearY
DebilinearM -> DebilinearM (bleibt gleich; mit chroma=false verwenden)
Debicubic -> Debicubicy_precise
DebicubicM -> DebicubicM_precise16
[Rest bleibt gleich, kann aber durch ein .ConvertToY8 schneller encodet werden (nur bei ly so nutzen) z.B. Spline36Resize(1280,720).ConvertToY8]

Diese dann bei ly mit der richtigen Skaliermethode ändern.

Sollte z.B. Ending anders skaliert wurden sein, würde es so aussehen:

Dither_convert_8_to_16()
ly = DebicubicM_precise16(1280, 720, chroma=false)
lu = utoy().dither_resize16(1280,720,kernel="blackmanminlobe",src_left=0.25,u=1,v=1)
lv = vtoy().dither_resize16(1280,720,kernel="blackmanminlobe",src_left=0.25,u=1,v=1)
a= ytouv(lu,lv,ly)
ly = DebicubicM_precise16(1280, 720, chroma=false, b=0, c=1)
lu = utoy().dither_resize16(1280,720,kernel="blackmanminlobe",src_left=0.25,u=1,v=1)
lv = vtoy().dither_resize16(1280,720,kernel="blackmanminlobe",src_left=0.25,u=1,v=1)
b= ytouv(lu,lv,ly)
ReplaceFramesSimple(a, b, mappings="[31767 33924]")

Sonst noch etwas?

In deiner Batchdatei musst du dann noch folgendes hinzufügen/ändern:

--input-res 1280x720 --profile high444 --input-csp i444 --output-csp i444 --chroma-qp-offset -4
Advertisements