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:
- primarie di colore: quali rosso, verde e blu sono usati come riferimento, cioè l'ampiezza della gamma di colori;
- curva di trasferimento: come i valori numerici corrispondono alla luminosità;
- matrice: le formule per passare da RGB a Y'CbCr e viceversa;
- 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
- Nell'acquisizione: file registrati a range pieno senza metadati corretti.
- Nel montaggio: progetti impostati con uno spazio colore diverso da quello delle riprese.
- Nell'esportazione: encoder che non scrivono i metadati di colore.
- Nella riproduzione: lettori o browser che ignorano i metadati e applicano un'ipotesi predefinita.
- 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.