Quello che hai calcolato è il bitrate per un video non compresso. In genere non li troverai se non nella ricerca o in altre applicazioni specializzate. Anche le emittenti utilizzano video compressi, sebbene con un bitrate molto più elevato rispetto al tipico video di YouTube.
Quindi, la qualità del video ha molto a che fare con il modo in cui il video è stato compresso. Più lo comprimi, meno bit ci vogliono per frame. Inoltre, più comprimi, peggiore è la qualità. Ora, alcuni video sono molto più facili da comprimere rispetto ad altri - in sostanza, questo è il motivo per cui hanno un bitrate inferiore anche se hanno la stessa risoluzione e framerate.
Per capire perché, è necessario essere consapevoli dei due principi principali utilizzati dalla compressione video. Questi sono chiamati "ridondanza spaziale" e "temporale".
Ridondanza spaziale
La ridondanza spaziale esiste nelle immagini che mostrano contenuti naturali. Questo è il motivo per cui JPEG funziona così bene: comprime i dati delle immagini perché i blocchi di pixel possono essere codificati insieme. Questi sono 8 × 8 pixel, ad esempio. Questi sono chiamati "macroblocchi".
I moderni codec video fanno lo stesso: usano sostanzialmente algoritmi simili a JPEG per comprimere un frame, blocco per blocco. Quindi non memorizzi più bit per pixel, ma bit per macroblocco, perché "riassumi" i pixel in gruppi più grandi. Riassumendo, l'algoritmo eliminerà anche le informazioni che non sono visibili all'occhio umano: è qui che puoi ridurre la maggior parte del bitrate. Funziona quantificando i dati. Ciò manterrà le frequenze più percepibili e "getterà via" quelle che non possiamo vedere. Il fattore di quantizzazione è espresso come "QP" nella maggior parte dei codec ed è la manopola di controllo principale per la qualità.
Ora puoi anche andare avanti e prevedere i macroblocchi dai macroblocchi che sono stati precedentemente codificati nella stessa immagine. Questo si chiama predizione intra . Ad esempio, una parte di un muro grigio era già codificata nell'angolo in alto a sinistra della cornice, quindi possiamo usare di nuovo quel macroblocco nella stessa cornice, ad esempio per il macroblocco proprio accanto ad esso. Memorizzeremo semplicemente la differenza che aveva rispetto alla precedente e salveremo i dati. In questo modo, non è necessario codificare due macroblocchi molto simili tra loro.
Perché il bitrate cambia per le stesse dimensioni dell'immagine? Bene, alcune immagini sono più facili da codificare rispetto ad altre. Maggiore è l'attività spaziale, più devi effettivamente codificare. Le trame uniformi occupano meno bit di quelle dettagliate. Lo stesso vale per la previsione intra: una cornice di un muro grigio ti permetterà di usare un macroblocco per prevedere tutti gli altri, mentre una cornice di acqua che scorre potrebbe non funzionare così bene.
Ridondanza temporale
Ciò esiste perché un frame che segue un altro frame è probabilmente molto simile al suo predecessore. Principalmente, cambiano solo un pochino, e non avrebbe senso codificarlo completamente. Quello che fanno i codificatori video è semplicemente codificare la differenza tra due fotogrammi successivi, proprio come possono fare per i macroblocchi.
Prendendo un esempio dall'articolo di Wikipedia sulla compensazione del movimento , supponiamo che questa sia la cornice originale:
Quindi la differenza con il fotogramma successivo è proprio questa:
L'encoder ora memorizza solo le differenze effettive , non i valori pixel per pixel. Questo è il motivo per cui i bit utilizzati per ogni frame non sono sempre gli stessi. Questi frame "di differenza" dipendono da un frame completamente codificato, ed è per questo che esistono almeno due tipi di frame per i moderni codec:
- I-frame (noti anche come fotogrammi chiave): questi sono quelli completamente codificati
- P-frame : questi sono quelli che memorizzano la differenza
Occasionalmente devi inserire I-frame in un video. Il bitrate effettivo dipende anche dal numero di I-frame utilizzati. Inoltre, maggiore è la differenza di movimento tra due frame successivi, più l'encoder deve memorizzare. Un video di "niente" in movimento sarà più facile da codificare di un video sportivo e utilizzerà meno bit per fotogramma.