▶ Video e streaming

Scala dei bitrate: progettare le qualità per lo streaming

Come scegliere risoluzioni e bitrate di ogni livello di uno streaming adattivo, perché una scala unica non basta e cosa significa codifica per contenuto.

Nello streaming adattivo il lettore può scegliere solo tra le qualità che il server mette a disposizione. L'insieme di queste qualità, ciascuna con la propria risoluzione e il proprio bitrate, si chiama scala dei bitrate (bitrate ladder). È una decisione progettuale che incide direttamente su tre cose: quanto vedono bene gli spettatori, quanta banda si consuma e quanto costa codificare e archiviare i contenuti. Una scala mal costruita produce o video sgranati su connessioni buone, o buffering su connessioni medie.

Come è fatta una scala

Ogni gradino della scala ha almeno quattro parametri: risoluzione, bitrate video, codec e profilo. Una scala classica per H.264 potrebbe avere questa forma:

Gradino Risoluzione Bitrate video indicativo
1 416×234 300 kbps
2 640×360 700 kbps
3 854×480 1200 kbps
4 1280×720 2500 kbps
5 1920×1080 5000 kbps

I valori sono solo un esempio di partenza: la scala giusta dipende dai contenuti, dal codec e dal pubblico.

I principi di una buona scala

Distanza tra i gradini

I salti tra un gradino e l'altro non devono essere né troppo piccoli né troppo grandi. Una regola pratica usata spesso è che ogni gradino abbia un bitrate tra 1,5 e 2 volte quello precedente.

  • Gradini troppo vicini: si moltiplicano le codifiche senza un vero beneficio visivo, e il lettore tende a oscillare.
  • Gradini troppo lontani: quando la banda cala leggermente, il lettore è costretto a un salto di qualità vistoso.

Il gradino più basso

Il primo gradino deve essere abbastanza leggero da funzionare anche su connessioni mobili scarse. Serve soprattutto all'avvio e nei momenti di crisi: un'immagine modesta è preferibile a un video bloccato. Molti servizi includono anche una versione solo audio per le situazioni peggiori.

Il gradino più alto

Il gradino più alto deve essere quello che vale davvero la pena consegnare. Aumentare il bitrate oltre una certa soglia non porta miglioramenti visibili: la curva qualità-bitrate si appiattisce, e i bit in più servono solo a consumare banda.

Risoluzione e bitrate vanno scelti insieme

A parità di bitrate, una risoluzione più bassa può apparire migliore di una più alta. Se si comprimono pochi bit su troppi pixel, compaiono blocchi e sbavature; usando una risoluzione inferiore, l'encoder ha più bit per ogni pixel e il lettore poi ingrandisce l'immagine. Per ogni bitrate esiste quindi una risoluzione ottimale, che dipende dal contenuto.

Per trovarla si codifica lo stesso video a più risoluzioni e più bitrate, si misura la qualità di ciascuna versione rispetto all'originale con una metrica come VMAF, e si traccia per ogni risoluzione una curva qualità-bitrate. Il punto in cui le curve si incrociano indica dove conviene passare alla risoluzione successiva. L'involucro superiore di queste curve, chiamato frontiera convessa, è la scala ideale per quel contenuto.

Codifica per contenuto

Una scala fissa, uguale per tutti i video, è semplice da gestire ma inefficiente:

  • un cartone animato con campiture piatte raggiunge un'ottima qualità con pochi bit;
  • un concerto con luci stroboscopiche e coriandoli ne richiede molti di più.

Con una scala fissa il primo spreca banda e il secondo appare degradato. La codifica per contenuto (per-title encoding) costruisce una scala diversa per ogni video, o addirittura per ogni scena, partendo dall'analisi descritta sopra. È un approccio reso noto dai grandi servizi di streaming, ma i suoi principi possono essere applicati anche a piccola scala: basta codificare alcuni estratti rappresentativi e confrontare i risultati.

Codec diversi, scale diverse

Un codec più efficiente permette di ridurre il bitrate di ogni gradino o di alzare la risoluzione a parità di bitrate. Quando si offrono più codec, per esempio H.264 per la compatibilità e AV1 per i dispositivi recenti, servono due scale distinte: copiare i bitrate di H.264 per AV1 significa rinunciare al vantaggio del codec moderno.

Vincoli pratici da non dimenticare

  • Schermi dei dispositivi: uno smartphone in verticale non trae beneficio da un 4K; si possono limitare i gradini offerti in base al dispositivo.
  • Costo di codifica e archiviazione: ogni gradino moltiplica il lavoro e lo spazio; per contenuti con poche visualizzazioni una scala corta può essere più sensata.
  • Keyframe allineati: tutti i gradini devono avere i keyframe negli stessi istanti.
  • Audio coerente: la traccia audio dovrebbe essere la stessa, o comunque compatibile, in tutti i gradini.

Un procedimento semplice

  1. Scegliete 3-4 estratti rappresentativi dei vostri contenuti.
  2. Codificateli a 3-4 risoluzioni e a 5-6 bitrate ciascuna.
  3. Misurate la qualità rispetto all'originale.
  4. Per ogni fascia di bitrate scegliete la risoluzione che ottiene il punteggio migliore.
  5. Eliminate i gradini che non portano un miglioramento percepibile rispetto al precedente.

In sintesi

  • La scala dei bitrate definisce le qualità tra cui il lettore può scegliere.
  • I gradini dovrebbero distare tra 1,5 e 2 volte in bitrate.
  • A basso bitrate una risoluzione minore spesso appare migliore.
  • La codifica per contenuto adatta la scala alla complessità di ogni video.
  • Ogni codec richiede una propria scala.
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