Il formato pixel è la disposizione di ogni pixel nei dati grezzi dell'immagine di una foto o di un video. Indica a un programma quali componenti di colore ha l'immagine e quanti bit usano.
Nei report video il campo è spesso indicato come pix_fmt, con un valore come yuv420p. Un valore di questo tipo mostra il modello di colore, il chroma subsampling e la profondità in bit. Lo spazio colore è un campo separato.
Quali file lo contengono
Il programma ffprobe di FFmpeg elenca pix_fmt per ogni stream video. Questo include file MP4, MOV, MKV e WebM.
Anche le immagini riportano un valore. FFmpeg assegna yuvj420p a un JPEG con campionamento 4:2:0 e rgb24 a un PNG RGB a 8 bit.
Un file audio con copertina può riportare anch'esso un formato pixel. FFmpeg tratta quella immagine come uno stream video.
ExifTool legge un tag chiamato PixelFormat dai file Windows HD Photo (HDP e WDP). Mostra valori come 24-bit RGB e 8-bit Gray.
Come appaiono i valori
FFmpeg costruisce questi nomi da parti brevi. Il valore yuv420p10le ha 5 parti:
yuv: il modello di colore. Y è la luminosità e U e V contengono il colore. U e V sono chiamati anche Cb e Cr, come in YCbCr.420: il campionamento. Il colore ha metà della larghezza e metà dell'altezza dei dati di luminosità.p: planare. Ogni componente ha un piano separato. Un formato packed mantiene i componenti insieme in un unico array.10: i bit per ogni componente. Il valoreyuv420pnon ha un numero qui e usa 8 bit.le: l'ordine dei byte, little-endian. Il suffissobesignifica big-endian.
Valori tipici
Ogni numero qui sotto è la media dei bit per pixel nei dati grezzi dell'immagine:
yuv420p: 12 bit, colore a metà della larghezza e metà dell'altezzayuv422p: 16 bit, colore a metà della larghezzayuv444p: 24 bit, colore per ogni pixelyuvj420p: 12 bit, lo schemayuv420pcon l'intero intervallo usato da JPEGrgb24: 24 bit, rosso, verde e blu in formato packedrgba: 32 bit, con un valore alpha aggiuntivo per la trasparenzagray: 8 bit, solo luminositàpal8: 8 bit, ogni valore punta a un colore della palette
A pieno intervallo, una luminosità a 8 bit va da 0 a 255. A intervallo limitato va da 16 a 235. FFmpeg consiglia un campo intervallo separato invece dei nomi yuvj.
Da dove proviene il valore
Il programma che codifica lo stream decide il formato pixel. In FFmpeg lo scegli con l'opzione -pix_fmt.
Di solito il nome in sé non è memorizzato nel file. Il programma che legge costruisce il nome dai dettagli memorizzati.
Per H.264, FFmpeg usa la profondità in bit e il formato di chroma nell'header dello stream. Per PNG, FFmpeg usa la profondità in bit e il tipo di colore nell'header dell'immagine.
Perché è importante per il tuo file
Il formato pixel definisce la dimensione dei dati grezzi dell'immagine. Un frame rgb24 ha 24 bit per pixel e un frame yuv420p ne ha 12. I codec poi comprimono questi dati, quindi questi numeri non indicano la dimensione finale del file.
Il formato pixel definisce anche quanta informazione di colore il file conserva. L'occhio umano vede molti più dettagli nella luminosità che nel colore, quindi il 4:2:0 causa una perdita visibile minima.
Se converti da 4:2:0 a 4:4:4, un programma calcola i campioni mancanti da quelli vicini. I dettagli di colore rimossi dal 4:2:0 restano persi.
Il profilo H.264 è un altro motivo per controllare il valore. I profili Main e High supportano colore a 8 bit con campionamento 4:2:0.
Uno stream H.264 in yuv444p o yuv420p10le richiede un profilo più alto. Le regole HLS di Apple richiedono H.264 con profilo High o inferiore. YouTube consiglia il profilo High con 4:2:0 per gli upload.