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.

11 comments so far

  1. Renata on

    Oi Rafael, você poderia informar a fonte onde você encontrou essas informações?
    Obrigada!

  2. Rafael Pereira on

    Renata,

    na verdade não existe uma fonte única de informações. Tudo que eu escrevo tem um pouco de pesquisa e experiência pessoal. Neste caso específico, existem bons livros que tratam sobre a qualidade de vídeos:

    – Modern Image Quality Assessment (Synthesis Lectures on Image, Video, & Multimedia Processing), de Zhou Wang e Al Bovik

    – Digital Video Image Quality and Perceptual Coding (Signal Processing and Communications), de H.R. Wu, K.R. Rao

    Os dois são muito avançados, sendo que o segundo é bem completo e interessante.

    Com relação a imagem, ela linka para o site http://www.normalesup.org/~george/comp/video_quality/, que apresenta diversas comparações de qualidade de vídeo utilizando o mencoder. Um outro site interessante é o http://compression.ru/video/codec_comparison/index_en.html que é de um grupo russo que estuda compressão de vídeo.

    No mais, se você quiser uma referência mais básica e fácil de entender, recomendo ler a página de qualidade de vídeo e psnr da wikipedia: http://en.wikipedia.org/wiki/Video_quality, http://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio.

    []’s
    Rafael

  3. Diogo on

    Olá Rafael…

    De qual referência você tirou as fórmulas de PSNR e a do MSE?

  4. Diogo on

    Outra dúvida Rafael, ” 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. ” essa é uma conclusão sua ou tem alguma referência? Obrigado.

    • Rafael Pereira on

      Na verdade não existe uma convenção que diga que sempre que o PSNR for acima ou abaixo de determinado valor o vídeo é melhor ou pior. Estou até escrevendo um novo post sobre isso, onde detalho porque o PSNR não é 100% confiável. Assim, os valores que coloquei neste post são relativos a minha experiência trabalhando e pesquisando compressão de vídeo. O livro Digital Video Image Quality and Perceptual Coding (Signal Processing and Communications), de H.R. Wu, K.R. Rao, se eu não me engano, faz referência a estes valores. Porém, eles são bastante aceitos no meio científico. Se você procurar no google vai achar diversas citações. No caso, a maioria considera 35dB como sendo o limiar de qualidade, porém, nos vídeos que trabalho, normalmente temos resultados bem melhores se considerarmos 36dB.

  5. jack on

    salve!
    fiquei imprecionado com a sua explicação,
    parabéns.
    pode me ajudar com essa com câmera:
    Resolução máxima de vídeo 640 x 480
    Maximum Frame Rate 30fps
    Formatos de vídeo MPEG-4
    como é a qualidade deste tipo de vídeo?
    muito obrigado

    • Rafael Pereira on

      Jack,

      na verdade não tenho como te dizer se a qualidade vai ser boa ou ruim… existem uma série de fatores de influenciam na qualidade, sendo que você me passou informações sobre apenas alguns deles. O mais determinante, normalmente, é o average bitrate de saída do compressor, sendo que, para estas dimensões e este frame rate, deveria ser maior que 500kbps para termos um vídeo com uma qualidade legal. Não adianta nada ter um vídeo 640×480, com 30fps, mas com bitrate de 100kbps, por exemplo, pq ele vai ficar muito ruim.

      No final das contas, a qualidade depende de uma série de aspectos, sendo os principais: avg bitrate, fps, resolução, codec.

      []’s

  6. Claudio on

    Rafael,
    gostei do que li até agora, mas especificamente o meu caso é o seguinte, desde já agradeço se puder me auxiliar. Eu edito vídeos captados por uma camera panasonic de alta definição 1440 x 1080, no Adobe Premiere CS4. Depois tenho que subir estes vídeos para meu site (mid.tv.br), naturalmente tenho que baixar a qualidade para que os internautas com velocidade menor possam assisti-los sob demanda. Meu servidor vive brigando comigo, pois eu sempre quero enviar os videos com Kbps maior (para melhorar a qualidade), mas ele insiste que não deve passar de 141 Bbps, e os vídeos obrigatoriamente tem que ser FLV. Uso o conversor Format Fectory, pois o que eu usava, Any video converter não dá opção de wide screen em FLV. Mas eu não estou satisfeito com a qualidade da imagem e não entendo quase nada de video streaming, apenas de edição. Tenho usado a seguinte configuração: tamanho do vídeo: 320×180 (a pedido do meu fornecedor de steaming) taxa de bit: 256 (por minha conta e risco), fps 29,97, aspecto: 16:9, audio: taxa de amostragem: HZ 22050, taxa de bit: 24 bb/s, canal de audio:1, audio stream index: padrão.
    Minha pergunta é: existe alguma maneira de tornar a qualidade do vídeo melhor, mas ao mesmo tempo permitir que internautas com velocidade de 1 mega (que é basicamente o que eu entendo ser a maioria) possam assistir aos videos sem travar, ou esperar muito o carregamento?
    OBS: a duração dos vídeos varia, tenho vídeos de 4 minutos até 25 minutos.
    desde já obrigado.
    Claudio

    • Rafael Pereira on

      Claudio,

      então, um dos principais fatores que influenciam na qualidade do vídeo é o codec que está sendo utilizado. No caso do container FLV, existem basicamente duas opções: Sorenson e VP6. O VP6 apresenta uma qualidade um pouco maior que o Sorenson, mas é bem menos flexível. Você pode tentar usar o VP6, já que não está alterando parâmetros especificos do codificador. Além disso, de acordo com o conteúdo do vídeo (se não for esportes, por exemplo), você pode tentar reduzir o frame rate, talvez para algo em torno de 20fps, já que seu bitrate é bem baixo. Como você disse que seu público são pessoas com conectividade de 1Mbps, então você poderia aumentar o bitrate para algo em torno de 500kbps… o vídeo continuaria carregando de forma rápida. Você também pode tentar utilizar o ffmpeg ou o mencoder para gerar seus vídeos, pois eles permitem uma flexibilidade enorme de parâmetros, o que possibilita uma otimização do processo de compressão.

      Qualquer dúvida, é só falar.

  7. Claudio on

    Errata: onde se lê: taxa de bit: 24 bb/s na verdade é: 24 Kb/s)


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: