Compare dois arquivos de vídeo para descobrir qual é a melhor qualidade

30

Suponha que eu tenha o mesmo material de vídeo codificado em dois (ou mais) arquivos. Eu gostaria de executar algum utilitário sobre eles, que basicamente apontou qual arquivo é "melhor" em qualidade. "Groundly" significa que eu gostaria de obter um relatório que compare aspectos diferentes (por exemplo, resolução de vídeo, taxa de bits de vídeo, taxa de amostragem de áudio, taxa de bits de áudio etc.), um por um, e depois uma pontuação integral que é responsável por todos deles.

É sobre a funcionalidade, mas, para que esse utilitário seja realmente utilizável, ele deve ser de código aberto e de linha de comando.

pfalcon
fonte
Para começar a coletar algumas informações relacionadas (não é realmente uma solução de acordo com os critérios acima), há repo.or.cz/w/mplayer.git/blob/HEAD:/TOOLS/psnr-video.sh Veja aqui "como um profissional": compressão .ru / video / quality_measure /… . Mas não é de código aberto e compara "original" e "cópia", não apenas dois arquivos imparciais.
pfalcon
Pergunta relacionada: stackoverflow.com/questions/3518417/…
pfalcon

Respostas:

88

Trabalho na pesquisa de qualidade de vídeo e é difícil dar uma resposta simples para sua pergunta. O que você deseja é um programa que ofereça uma Pontuação Média de Opinião (MOS) de um vídeo, ou seja, um número entre 1 e 5, ou entre 0 e 100, que corresponda à qualidade percebida pelo ser humano.

Por que você não pode simplesmente comparar taxa de bits / resolução / etc.

Apenas comparar a resolução de vídeo não diz nada sobre a qualidade. De fato, pode ser completamente enganador. Um rasgo de filme de 1080p com tamanho de 700 MB pode parecer pior que um rasgo de 720p com 700 MB, porque, no primeiro, a taxa de bits é muito baixa, o que introduz todos os tipos de artefatos de compactação.

O mesmo vale para comparar a taxa de bits em tamanhos de quadro semelhantes, pois diferentes codificadores podem realmente oferecer melhor qualidade com menos taxa de bits ou vice-versa. Por exemplo, um rasgo de 720p de 700 MB produzido com o XviD parecerá pior do que um rasgo de 700 MB produzido com o x264, porque o último é muito mais eficiente.

Você também teria que definir como uma "pontuação integral" final (o MOS) é composta pelos fatores de qualidade individuais. Isso depende muito de várias coisas, incluindo, entre outras:

  • o tipo de vídeo que você está comparando (desenhos animados, filmes, notícias etc.)
  • seu comprimento
  • o público deles
  • seu tamanho de quadro original
  • sua "qualidade" original antes de serem codificadas

Nós nem estamos falando sobre como os humanos perceberiam os vídeos. Vamos supor que você tenha um amigo que esteja assistindo filmes porque ele ou ela desfruta de detalhes nítidos e alta resolução de movimento. Eles seriam muito mais críticos ao ver um vídeo de baixa qualidade do que um amigo que está apenas assistindo a filmes por seu conteúdo . Eles provavelmente não se importariam tanto com a qualidade, desde que o filme seja engraçado ou divertido.

Existem diferentes tipos de métricas de qualidade de vídeo!

Deixe-me dar uma lista do que eu acho que é mais comumente usado na avaliação básica da qualidade do vídeo hoje. Existem várias métricas de qualidade de vídeo, que podem ser classificadas de acordo com o tipo de informação usada para determinar a qualidade. Em princípio e de maneira muito simples, você distingue entre o seguinte:

  • Métricas sem referência - elas têm apenas um vídeo como entrada e produzem um índice de qualidade. No seu caso, você está procurando uma métrica sem referência , porque geralmente nem tem o vídeo original. Essa métrica captura um vídeo e gera um índice de qualidade. Aqui estão alguns exemplos de problemas que uma métrica de NR detectará (por exemplo, desfocagem).

  • Métricas de referência completa - Eles têm duas entradas, uma sendo a entrada original e a outra codificada. Por exemplo, você pode gravar um filme em DVD, criar dois rasgos e usar uma métrica de referência completa para estimar a perda de qualidade entre o filme em DVD original (ou seja, o vídeo MPEG-2 no disco) e os rasgos. Isso levará muito tempo para calcular, mas é mais preciso.

As métricas acima examinam a qualidade da codificação de vídeo, mas também existem métricas que incorporam problemas como tempos iniciais de carregamento e eventos de paralisação ao transmitir vídeo (por exemplo, ITU-T P.1203 ).

Que software posso usar?

Aqui está uma lista de ferramentas prontas para uso que você pode usar para testar algumas métricas (algumas são apenas para Windows):

Agora, quais métricas existem?

PSNR, PSNR-HVS e PSNR-HVS-M

Para iniciantes, o PSNR (Pico entre sinal e ruído) é um método muito simples de usar, mas um tanto ruim para avaliar a qualidade do vídeo. Porém, funciona relativamente bem na maioria das aplicações, mas não fornece uma boa estimativa de como os humanos perceberiam a qualidade.

O PSNR pode ser calculado quadro a quadro e, por exemplo, você faria a média do PSNR de uma sequência de vídeo inteira para obter a pontuação final. PSNR maior é melhor.

PSNR-HVS e PSNR-HVS-M são extensões do PSNR que tentam emular a percepção visual humana, portanto devem ser mais precisos. VQMT e MSU podem calcular PSNR, PSNR-HVS e PSNR-HVS-M entre dois vídeos.

