Tutto è possibile

Tag: compressione video

H264 standard… mica tanto

Spesso mi sento dire, mi faccia un mp4 che è standard … sorrido e creo un file che so essere compatibile con le esigenze del cliente.

Una volta era più facile distribuire un video, perché i supporti erano più limitati a vhs o dvd, con due standard video PAL o NTSC per distribuire in tutto il mondo.

Oggi ci sono mille e più varianti, ad esempio se si fornisce un supporto solido come il Blu-ray ci sono quelle che vengono indicate come le specifiche di base, e le varianti di formato… che ogni anno cambiano sul sito ufficiale del consorzio, perché a seconda del lettore da tavolo potrebbe essere supportata o no la variante, non dipende dalla data di produzione, o dal brand, anzi alle volte prodotti di marchi meno noti supportano più formati di altri più blasonati.

Lo standard del Blu-ray nasce a 24 fotogrammi al secondo, per rispettare la naturale creazione dei film, senza alterazioni su durata della parte video o alterazione sulla parte audio. Poco dopo la sua nascita è stato subito aggiunto il 23,976 per supportare più facilmente la riproduzione nel mondo Americano e Giapponese (NTSC a 60 hrz). Il codec di compressione di nascita era l’mpeg2 come il dvd (anche se con una variante dedicata all’alta definizione) anche se quasi subito fu introdotto il formato H264 (variante del codec mpeg 4), poi di recente aggiornato al suo successore H265.

Oggi il Blu-ray supporta dal 23,976 24 25 29,97 30 48 50 59,94 60, e neanche tutti in stream progressivo, ma alcuni solo in stream interlacciato per questioni di compatibilità.

Questo per dire come un prodotto che nasceva per uniformare e offrire il massimo della qualità della visione casalinga senza “interpretazioni” si è trasformato nell’insalata dei formati. Inoltre a seconda del monitor, televisore o proiettore su cui si vedono i risultati le immagini saranno più o meno fluidi o naturali.

Quando ci viene chiesto un H264 standard ci viene chiesto il nulla, perché lo standard è molto ampio e a seconda del dispositivo con cui verrà letto verrà INTERPRETATO in modo più i meno fedele.

Lo standard H264 prevede di registrare da un minimo di un segnale 8 bit 4:2:0 ad una serie di informazioni fino a 12bit 4:4:4, cambiare le impostazioni di codifica punto per punto del filmato, gestire più flussi video sovrapposti, alpha, riproduzioni parziali dei dati, cioè ottimizzare in lettura una scalabilità 1:2,1:3,1:4 etc dei pixel, inglobare codice, indici di capitoli, aree sensibili con dati a link e molto altro ancora; peccato che quasi nessun encoder sfrutti tutte queste caratteristiche.

Quando si crea un file H264 la maggior parte degli encoder ci permette solo di impostare il tipo di compressione e i profili, ma niente di più.

Ironicamente invece di usare un prodotto commerciale, la soluzione più versatile anche se meno comoda è il prodotto freeware ffmpeg, un programma a comando di linea che supporta praticamente tutte le funzioni di moltissimo codec sia in ingresso che uscita, ed è disponibile su tutti i principali sistemi operativi, sono state sviluppate diverse interfacce per utilizzare in modo più comodo e flessibile il prodotto.

Considerato che chi arriva ad un articolo di questo tipo di aspetta un suggerimento sugli “standard” vi posso dare dei suggerimenti su come affrontare il discorso e cosa scegliere come impostazioni e cosa influenza qualità e “compatibilità”.

⁃ Riproduzione da televisore o decoder o player multimediale

⁃ Riproduzione da computer diretto

⁃ Caricamento online

Anche se sono le situazioni più comuni in realtà aprono mille e più situazioni e varianti, perché in realtà la questione della riproduzione è al 50% dipendente dal file e al 50% dal sistema di riproduzione.

Quando si crea un file “classico” si sceglie la risoluzione, i fotogrammi al secondo, il bitrate e se questo è fisso o variabile.

In generale si deve creare un equilibrio tra i dati al secondo letto dal dispositivo e la qualità finale, questo significa che se si sceglie una compressione fissa vuol dire che ogni fotogramma avrà la stessa quantità di informazioni registrabili, immaginiamo 2000, ma se ho un fotogramma di una persona davanti ad un muro bianco tutti i dettagli vengono dedicati alla persona, se ho 20 persone gli stessi dati vengono “divisi” per registrare, quindi ogni persona al max avrà 100 per registrare i dettagli, quindi l’immagine sarà meno dettagliata.

Questo sistema permette di avere i seguenti caratteristiche:

⁃ Funziona anche su dispositivi più semplici

⁃ Prevedibilità della dimensione finale del file.

⁃ Per migliorare la qualità basta alzare il bitrate globale (entro certi limiti).

