In che modo il bitrate differisce per la stessa risoluzione e framerate?


15

Leggendo sulla qualità del video ho scoperto che dipende dalla risoluzione, dai fotogrammi al secondo e dal bitrate, che decide la dimensione del video.

La mia domanda è come viene calcolato il bitrate e come può differire.

Supponiamo che un video abbia una risoluzione di 360x240. Sono necessari 86400 pixel per frame. La frequenza dei fotogrammi è di 30 Hz. Quindi il video richiede 86400 × 30 = 2592000 pixel al secondo.

Supponiamo quindi che 1 pixel sia 3 byte (24 bit) di dati: abbiamo video 2592000 × 24 bit al secondo (62208000 bit), ovvero 62208 kbit (non suona bene, forse qualche problema nel mio calcolo).

Ma come può differire e come fa la differenza in termini di qualità?


Se il video fosse una sequenza di immagini bitmap. La tua matematica è già disattivata per i file di immagine png / jpg.
Daniel Beck

Le due risposte esistenti non enfatizzano l'attributo saliente sulla compressione video: la maggior parte (se non tutti) tutti i codec video utilizzano una compressione con perdita . Cioè, alcune informazioni sull'immagine vengono eliminate quando il video non elaborato viene compresso e codificato. La quantità o il grado di informazioni / dettagli dell'immagine scartati e persi è determinato da un fattore di qualità . Per quanto riguarda la compressione audio, esistono tecniche di compressione sia lossy che lossless.
segatura

@sawdust: Non lo fanno? Ho pensato che il mio terzo paragrafo lo rendesse abbastanza chiaro. Comunque, dare troppe informazioni a volte non è così buono; Credo nel dare abbastanza per consentire all'asker di saperne di più, se lo si desidera. Altrimenti, potrei dire che il tuo post non enfatizza il motivo per cui qualcuno dovrebbe scegliere un compressore piuttosto che un altro, o perché ci sono così tanti metodi diversi, ecc. Ecc.
Marty Fried,

@sawdust Hai ragione, questo è stato in qualche modo sepolto nella parte JPEG. Ho aggiunto qualche dettaglio in più.
Slhck,

Risposte:


21

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.


+1: questo è ciò che intendevo, ma il mio algoritmo di compressione ha lasciato un po 'fuori. :)
Marty Fried,

+1 Questo è tutto ciò di cui avevo bisogno. Soprattutto la compensazione del movimento. Grazie
vincent mathew

6

Credo che la tua matematica sia effettivamente corretta, ma c'è qualcosa in più; la compressione è il link mancante qui.

Hai calcolato il bit rate non compresso e hai scoperto il motivo per cui esiste la compressione. I bit rate diventano incredibilmente grandi con video non compressi. Quindi, comprimono il video alla fonte e lo decomprimono sul ricevitore, quindi la velocità in bit diventa gestibile. Hai solo bisogno di un decompressore abbastanza veloce, che può essere hardware o software.

Quindi, il problema diventa la quantità di compressione che può essere tollerata: di solito non è senza perdita di dati, quindi stai perdendo informazioni, ma cercano di renderlo abbastanza intelligente da perdere i dati meno importanti che non saranno così evidenti. Di solito è abbastanza facile fino a quando non c'è molto movimento, quindi diventa più complicato.

Modifica: ho dimenticato di aggiungere, ma le parti che implementano il metodo di compressione sono il codec; Ho notato che l'hai usato come tag nel tuo post.


3
Inoltre, la compressione video di solito non è basata su pixel, ma funziona su blocchi di pixel, i cosiddetti macroblocchi .
Slhck,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.