Come funziona l’algoritmo Per-Title di Netflix

Per-Title Encode Optimization

netflix-television1Abbiamo passato anni a sviluppare un algoritmo, denominato per-title encoding, che  fa l’analisi di ogni titolo per determinare la codifica ottimale in base alla sua complessità. Immagina di avere molte scene d’azione che hanno bisogno di più bit per incapsulare le informazioni rispetto a scene di paesaggi immutabili o animazioni che ne hanno bisogno di meno. Questo ci permette di offrire la stessa o migliore esperienza durante l’utilizzo di meno banda, che è particolarmente importante in paesi dove la larghezza di banda è poca e come espandere in o in luoghi dove la visualizzazione dei video è spesso su reti mobili.

Background
Nel sistemi tradizionale terrestri, via cavo o via satellite, le emittenti hanno una larghezza di banda allocata e il programma o un insieme di programmi sono codificati in modo che i flussi video risultanti occupino tutta la banda fissata. Multiplexing statistico è spesso impiegato dall’emittente per distribuire in modo efficiente il bitrate tra i programmi simultanei. Tuttavia, il bitrate totale accumulato attraverso i programmi dovrebbe comunque andare bene all’interno della capacità limitata. In molti casi, viene anche aggiunto un padding con pacchetti nulli che garantiscono il rigoroso bitrate costante per il canale fisso, sprecando così molta velocità. Inoltre, con le allocazioni dei canali pre-impostati, programmi meno popolari o generi possono essere assegnati bitrate più bassi (e quindi, di qualità peggiore) dimostra che sono visti da più persone.

Con i vantaggi dello streaming su Internet, Netflix non è tenuta a pre-assegnati vincoli canali. Invece, siamo in grado di offrire la migliore qualità video streaming a un membro, non importa quale sia il programma o genere, su misura per la larghezza di banda disponibile del membro e la visualizzazione di funzionalità del dispositivo. . Sul dispositivo del cliente, il client di Netflix esegue algoritmi di streaming adattivo che selezionano istantaneamente la migliore codifica per massimizzare la qualità del video, evitando le interruzioni della riproduzione dovute a rebuffers.

Codificare con il miglior modo non è un problema semplice. Per esempio, avendo una larghezza di banda 1 Mbps, potremo fare uno streaming H.264 / AVC a 480p, 720p o 1080p? A 480p, con 1 Mbps non ci saranno problemi come blocchi o ronzii, ma se il cliente sta guardando su un dispositivo HD, il video non sarà molto definito. D’altra parte, se si codificare a 1080p inviamo un video a risoluzione più elevata, ma il bitrate potrebbe essere troppo basso e la maggior parte delle scene potrebbe contenere problemi.
Il sistema migliore
Quando abbiamo implementato il nostro H.264 / AVC codifica alla fine del 2010, i nostri ingegneri hanno sviluppato una codifica di video che lavorasse bene con i titoli in catalogo (a quel tempo). Hanno testato diverse configurazioni di codec e eseguito side-by-side test visivi per stabilire quali parametri del codec davano i migliori risultati tra i diversi tipi di contenuti. Un insieme di coppie bitrate risoluzione (di cui come una scala bitrate), di seguito elencati, sono stati selezionati in modo che i bitrate erano sufficienti per codificare il flusso a tale risoluzione senza significativi artefatti di codifica:

bitrate

Questa scala “one-size-fits-all” a bitrate fisso ci da un buon risultato considerando il vincolo di bitrate. Tuttavia, per alcuni casi, come ad esempio scene con alto rumore della fotocamera o rumore grana della pellicola, il profilo ad alto flusso di 5800 kbps potrebbe mostrare blockiness nelle zone rumorose. Sull’altra estremità, per contenuto semplice come cartoni animati, 5800 kbps è molto più che necessario per la produzione di ottimi codifica 1080p. Inoltre, un client la cui larghezza di banda è vincolato a 1750 kbps potrebbe essere in grado di guardare il cartone animato a risoluzione HD, invece della risoluzione SD specificato dalla scala sopra.

I titoli della collezione di video di Netflix hanno molto elevata diversità di caratteristiche del segnale. Nel grafico di seguito vi presentiamo una rappresentazione della diversità dei 100 titoli campionatura casuale. Sono stati codificati 100 fonti a risoluzione 1080p utilizzando x264 costante QP (quantizzazione dei parametri) il controllo della frequenza. Ad ogni punto QP, per ogni titolo, si calcola il bitrate conseguente kbps, indicato l’asse x, e PSNR (Peak Signal-To-Noise Ratio) in dB, indicato l’asse y, come misura video qualità.

