Das Pixelformat ist das Layout jedes Pixels in den Rohbilddaten eines Bildes oder Videos. Es teilt einem Programm mit, welche Farbkomponenten das Bild hat und wie viele Bits sie verwenden.
Videoberichte zeigen das Feld oft als pix_fmt, mit einem Wert wie yuv420p. Ein solcher Wert gibt das Farbmodell, das Chroma-Subsampling und die Farbtiefe an. Der Farbraum ist ein eigenes Feld.
Welche Dateien sie enthalten
Das FFprobe-Programm von FFmpeg listet pix_fmt für jeden Videostream auf. Dies gilt für MP4-, MOV-, MKV- und WebM-Dateien.
Bilder melden ebenfalls einen Wert. FFmpeg gibt yuvj420p für ein JPEG mit 4:2:0-Sampling und rgb24 für ein 8-Bit-RGB-PNG aus.
Eine Audiodatei mit einem Coverbild kann ebenfalls ein Pixelformat melden. FFmpeg behandelt dieses Bild als Videostream.
ExifTool liest aus Windows-HD-Photo-Dateien (HDP und WDP) ein Tag namens PixelFormat. Es zeigt Werte wie 24-bit RGB und 8-bit Gray an.
Wie die Werte aussehen
FFmpeg baut seine Namen aus kurzen Teilen auf. Der Wert yuv420p10le hat 5 Teile:
yuv: das Farbmodell. Y ist Helligkeit, U und V tragen Farbe. U und V heißen auch Cb und Cr, wie in YCbCr.420: das Sampling. Die Farbdaten haben halbe Breite und halbe Höhe der Helligkeitsdaten.p: planar. Jede Komponente hat eine eigene Ebene. Ein gepacktes Format hält die Komponenten zusammen in einem Array.10: die Bits pro Komponente. Der Wertyuv420phat hier keine Zahl und verwendet 8 Bits.le: die Byte-Reihenfolge, Little Endian. Die Endungbebedeutet Big Endian.
Typische Werte
Jede Zahl unten ist die durchschnittliche Bitanzahl pro Pixel in den Rohbilddaten:
yuv420p: 12 Bits, Farbe mit halber Breite und halber Höheyuv422p: 16 Bits, Farbe mit halber Breiteyuv444p: 24 Bits, Farbe für jedes Pixelyuvj420p: 12 Bits, dasyuv420p-Layout mit dem vollen Bereich, den JPEG verwendetrgb24: 24 Bits, gepacktes Rot, Grün und Blaurgba: 32 Bits, mit zusätzlichem Alphawert für Transparenzgray: 8 Bits, nur Helligkeitpal8: 8 Bits, jeder Wert verweist auf eine Palettenfarbe
Im vollen Bereich reicht die 8-Bit-Helligkeit von 0 bis 255. Im begrenzten Bereich reicht sie von 16 bis 235. FFmpeg empfiehlt ein separates Bereichsfeld statt der yuvj-Namen.
Woher der Wert kommt
Das Programm, das den Stream enkodiert, legt das Pixelformat fest. In FFmpeg wählst du es mit der Option -pix_fmt.
Der Name selbst wird normalerweise nicht in der Datei gespeichert. Das lesende Programm baut den Namen aus den gespeicherten Details zusammen.
Für H.264 verwendet FFmpeg die Farbtiefe und das Chroma-Format im Stream-Header. Für PNG verwendet FFmpeg die Farbtiefe und den Farbtyp im Bild-Header.
Warum das für deine Datei wichtig ist
Das Pixelformat bestimmt die Größe der Rohbilddaten. Ein rgb24-Frame hat 24 Bits pro Pixel, ein yuv420p-Frame 12. Codecs komprimieren diese Daten anschließend, daher ergeben diese Zahlen nicht die endgültige Dateigröße.
Das Pixelformat legt auch fest, wie viele Farbdetails die Datei behält. Das menschliche Auge sieht deutlich mehr Details in der Helligkeit als in der Farbe, daher verursacht 4:2:0 nur wenig sichtbaren Verlust.
Wenn du 4:2:0 in 4:4:4 umwandelst, berechnet ein Programm die fehlenden Samples aus den umliegenden. Die Farbdetails, die 4:2:0 entfernt hat, bleiben verloren.
Das H.264-Profil ist ein weiterer Grund, den Wert zu prüfen. Die Main- und High-Profile unterstützen 8-Bit-Farbe mit 4:2:0-Sampling.
Ein H.264-Stream in yuv444p oder yuv420p10le benötigt ein höheres Profil. Apples HLS-Regeln verlangen H.264 mit einem Profil bis einschließlich High. YouTube empfiehlt das High-Profil mit 4:2:0 für Uploads.