SSIM, MS-SSIM

A similaridade estrutural (SSIM) é tão fácil de calcular quanto o PSNR e fornece resultados mais precisos, mas ainda assim, quadro a quadro. Você encontrará algumas implementações no link da Wikipedia ou pode usar o VQMT ou MSU . Essas ferramentas também incluem o MS-SSIM, que fornece resultados melhores (ou seja, mais representativos) do que o SSIM, além de alguns outros derivados.

Os resultados devem ser semelhantes ao PSNR. Novamente, você precisa comparar uma referência a um vídeo processado para que isso funcione, e os dois vídeos devem ter o mesmo tamanho.

VMAF

Avaliação de vários métodos de vídeo O Fusion da Netflix é um conjunto de ferramentas para calcular a qualidade do vídeo com base em algumas métricas existentes, que são fundidas pelos métodos de aprendizado de máquina em uma pontuação final entre 0 e 100. A Netflix explicou tudo aqui :

[VMAF] prevê qualidade subjetiva, combinando várias métricas de qualidade elementar. A lógica básica é que cada métrica elementar pode ter seus próprios pontos fortes e fracos em relação às características do conteúdo de origem, tipo de artefato e grau de distorção. Ao 'fundir' métricas elementares em uma métrica final usando um algoritmo de aprendizado de máquina - no nosso caso, um regressor SVM (Support Vector Machine) - que atribui pesos a cada métrica elementar, a métrica final pode preservar todos os pontos fortes das métricas individuais e forneça uma pontuação final mais precisa.

Você também pode usar ffmpegpara calcular as pontuações do VMAF .

VQM

A Métrica da qualidade do vídeo foi validada no VQEG ( Video Quality Experts Group ) e é um algoritmo de referência completa muito bom. Você pode baixar o VQM gratuitamente ou usar a implementação do MSU.

Ao se registrar e fazer o download, você deseja usar o Modelo Geral da NTIA ou o Modelo de Qualidade de Vídeo com Atraso de Quadro Variável .

Outras métricas

  • O PEVQ é uma métrica de referência completa padronizada sob ITU-T J.246. Destina-se a sinais multimídia, mas não a vídeos em HD.
  • O VQuad-HD é outra métrica de referência completa padronizada como ITU-T J.341. Como é mais recente, é mais adequado para vídeo HD.

Ambas são soluções comerciais e você não encontrará um software para fazer o download delas.

Existem também alguns padrões ITU em métricas sem referência, como ITU-T P.1201 e ITU-T P.1202 , que funcionam com parâmetros do fluxo de bits para fluxo de IPTV. O ITU-T P.1203 pode ser usado para casos de streaming adaptáveis.


Sumário

Se você apenas procura comparar critérios simples e objetivamente mensuráveis, como:

  • Tamanho do quadro
  • Taxa de bits
  • Quadros por segundo
  • Resolução de vídeo

… Uma simples chamada para ffmpeg -ideve fornecer todos os detalhes necessários no início. Também dê uma olhada na -vstatsopção. Você pode resumir isso em uma planilha. Observe que, quando você codifica vídeos, x264por exemplo, registra coisas como PSNR diretamente em um arquivo, se necessário, para que você possa usar esses valores posteriormente.

Quanto à forma de ponderar esses critérios, você provavelmente deve enfatizar a taxa de bits - mas apenas se souber que o codec é o mesmo. Você poderia dizer que, quando os dois vídeos usam x264, aquele com taxa de bits mais alta é melhor. Ainda mais geralmente, você deve escolher uma resolução mais baixa quando tiver dois vídeos com a mesma taxa de bits, pois a degradação causada pelo aumento de escala não é tão ruim quanto a degradação causada pela baixa taxa de bits.

Não é possível comparar codecs diferentes de acordo com a taxa de bits, a menos que você saiba mais sobre o conteúdo e as configurações de codificação individuais. A taxa de quadros também é uma coisa muito subjetiva e deve ser contabilizada em suas medições se estiver bem abaixo de 25 Hz.

Para resumir, enfatize fortemente a taxa de bits se é a única coisa que você tem. Não se esqueça de usar seus olhos também :)

slhck
fonte
Primeiro de tudo, como autor original da pergunta, desculpe-me por não comentar antes. O post é realmente incrível e muito apreciado. Infelizmente, não posso aceitá-lo como resposta à minha pergunta original. O motivo é: eu deliberadamente postei a pergunta aqui e não no StackOverflow, porque queria sugestões de ferramentas existentes e prontas para uso. Seja uma questão de como escrever essa ferramenta, sua resposta seria vencedora absoluta. Mas desculpe, eu não posso escrever tudo o que preciso partir do zero, então vamos utilizador em me fazendo perguntas e esperando respostas (talvez não ontem ou hoje, talvez no futuro ;-)
pfalcon
1
Ótima resposta informativa. Mesmo que não seja uma resposta direta, gosto de ver as pessoas se dedicarem a escrever esse material informativo. 1
SuperDuck 27/01
1

Não conheço nenhuma ferramenta que lhe dê uma recomendação ou pontuação final, mas usando o FFmpeg , você pode exibir todos os detalhes listados na pergunta.

Na linha de comando, o ffmpeg -i listará as informações do vídeo. A partir daí, você pode escrever um script para analisar as informações e ponderá-las conforme achar apropriado.

jhulst
fonte
Obrigado, sim, isso é o que eu estava fazendo para par de horas antes de decidir para perguntar se algum melhor, "mágica" ferramenta existe ;-)
pfalcon