slENw4764sdpuOx1-QWeifA

I grafici mostrano che alcuni titoli raggiungono un valore molto alto di PSNR (45 dB o più) a bitrate di 2500 Kbps o meno. All’altro estremo, alcuni titoli richiedono bitrate di 8000 Kbps o più per ottenere un PSNR accettabile di 38 dB.

Tenuto conto di questa diversità, il sistema “one-size-fits-all”, ovviamente, non in grado di fornire la migliore qualità video per un determinato titolo e larghezza di banda consentita . Può anche sprecare memorizzazione e trasmissione di bit perché, in alcuni casi, il bitrate assegnato va oltre quanto è necessario per ottenere un sensibile miglioramento della qualità video.

Perché la codifica Per-Title?
Si consideri un film d’animazione in cui il contenuto è “semplice”, vale a dire, i fotogrammi video sono composti in gran parte della loro superficie senza grana o rumore e minimo movimento tra i fotogrammi. Confrontiamo la curva di qualità per la scala bitrate fisso con una scala bitrate ottimizzata per il titolo specifico:

sey8FEvS3Gi3bm9R-NrnbQA

Come mostrato nella figura in alto, che codifica per il video clip alla 1920×1080, 2350 kbps (A) produce una codifica di alta qualità, e l’aggiunta di bit per raggiungere 4300 kbps (B) o anche 5800 kbps (C) non darà un notevole miglioramento della qualità (per codifica con PSNR 45 dB o superiore, la distorsione è percettivamente impercettibile). Nella scala bitrate fisso, per 2350 kbps, abbiamo codificare a una risoluzione di 1280×720 (D). Pertanto i clienti con vincoli di larghezza di banda intorno a quel punto sono limitati a video 720p invece di migliore qualità video 1080p.

D’altra parte, si consideri un film d’azione che ha un movimento temporale più significativo e tessitura spaziale elevata rispetto al titolo d’animazione. Ha scene con oggetti in rapido movimento, rapidi cambi di scena, esplosioni e schizzi d’acqua. Il grafico sottostante mostra la curva di qualità di un film d’azione.

azione

Codifica queste scene di elevata complessità a 1920×1080, 4300 kbps (A), si tradurrebbe nella codifica artefatti come il blocco, squillo e contorni. Una migliore qualità/compromesso sarebbe codificare a 1280×720 risoluzione inferiore (B), per eliminare gli artefatti di codifica a scapito di aggiunta di scalatura. Artefatti di codifica sono in genere più fastidiosi e visibili come una sfocatura introdotta da downscaling (prima della codifica) poi si aumenta la frequenza al dispositivo del cliente. E ‘possibile che per questo titolo con scene ad alta complessità, sarebbe anche essere utile per codificare 1920×1080 a un bitrate di là di 5800 kbps, come 7500 kbps, per eliminare completamente gli artefatti di codifica.

Per offrire la migliore qualità video per i nostri clienti, ogni titolo deve ricevere una scala bitrate unico, su misura per le sue specifiche caratteristiche di complessità. Negli ultimi anni, la squadra di codifica a Netflix ha investito significative attività di ricerca e di ingegneria per indagare e rispondere alle seguenti domande:
Dato un titolo, quanti livelli di qualità devono essere codificati in modo che ogni livello produce una sola-percettibile-differenza (JND)?
Dato un titolo, qual è la coppia migliore risoluzione-bitrate per ogni livello di qualità?
Dato un titolo, qual è il bitrate più alto richiesto per ottenere la migliore qualità percepibile?
Dato un codificare video, qual è la qualità percepita?
Come si fa a progettare un sistema di produzione in grado di rispondere alle domande di cui sopra in modo robusto e scalabile?
L’algoritmo
la codifica Per-Title codifica consente di offrire video di qualità superiore in due modi: in condizioni di bassa larghezza di banda,la codifica Per-Title spesso vi darà una migliore qualità video come titoli con contenuti “semplici”, come ad esempio Bojack Horseman, sarà ora trasmesso in streaming in un risoluzione più elevata a parità di bitrate. Quando la larghezza di banda disponibile è sufficiente per codifica ad alto bitrate, la codifica Per-Title spesso vi darà ancora migliore qualità video per i titoli complessi, come Daredevil della Marvel, visto che poi codificare a un bitrate massimo superiore . La nostra continua innovazione su questo fronte riconosce l’importanza di fornire un’esperienza di visualizzazione ottimale per i nostri clienti e contemporaneamente usando meno larghezza di banda e di essere migliori custodi di Internet.