Dizionario

Che cos'è il formato pixel?

Il formato pixel è il modo in cui un video o un'immagine organizza i dati di colore di ogni pixel. Scopri cosa significano per il tuo file valori come yuv420p.

pixel-format

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 valore yuv420p non ha un numero qui e usa 8 bit.
  • le: l'ordine dei byte, little-endian. Il suffisso be significa 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'altezza
  • yuv422p: 16 bit, colore a metà della larghezza
  • yuv444p: 24 bit, colore per ogni pixel
  • yuvj420p: 12 bit, lo schema yuv420p con l'intero intervallo usato da JPEG
  • rgb24: 24 bit, rosso, verde e blu in formato packed
  • rgba: 32 bit, con un valore alpha aggiuntivo per la trasparenza
  • gray: 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.