▶ Video e streaming

Spazi colore nel video: BT.601, BT.709, BT.2020 e range

Primarie, curva di trasferimento, matrice e range limitato o pieno: perché un video esportato appare slavato o troppo contrastato e come evitarlo.

Capita spesso: un video appare perfetto nel programma di montaggio e, una volta esportato o caricato online, i neri diventano grigi, i colori si spengono o, al contrario, le ombre si chiudono in un nero pieno. Nella grande maggioranza dei casi non è un problema del codec né della piattaforma, ma di metadati di colore incoerenti lungo la catena. Per capirlo bisogna sapere che, nel video, i numeri dei pixel da soli non bastano: serve sapere come interpretarli.

Le quattro informazioni che definiscono il colore

Un flusso video dovrebbe dichiarare quattro proprietà distinte:

  1. primarie di colore: quali rosso, verde e blu sono usati come riferimento, cioè l'ampiezza della gamma di colori;
  2. curva di trasferimento: come i valori numerici corrispondono alla luminosità;
  3. matrice: le formule per passare da RGB a Y'CbCr e viceversa;
  4. range: quali valori numerici rappresentano il nero e il bianco.

Se il lettore ne interpreta anche una sola in modo diverso da come è stato creato il file, il risultato cambia visibilmente.

Gli standard principali

Standard Contesto d'origine Note
BT.601 televisione a definizione standard primarie diverse per PAL e NTSC
BT.709 alta definizione lo standard di riferimento per HD e per il web SDR
BT.2020 ultra alta definizione gamma molto più ampia, usata con HDR

Per il video SDR in alta definizione, oggi la scelta corretta è quasi sempre BT.709 per primarie, curva e matrice. Il web e la maggior parte dei lettori assumono BT.709 per i video HD quando i metadati mancano.

L'errore BT.601 / BT.709

Un problema classico nasce quando un video HD viene convertito con la matrice BT.601 e letto con BT.709, o viceversa. Il risultato non è drammatico ma è riconoscibile: le tonalità della pelle virano leggermente, i verdi e i rossi cambiano sfumatura. Succede spesso con conversioni di vecchi strumenti, oppure ridimensionando un video SD in HD senza convertire la matrice.

Range limitato e range pieno

È la causa più frequente dei video «slavati».

  • Range limitato (detto anche TV o broadcast): in un video a 8 bit il nero corrisponde a 16 e il bianco a 235. I valori fuori da questo intervallo sono riservati a margini di sicurezza. È lo standard per quasi tutto il video.
  • Range pieno (detto anche PC o full): il nero è 0 e il bianco è 255, come nelle immagini del computer.

Cosa succede quando c'è un errore:

  • un file a range limitato letto come pieno appare slavato: il nero a 16 viene mostrato come grigio scuro, il bianco a 235 come grigio chiaro;
  • un file a range pieno letto come limitato appare troppo contrastato: tutto ciò che sta sotto 16 diventa nero puro e i dettagli nelle ombre spariscono.

Le registrazioni dello schermo, alcune fotocamere e alcuni smartphone producono file a range pieno; se il programma di montaggio o il lettore non lo riconoscono, l'errore si propaga.

Dove si nasconde il problema

  1. Nell'acquisizione: file registrati a range pieno senza metadati corretti.
  2. Nel montaggio: progetti impostati con uno spazio colore diverso da quello delle riprese.
  3. Nell'esportazione: encoder che non scrivono i metadati di colore.
  4. Nella riproduzione: lettori o browser che ignorano i metadati e applicano un'ipotesi predefinita.
  5. Nella visualizzazione: monitor o schede grafiche impostati sul range sbagliato, che falsano tutto ciò che si vede.

L'ultimo punto è insidioso: se il monitor del computer è collegato via HDMI e la scheda grafica invia un segnale a range limitato a uno schermo che si aspetta il pieno, tutto apparirà slavato, compresi i file corretti.

Controllare e correggere con FFmpeg

Con ffprobe si leggono i metadati di colore di un file:

ffprobe -v error -select_streams v:0 -show_entries stream=color_range,color_space,color_transfer,color_primaries video.mp4

Se i campi risultano «unknown», il lettore dovrà indovinare. Per dichiararli esplicitamente durante la codifica:

ffmpeg -i ingresso.mov -c:v libx264 -crf 20 -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv uscita.mp4

Attenzione: queste opzioni dichiarano i metadati, non convertono i colori. Se i pixel sono a range pieno e volete un file a range limitato, serve una conversione vera, per esempio con il filtro scale e i suoi parametri di range in ingresso e in uscita.

Buone pratiche

  • verificate con ffprobe o MediaInfo gli spazi colore dei file sorgente prima di iniziare;
  • mantenete un unico spazio di lavoro per tutto il progetto;
  • esportate dichiarando sempre primarie, curva, matrice e range;
  • controllate il risultato su più dispositivi, compreso uno smartphone;
  • calibrate o almeno verificate il monitor su cui prendete le decisioni di colore.

In sintesi

  • Il colore nel video dipende da primarie, curva di trasferimento, matrice e range.
  • BT.709 è lo standard per l'HD SDR; BT.2020 si usa con UHD e HDR.
  • Un video slavato è spesso un range limitato letto come pieno.
  • Le opzioni di metadati dichiarano lo spazio colore ma non convertono i pixel.
  • Verificate i metadati delle sorgenti e dichiarateli sempre in esportazione.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche