Archive for the ‘Qualidade’ Tag

Analisando objetivamente a qualidade de um vídeo

Num post anterior aqui do blog, falei sobre alguns dos desafios de se produzir conteúdo em vídeo para distribuição na internet, principalmente no que se refere à relação bitrate vs. qualidade. Entretanto, não deixei claro como chegar em uma relação ideal, ou seja, o quanto podemos diminuir o bitrate de modo que a qualidade fique dentro de um limite aceitável. Na verdade, toda e qualquer análise de bitrate, codec, filtros, etc, consiste em uma avaliação direta de qualidade do vídeo. Mas como saber, de forma objetiva, se um vídeo tem ou não qualidade, já que cada pessoa tem uma percepção visual diferente?

Normalmente, quando deseja-se saber se um determinado vídeo está ou não bom, mostramos ele para outras pessoas para obter uma opinião comum. Porém, este processo não é confiável uma vez que pessoas diferentes podem ter percepções visuais e critérios de avaliação completamente diferentes. Apesar disso, este tipo de avaliação subjetiva também é importante e foi inclusive utilizado na definição do codec para o Padrão Brasileiro de TV Digital.

O método objetivo de avaliação de qualidade de vídeos e imagens mais aceito na comunidade científica hoje é o PSNR (Peak Signal Noise Ratio). Como o próprio nome já diz, o PSNR é uma relação entre o máximo possível de potência de um sinal, pela potência do ruído, quando comparamos um sinal antes e depois de um processo de degradação, sendo que a unidade utilizada para representa-lo é o dB (decibel). Aplicando este conceito em vídeos e imagens, temos que o PSNR é a relação entre a entrada e a saída de um processo de compressão com perdas, que avalia o quanto a compressão introduziu ruídos na imagem ou frame original. Matematicamente o PSNR de uma imagem de dimensão m por n é representado por:

PSNR

onde MAX é o valor máximo possível de um pixel e MSE (Mean Square Error):

MSE

Desta forma, quanto maior o valor do PSNR, maior é a relação entre a potência do sinal pela potência do ruído, o que significa melhor qualidade. Em termos gerais, valores de PSNR acima de 42dB correspondem à compressões que introduzem perdas imperceptíveis ao olho humano, o que significa uma qualidade excepcional. Podemos considerar que vídeos com PSNR acima de 36dB tem qualidade bastante aceitável, entre 30dB e 36dB teremos uma qualidade mediana e abaixo de 30dB a qualidade já é bem ruim. Abaixo temos uma comparação geral dos codecs mostrando a relação entre PSNR e bitrate:

PSNR vs. Bitrate

Para facilitar a análise do PSNR, dois dos principais softwares Open Source de codificação de vídeos (mencoder e ffmpeg) já possuem esta funcionalidade integrada, basta colocar a opção -psnr que os valores serão exibidos:

Input #0, flv, from 'xxxxxx.mp4':
  Duration: 00:01:58.7, start: 0.000000, bitrate: 128 kb/s
  Stream #0.0: Video: vp6f, yuv420p, 1280x720, 29.97 fps(r)
  Stream #0.1: Audio: mp3, 44100 Hz, stereo, 128 kb/s
Output #0, avi, to 'teste.avi':
  Stream #0.0: Video: mjpeg, yuvj420p, 1280x720, q=2-31, 0 kb/s, 29.97 fps(c)
  Stream #0.1: Audio: mp2, 44100 Hz, stereo, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 434 q=24.8 LPSNR=Y:34.90 U:42.65 V:43.10 *:36.33 size= 14868kB time=14.5 bitrate=8410.7kbits/s

Assim, utilizando o PSNR podemos ter um valor numérico que representa a qualidade geral do vídeo, o que ajuda bastante quando estamos lidando com ajustes finos em parâmetros de encoding.

Advertisements

O Dilema da Qualidade dos Vídeos

