Como a taxa de bits difere para a mesma resolução e taxa de quadros?

10

Ao ler sobre a qualidade do vídeo, descobri que isso depende da resolução, dos quadros por segundo e da taxa de bits, que decide o tamanho do vídeo.

Minha pergunta é como a taxa de bits é calculada e como ela pode ser diferente.

Digamos que um vídeo tenha uma resolução de 360x240. Leva 86400 pixels por quadro. A taxa de quadros é de 30 Hz. Então o vídeo leva 86400 × 30 = 2592000 pixels por segundo.

Então, digamos que 1 pixel é 3 Bytes (24 Bits) de dados: temos 2592000 × 24 bits por segundo de vídeo (62208000 bits), ou seja 62208 kBits (isso não parece certo, talvez algum problema no meu cálculo) .

Mas como isso pode diferir e como isso faz diferença na qualidade?

    
por vincent mathew 06.05.2012 / 20:05

2 respostas

14

O que você calculou é a taxa de bits de um vídeo não compactado não processado. Você normalmente não os encontrará, exceto em pesquisas ou outros aplicativos especializados. Até mesmo as emissoras usam vídeo compactado, embora com uma taxa de bits muito maior do que o seu vídeo típico do YouTube.

Portanto, a qualidade do vídeo tem muito a ver com a forma como o vídeo foi compactado. Quanto mais você compactar, menos bits serão necessários por quadro. Além disso, quanto mais você comprimir, pior a qualidade. Agora, alguns vídeos são muito mais fáceis de compactar do que outros - em essência, é por isso que eles têm uma taxa de bits menor, apesar de terem a mesma resolução e framerate.

Para entender por que isso acontece, você precisa estar ciente dos dois principais usos de compactação de vídeo dos princípios. Estes são chamados de "redundância espacial" e "temporal".

Redundância espacial

Existe redundância espacial em imagens que mostram conteúdo natural. Esta é a razão pela qual o JPEG funciona tão bem - ele comprime os dados da imagem porque os blocos de pixels podem ser codificados juntos. Estes são 8 × 8 pixels, por exemplo. Estes são chamados de "macroblocos".

Os codecs de vídeo modernos fazem o mesmo: eles basicamente usam algoritmos semelhantes ao JPEG para compactar um quadro, bloco por bloco. Portanto, você não armazena mais bits por pixel, mas bits por macrobloco, porque você "resume" os pixels em grupos maiores. Ao resumi-los, o algoritmo também descartará informações que não são visíveis ao olho humano - é onde você pode reduzir a maior parte da taxa de bits. Ele funciona quantizando os dados. Isso reterá freqüências que são mais perceptíveis e "jogam fora" aquelas que não podemos ver. O fator de quantização é expresso como "QP" na maioria dos codecs, e é o principal controle de qualidade.

Agora você pode ir em frente e prever macroblocos de macroblocos previamente codificados na mesma imagem. Isso é chamado de previsão intra . Por exemplo, uma parte de uma parede cinza já estava codificada no canto superior esquerdo do quadro, então podemos usar esse macrobloco no mesmo quadro novamente, por exemplo, para o macrobloco bem próximo a ele. Vamos apenas armazenar a diferença que tinha para o anterior e salvar os dados. Dessa forma, não precisamos codificar dois macroblocos muito semelhantes entre si.

Por que a taxa de bits é alterada para o mesmo tamanho de imagem? Bem, algumas imagens são mais fáceis de codificar do que outras. Quanto maior a atividade espacial, mais você terá que codificar. Texturas suaves ocupam menos bits do que as detalhadas. O mesmo vale para a previsão interna: um quadro de uma parede cinza permitirá que você use um macrobloco para prever todos os outros, enquanto um quadro de água corrente pode não funcionar tão bem.

Redundância temporal

Isso existe porque um quadro após outro quadro é provavelmente muito semelhante ao seu predecessor. Principalmente, apenas um pouquinho muda, e não faria sentido codificá-lo completamente. O que os codificadores de vídeo fazem é apenas codificar a diferença entre dois quadros subseqüentes, assim como eles podem fazer para macroblocos.

Tomando um exemplo do artigo da Wikipedia sobre compensação por movimento , digamos que este seja o seu quadro original:

Emseguida,adiferençaparaopróximoquadroéexatamenteisso:

O codificador agora armazena apenas as diferenças reais , não os valores pixel a pixel. É por isso que os bits usados em cada quadro não são os mesmos todas as vezes. Esses quadros de "diferença" dependem de um quadro totalmente codificado, e é por isso que existem pelo menos dois tipos de quadros para codecs modernos:

  • I-frames (keyframes aka) - estes são os totalmente codificados
  • P-frames - estes são os únicos que apenas armazenam a diferença

Você ocasionalmente precisa inserir quadros em um vídeo. A taxa de bits real também depende do número de quadros em I usados. Além disso, quanto mais diferença de movimento houver entre dois quadros subseqüentes, mais o codificador precisará armazenar. Um vídeo de "nada" em movimento será mais fácil de codificar do que um vídeo de esportes e usará menos bits por quadro.

    
por 06.05.2012 / 20:29
5

Eu acredito que sua matemática está correta, mas há um pouco mais nisso; compressão é o elo perdido aqui.

Você calculou a taxa de bits descompactada e descobriu o motivo pelo qual a compactação existe. As taxas de bits se tornam incrivelmente grandes com o vídeo não compactado. Assim, comprimem o vídeo na origem e o descompactam no receptor e, em seguida, a taxa de bits se torna gerenciável. Você só precisa de um descompressor rápido o suficiente, que pode ser hardware ou software.

Então, o problema é quanto a compactação pode ser tolerada - geralmente não é sem perdas, então você está perdendo informações, mas elas tentam torná-lo inteligente o suficiente para perder os dados menos importantes que não serão tão notáveis. Geralmente é bastante fácil até que haja muito movimento, então fica mais complicado.

Editar: Esqueceu de adicionar, mas as partes que implementam o método de compactação são o codec; Percebi que você usou isso como uma tag em sua postagem.

    
por 06.05.2012 / 20:13