⁃ Per migliorare la compatibilità con i vecchi dispositivi basta abbassare il bitrate.

⁃ Non si notano jittering di decodifica dei movimenti perché i fotogrammi non devono essere creati ma sono tutti completi.

Se si sceglie una compressione variabile si imposta un range di dati minimo e massimo, per cui il sistema di compressione esegue due livelli di compressione, sia creando un frame Delta e un frame parziale per cui vengono creati dei gruppi di fotogrammi, con la logica di creare il primo frame intero, il secondo frame memorizza solo la differenza tra il primo e il secondo, il terzo la differenza tra il secondo e il terzo e così via fino al prossimo fotogramma Delta.

Il secondo livello di compressione variabile si preoccupa di distribuire una quantità di dati del gruppo in funzione delle necessità, di quanti dati sono necessari fotogramma per fotogramma, ottimizzando peso e qualità.

Il risultato ha caratteristiche differenti rispetto al primo metodo :

⁃ Con lo stesso bitrate massimale la qualità può essere notevolmente migliore

⁃ Lo stream dei dati è più efficiente via rete

Ma ci sono dei contro :

⁃ Questa lettura chiede cache più grandi e dispositivi più potenti perché i fotogrammi sono creati al volo, non esistono completamente

⁃ Se si vuole andare avanti e indietro nel filmato la richiesta di memoria e potenza sale

⁃ Alcuni tipi di filmati e movimenti possono con alcuni encoder dare risultati peggiori che il primo metodo perché da frame a frame sarà meno coerente come struttura e forma (se si lavora solo con bitrate molto bassi)

⁃ In caso di problemi di stream dei dati si possono vedere dei salti nei movimenti veloci, causando una visione a scatti.

⁃ Su dispositivi più vecchi possono esserci riproduzioni di artefatti (blocchi di movimento etc) che non sono presenti nel filmato originale.

In conclusione :

A seconda del dispositivo più o meno recente si deve creare un h264 con il primo metodo e bitrate bassi se si vuole vedere su ogni dispositivo vecchio e/o poco potente come molti smartphone di basso livello; con dispositivi moderni si può creare video col secondo metodo che a parità di peso offrirà una qualità superiore e con dettaglio e sfumature più efficienti.

 


8 bit, 10bit, 24bit, 32bit che razza di bestie sono quando esporto?

Cosa significano le diverse sigle?

In tante occasioni parlando di video di sentono diverse sigle che in un modo o nell’altro influenzano la qualità dell’immagine che andiamo a vedere e soprattutto a manipolare.

Quando si lavora con il video nella maggioranza dei casi si parla di video catturati a 8 bit, questo valore si riferisce alla componente colore singola, quindi il sensore o il sistema di registrazione cattura 2 alla ottava, il che significa 256 informazioni colore.

256 toni di colore per il canale del rosso, 256 toni per il canale del verde, 256 toni per il canale del blu.
La combinazione di tutte queste possibili sfumature creano una immagine che può contenere 16 milioni e rotti di combinazioni possibili, ovvero una immagine a 24bit.

quando si aggiunge il canale alfa ad una immagine a 24 bit, dato che il canale alfa segue le stesse capacità e regole del colore, avremo una immagini a 256 toni di grigio che definiscono la trasparenza totale (100% di luminosità) o la totale opacità del pixel (0% di luminosità).

quindi abbiamo una immagine a 24 bit (R = 8, G= 8, B=8) + 8 bit di alfa, totale immagine a 32 bit.

quando andiamo a esportare una immagine abbiamo teoricamente (dipende se e come il software supporta l’esportazione) la possibilità di esportare video e immagini a diverse profondità colore, più è alto il numero, maggiori sono le informazioni contenute e quindi maggiore è la qualità registrabile.

Parlo di qualità registrabile perchè se importo un video a 8 bit e lo esporto a 16bit, non significa che il video diventa a 16bit, non migliora l’immagine, nè aumentano i colori originali, restano gli stessi, ma se ho applicato dei filtri di correzione colore, probabilmente esportando a qualità più alta PRESERVO la qualità originale.

da un programma posso esportare :

8 bit per canale : 24 bit + eventuale alfa 8 bit che diventa 32bit
16 bit per canale : 48 bit + eventuale alfa 16 che diventa 64bit
32 bit per canale : 96 bit + eventuale alfa a 32 che diventa 128 bit (solo da vfx e software di post)

quando si parla di video, possono essere registrati a diversi bit da 8, 10, 12, 16 bit a seconda del codec di lavoro e dalle impostazioni dello stesso. Naturalmente avere uno spazio colore maggiore significa avere più informazioni e quindi più spazio di azione dove intervenire con la corezione colore o con la postproduzione in generale.

Perchè servono più di 16milioni di colori?

