
Lendo sobre qualidade de vídeo descobri que depende da resolução, quadros por segundo e taxa de bits, que decide o tamanho do vídeo.
Minha pergunta é como a taxa de bits é calculada e como ela pode diferir.
Digamos que um vídeo tenha resolução de 360x240. São necessários 86.400 pixels por quadro. A taxa de quadros é de 30 Hz. Portanto, o vídeo ocupa 86.400 × 30 = 2.592.000 pixels por segundo.
Então, digamos que 1 pixel equivale a 3 bytes (24 bits) de dados: temos vídeo de 2592000 × 24 bits por segundo (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?
Responder1
O que você calculou é a taxa de bits de um vídeo bruto e não compactado. Normalmente você não os encontrará, exceto em pesquisas ou outras aplicações especializadas. Até mesmo as emissoras usam vídeo compactado, embora com uma taxa de bits muito mais alta do que o 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ê compacta, menos bits são necessários por quadro. Além disso, quanto mais você comprime, 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 mais baixa, embora tenham a mesma resolução e taxa de quadros.
Para entender por que isso acontece, você precisa estar ciente dos dois princípios principais que a compactação de vídeo usa. Estes são chamados de "redundância espacial" e "redundância temporal".
Redundância espacial
Existe redundância espacial em imagens que mostram conteúdo natural. Esta é a razãoJPEGfunciona muito bem – comprime os dados da imagem porque blocos de pixels podem ser codificados juntos. São 8 × 8 pixels, por exemplo. Estes são chamados de "macroblocos".
Os codecs de vídeo modernos fazem o mesmo: basicamente usam algoritmos semelhantes ao JPEG para compactar um quadro, bloco por bloco. Então 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 — é aqui que você pode reduzir a maior parte da taxa de bits. Funciona porquantizaçãoos dados. Isto irá reter frequências que são mais perceptíveis e “jogar fora” aquelas que não podemos ver. O fator de quantização é expresso como “QP” na maioria dos codecs e é o principal botão de controle de qualidade.
Agora você pode até ir em frente eprevermacroblocos de macroblocos que foram previamente codificados na mesma imagem. Isso é chamadoprevisã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 logo ao lado dele. Vamos apenas armazenar a diferença que tinha em relação ao anterior e salvar os dados. Dessa forma, não precisamos codificar dois macroblocos muito semelhantes entre si.
Por que a taxa de bits muda 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ê realmente precisa codificar. Texturas suaves ocupam menos bits do que texturas detalhadas. O mesmo vale para a predição intra: uma moldura de uma parede cinza permitirá que você use um macrobloco para prever todos os outros, enquanto uma moldura de água corrente pode não funcionar tão bem.
Redundância temporal
Isto existe porque um quadro que segue outro quadro é provavelmente muito semelhante ao seu antecessor. Principalmente, apenas um pouquinho muda e não faria sentido codificá-lo totalmente. O que os codificadores de vídeo fazem é apenas codificar odiferençaentre dois quadros subsequentes, assim como podem fazer com macroblocos.
Tomando um exemplo do artigo da Wikipedia sobrecompensação de movimento, digamos que este seja o seu quadro original:
Então a diferença para o próximo quadro é apenas esta:
O codificador agora armazena apenas orealdiferenças, não os valores pixel por pixel. É por isso que os bits usados para cada quadro não são sempre os mesmos. Esses quadros "diferentes" dependem de um quadro totalmente codificado, e é por isso que existem pelo menos dois tipos de quadros para codecs modernos:
- Quadros I(também conhecidos como quadros-chave) — estes são os totalmente codificados
- Quadros P- estes são os que apenas armazenam a diferença
Ocasionalmente, você precisa inserir quadros I em um vídeo. A taxa de bits real depende também do número de quadros I usados. Além disso, quanto maior a diferença de movimento houver entre dois quadros subsequentes, mais o codificador terá para 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.
Responder2
Acredito que sua matemática esteja correta, mas há um pouco mais; compressão é o elo que falta aqui.
Você calculou a taxa de bits não compactada e descobriu o motivo da existência da compactação. As taxas de bits tornam-se impossivelmente grandes com vídeo não compactado. Assim, eles compactam o vídeo na fonte e o descompactam no receptor, e então 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, a questão é quanta compactação pode ser tolerada - geralmente não é sem perdas, então você está perdendo informações, mas eles tentam torná-las inteligentes o suficiente para perder os dados menos importantes que não serão tão perceptíveis. Geralmente é bastante fácil até que haja muito movimento, então fica mais complicado.
Editar: esqueci de adicionar, mas a parte que implementa o método de compactação é o codec; Percebi que você usou isso como uma tag em sua postagem.