Freqüentemente, quando encontro alguém que eu não conheço, e digo que trabalho na área de mídia da Globo.com, a primeira pergunta que me fazem é se eu edito os vídeos e coloco eles na internet. Daí eu explico um pouco melhor, dizendo que não, que desenvolvo novos projetos e tecnologias para diferentes etapas do processo de captura/produção/publicação dos vídeos, daí então a segunda pergunta sempre é relacionada a qualidade dos vídeos. Ou perguntam porque não melhoramos a qualidade (essa pergunta já foi bem mais freqüente, e hoje caiu em desuso), ou dizem que demora para carregar, ou dizem que o vídeo é pequeno, ou trava toda hora, etc. De uns tempos pra cá, depois que passamos a utilizar Flash Vídeo, até que as perguntas estão mudando, porque ficou melhor pra muita gente! Em suma, é bem comum que as pessoas questionem a qualidade, até porque elas estão acostumadas com a excelente qualidade da TV Globo.

Outra observação importante que eu fiz é que a maioria das pessoas que fazem essas perguntas não entendem nada de internet, elas são apenas usuários leigos, sem formação ou vocação tecnológica. Então, resolvi escrever um post para tentar explicar de forma bem clara como as coisas funcionam, e como lidamos com o “cobertor curto” diariamente.

Para que um vídeo seja disponibilizado na internet, é necessário percorrer um caminho relativamente simples. Primeiramente, precisamos capturar o sinal de TV e digitalizar ele em arquivos de vídeo. Esse arquivo é o vídeo bruto, em excelente qualidade, que será editado (cortado, etc). Uma vez editado, o vídeo é preparado para distribuição na internet, ou seja, ele é transcodificado. Neste momento, transformamos o vídeo editado de altíssima qualidade para um formato padrão de distribuição na internet. Atualmente utilizamos Flash Vídeo, porém, poderíamos utilizar Windows Media, Real, etc. Uma vez transformado, o vídeo é colocado nos servidores para que os usuários possam acessar.

De todo esse processo, basicamente o que define a qualidade final do vídeo é a transcodificação. Nela não só alteramos o formato (chamado encapsulamento), como também aplicamos uma compressão, e é aí que mora o problema. Se pensarmos um pouco e fizermos uma conta simples, iremos ver que a quantidade de informação de um vídeo de alta qualidade é imensa, e seria impossível transmitir este vídeo na internet. Vejamos: supondo um vídeo com 320 pixels de largura por 240 de altura, teremos por frame de vídeo 76800 pixels; considerando que o vídeo tem 30 frames por segundo; e considerando uma resolução de 8 bits por pixel; desconsiderando o áudio, as cores, etc, teremos:

76800 x 30 x 8 = 18432000 bits/segundo de vídeo = 17.57Mbps

Agora eu pergunto quantas pessoas no Brasil tem 17.57Mbps de conexão de internet?!

A solução para este problema consiste em comprimir a informação do vídeo, retirando as redundâncias existentes nele. Quanto mais redundância tirarmos, menos bits por segundo serão necessários, mais fácil fica ver o vídeo, menos qualidade teremos na imagem. Esta é a relação da discordia. Além disso, existem diferentes forma de retirar a redundância de um vídeo, umas mais e outras menos eficientes. Estas diferentes maneiras são os famigerados codecs (VP6, H264, WMV9, MPEG2, MJPEG, DV, etc ), que implementam os algoritmos de compressão dos vídeos. Atualmente o algoritmo mais eficiente de compressão é o H264, que é inclusive utilizado nas transmissão de TV Digital no Brasil.

Assim, dada que a taxa média de velocidade do usuário brasileiro fica em torno de 300kbps (o que é ridículo!!!), é necessário comprimir bastante, muito mesmo, o que acaba degradando a qualidade. Por outro lado, para ter uma qualidade mais razoável, precisamos de algo em torno de 600kbps, 800kbps, porém iremos onerar a velocidade com que o usuário carrega o vídeo. Conciliar velocidade e qualidade é uma tarefa difícil, mas não impossível. Podemos utilizar uma série de filtros e algoritmos de processamento de imagens para maximizar a percepção de qualidade, e, a medida que a tecnologia avança, podemos melhorar os próprios algoritmos de compressão do vídeo. De qualquer forma, não existe milagre! Maior qualidade, maior tamanho, etc, ocasiona em mais bitrate.

O que eu posso dizer a respeito dos vídeos da Globo.com, é que temos um processo de avaliação de qualidade bastante rígido e objetivo, dentro das limitações de bitrate que definimos. E podem esperar, porque ainda teremos muitas novidades este ano!