perchè in realtà quei colori sono la somma di tutti i colori possibili dei tre canali colorati, ma se devo fare una sfumatura di rosso puro, blu puro (il cielo) ho solo 256 possibili sfumature di blu, oltre intervengono leggeri squilibri degli altri colori, che portano il blu del cielo ad andare verso il verde, oppure verso il magenta, quindi non è più il colore puro.

Perchè non posso usare solo 8 bit se ho registrato una immagine nel modo corretto?

perchè non solo il limite è in registrazione, ma soprattutto nella post produzione, per comprendere meglio è possibile fare un esempio molto semplice, creare un colore sul limite e poi aumentare la sua luminosità.

esempio scostamento coloreDopo aver creato un colore rosso di un valore leggermente sbilanciato, ovvero col verde maggiore del blu ho semplicemente applicato una luminosità molto alta, e come potete vedere nelle informazioni finali, il colore non si scosta in modo lineare, perchè il rosso essendo già al massimo (255 come valore) non si può muovere, quindi salgono verde e blu, ma non in modo lineare e proporzionale, quindi man mano che rendo più luminosa l’immagine la quantità di verde del colore aumenta, quindi il rosso si inquina e cambia il colore originale.

Se invece avessimo avuto uno spazio colore a 16bit, dove le possibili combinazioni sono maggiori, il range di lavoro non è più 0-255 ma 0-32768, quindi le possibili sfumature realizzabili prima di ottenere uno scostamento colore evidente sono maggiori e più morbide.

Quando esporto un video a 8bit cosa posso esportare?

quando apriamo un pannello di compressione di un software, a seconda di quale codec esportiamo possiamo selezionare una profondità colore differente, ma attenzione che se si considera anche il canale alfa potremmo esportare più di quanto serve, anche quando non serve.

Se seleziono una esportazione a 8 bit, significa che esporto un file a 24 bit (8+8+8), ma se si attiva l’esportazione del canale alfa, in realtà noi esportiamo un file a 32bit perchè il file colore è a 24bit + 8 bit di canale alfa. Nella maggior parte dei casi il file sarà usato allo stesso modo, quindi nessun problema, ma in situazioni specifiche come con le macchine di messa in onda, un file a 32bit, anche se magari la parte del canale alfa è vuoto, viene rifiutato, e quindi è fondamentale sapere come esportare il materiale nel modo corretto.

Quando si lavora cosa può cambiare se lavoro in uno spazio colore più ampio?

Il discorso è molto semplice, se prendiamo una immagine e spostiamo le informazioni di luminosità, da uno spazio a 8 bit a 8 bit c’è il rischio di perdere delle informazioni intermedie perchè non c’è lo spazio corretto dove spostarli. basta confrontare l’istogramma del progetto a 8 bit con quello a 16bit.

confronto correzione colore 8 16bit

L’istogramma della correzione 8bit si vede come diventa frammentato, con diverse frequenze che spariscono e quindi rappresentano informazioni perse durante la correzione delle informazioni mentre nell’istogramma a 16bit queste informazioni vengono conservate perchè esistono più posizioni è possibile mantenere le informazioni anche di fronte ad una manipolazione più aggressiva dei valori.

Anche se poi il risultato finale sarà esportato in un file codificato a 8bit, la sorgente sarà di un file elaborato a 16bit e quindi preserverà meglio le informazioni originali.

Questo è il motivo per cui i software di correzione colore professionale lavorano solo in uno spazio colore a 32bit per canale, in modo che ogni operazione applicata ai colori delle immagini saranno a prova di errore e non ci sarà rischio di degrado causato da limitazioni dello spazio di lavoro.

Quando si lavora con AfterEffects e si manipola il colore, avere uno spazio colore di lavoro a 16bit serve a preservare il materiale durante la correzione colore, se si lavora con Premiere è importante abilitare le spunte “Rendering alla profondità massima” in modo che il calcolo interno delle elaborazioni del colore sia fatto a 32bit e quindi si corregga al meglio e nello spazio più ampio anche se poi andiamo a esportare in un codec usando solo gli 8bit di registrazione finale. DA RICORDARE come premiere, non essendo un programma di post, il calcolo nello spazio più ampio colore lo esegue in presenza di video manipolati da effetti a 32bit, nel caso la sequenza contenga anche un solo filtro a 8 bit, tutto il rendering sarà eseguito a 8 bit e non nello spazio colore a 32bit.

e quindi?

nella normalità si lavora a 8 bit, perchè le fonti medie di dslr, telecamere medie è a 8bit, e quindi solo per l’export di materiale fortemente manipolato lavorare negli a 16bit fa la differenza, mentre se non vi viene chiesto l’export di materiale con caratteristiche diverse, per fare dvd, bluray, file per tv, file per Online (youtube, vimeo, etc), file per messa in onda è a 8 bit, senza canale alfa.


Powered by WordPress & Theme by Anders Norén

error: Content is protected !!