Format piksela to układ każdego piksela w surowych danych obrazu w pliku graficznym lub wideo. Informuje program, z jakich składowych kolorów składa się obraz i ile bitów one zajmują.
W raportach wideo to pole często pojawia się jako pix_fmt, z wartością taką jak yuv420p. Taka wartość określa model kolorów, próbkowanie chrominancji i głębię bitową. Przestrzeń barw jest osobnym polem.
Które pliki to zawierają
Program ffprobe w FFmpeg podaje pix_fmt dla każdego strumienia wideo. Dotyczy to plików MP4, MOV, MKV i WebM.
Obrazy także podają tę wartość. FFmpeg przypisuje yuvj420p plikowi JPEG z próbkowaniem 4:2:0 oraz rgb24 plikowi PNG RGB w 8 bitach.
Plik audio z okładką może również podawać format piksela. FFmpeg traktuje ten obraz jak strumień wideo.
ExifTool odczytuje znacznik PixelFormat z plików Windows HD Photo (HDP i WDP). Pokazuje wartości takie jak 24-bit RGB i 8-bit Gray.
Jak wyglądają wartości
FFmpeg buduje swoje nazwy z krótkich części. Wartość yuv420p10le składa się z 5 części:
yuv: model kolorów. Y oznacza jasność, a U i V niosą informację o kolorze. U i V nazywa się też Cb i Cr, jak w YCbCr.420: próbkowanie. Kolor ma połowę szerokości i połowę wysokości danych jasności.p: planar. Każda składowa ma osobną płaszczyznę. Format pakowany trzyma składowe razem w jednej tablicy.10: liczba bitów dla każdej składowej. Wartośćyuv420pnie ma tu liczby i używa 8 bitów.le: kolejność bajtów, little-endian. Zakończeniebeoznacza big-endian.
Typowe wartości
Każda liczba poniżej to średnia liczba bitów na piksel w surowych danych obrazu:
yuv420p: 12 bitów, kolor o połowie szerokości i połowie wysokościyuv422p: 16 bitów, kolor o połowie szerokościyuv444p: 24 bity, kolor dla każdego pikselayuvj420p: 12 bitów, układyuv420pz pełnym zakresem używanym przez JPEGrgb24: 24 bity, pakowane składowe czerwony, zielony i niebieskirgba: 32 bity, z dodaną alfą dla przezroczystościgray: 8 bitów, tylko jasnośćpal8: 8 bitów, każda wartość wskazuje kolor z palety
W pełnym zakresie 8-bitowa jasność ma wartości od 0 do 255. W ograniczonym zakresie wynoszą one od 16 do 235. FFmpeg zaleca osobne pole zakresu zamiast nazw yuvj.
Skąd pochodzi wartość
Program, który koduje strumień, decyduje o formacie piksela. W FFmpeg wybierasz go opcją -pix_fmt.
Sama nazwa zwykle nie jest zapisana w pliku. Program odczytujący buduje ją z zapisanych parametrów.
Dla H.264 FFmpeg używa głębi bitowej i formatu chrominancji z nagłówka strumienia. Dla PNG wykorzystuje głębię bitową i typ koloru z nagłówka obrazu.
Dlaczego ma to znaczenie dla Twojego pliku
Format piksela określa rozmiar surowych danych obrazu. Ramka rgb24 ma 24 bity na piksel, a ramka yuv420p ma 12. Kodeki potem kompresują te dane, więc te liczby nie dają końcowego rozmiaru pliku.
Format piksela określa też, ile szczegółów koloru zachowa plik. Ludzkie oko widzi dużo więcej szczegółów w jasności niż w kolorze, więc 4:2:0 powoduje niewielką widoczną utratę.
Gdy konwertujesz 4:2:0 na 4:4:4, program wylicza brakujące próbki z sąsiednich. Szczegóły koloru usunięte przez 4:2:0 pozostają utracone.
Profil H.264 to kolejny powód, aby sprawdzić tę wartość. Profile Main i High obsługują 8-bitowy kolor z próbkowaniem 4:2:0.
Strumień H.264 w yuv444p lub yuv420p10le wymaga wyższego profilu. Zasady Apple HLS wymagają H.264 w profilu High lub niższym. YouTube zaleca profil High z 4:2:0 dla przesyłanych plików.