Compare dos archivos de video para descubrir cuál tiene la mejor calidad

30

Supongamos que tengo el mismo material de video codificado en dos (o más) archivos. Me gustaría ejecutar alguna utilidad en ellos que indicara cuál archivo es "mejor" en calidad. "Groundly" significa que me gustaría obtener un informe que compare diferentes aspectos (por ejemplo, resolución de video, tasa de bits de video, tasa de muestreo de audio, tasa de bits de audio, etc., etc.) uno por uno, y luego una puntuación integral que explique todos de ellos.

Se trata de la funcionalidad, pero para que esa utilidad sea realmente utilizable, debe ser de código abierto y línea de comandos.

pfalcon
fuente
Para comenzar a recopilar información relacionada (no es realmente una solución según los criterios anteriores), hay repo.or.cz/w/mplayer.git/blob/HEAD:/TOOLS/psnr-video.sh Esto es "como un profesional": compresión .ru / video / quality_measure /… . Pero no es de código abierto, y compara "original" y "copia", no solo 2 archivos imparciales.
pfalcon
Pregunta relacionada: stackoverflow.com/questions/3518417/…
pfalcon el

Respuestas:

88

Trabajo en investigación de calidad de video, y es difícil dar una respuesta simple a su pregunta. Lo que desea es un programa que le proporcione un puntaje de opinión promedio (MOS) de un video, es decir, un número entre 1 y 5, o entre 0 y 100, que corresponde a la calidad percibida por un ser humano.

¿Por qué no puedes simplemente comparar bitrate / resolución / etc.

Solo comparar la resolución de video no dirá nada sobre la calidad. De hecho, puede ser completamente engañoso. Una copia de película de 1080p con un tamaño de 700 MB podría verse peor que una copia de 720p con 700 MB, porque para la primera, la tasa de bits es demasiado baja, lo que introduce todo tipo de artefactos de compresión.

Lo mismo ocurre con la comparación de la tasa de bits en tamaños de cuadro similares, ya que diferentes codificadores pueden ofrecer una mejor calidad a una tasa de bits menor, o viceversa. Por ejemplo, una copia de 720p 700MB producida con XviD se verá peor que una copia de 700MB producida con x264, porque esta última es mucho más eficiente.

También tendría que definir cómo se compone un "puntaje integral" final (el MOS) de los factores de calidad individuales. Esto depende en gran medida de varias cosas, que incluyen, entre otras:

  • El tipo de videos que está comparando (dibujos animados, películas, noticias, etc.)
  • su longitud
  • su audiencia
  • su tamaño de marco original
  • su "calidad" original antes de ser codificados

Ni siquiera estamos hablando de cómo los humanos percibirían los videos. Supongamos que tiene un amigo que está viendo películas porque disfruta de detalles nítidos y alta resolución de movimiento. Serían mucho más críticos al ver una copia de baja calidad que un amigo que solo está viendo películas por su contenido . Probablemente no les importe tanto la calidad, siempre y cuando la película sea divertida o entretenida.

¡Hay diferentes tipos de métricas de calidad de video!

Permítame darle una lista de lo que pienso que se usa más comúnmente para la evaluación básica de la calidad de video hoy. Existen varias métricas de calidad de video, que se pueden clasificar de acuerdo con el tipo de información que se utiliza para determinar la calidad. En principio y muy simple, distingue entre lo siguiente:

  • Métricas sin referencia : solo tienen un video como entrada y generan un puntaje de calidad. En su caso, está buscando una métrica sin referencia , porque a menudo ni siquiera tiene el video original. Dicha métrica tomará un video y generará un puntaje de calidad. Estos son algunos ejemplos de problemas que detectará una métrica NR (por ejemplo, desenfoque).

  • Métricas de referencia completa : tienen dos entradas, una es el video de entrada original y la otra es el video codificado. Por ejemplo, podría tomar una película en DVD, luego crear dos extracciones a partir de ella y usar una métrica de referencia completa para estimar la pérdida de calidad entre la película original en DVD (es decir, el video MPEG-2 en el disco) y sus extracciones. Tomará mucho tiempo calcular, pero es más preciso.

Las métricas anteriores analizan la calidad de la codificación de video, pero también hay métricas que incorporan problemas como los tiempos de carga iniciales y los eventos de bloqueo al transmitir video (por ejemplo, ITU-T P.1203 ).

¿Qué software puedo usar?

Aquí hay una lista de herramientas listas para usar que puede usar para probar algunas métricas (algunas son solo para Windows):

¿Ahora qué métricas hay?

PSNR, PSNR-HVS y PSNR-HVS-M

Para empezar, la PSNR (relación señal / ruido pico) es un método muy simple de usar pero algo pobre para evaluar la calidad del video. Sin embargo, funciona relativamente bien para la mayoría de las aplicaciones, pero no ofrece una buena estimación de cómo los humanos percibirían la calidad.

El PSNR se puede calcular cuadro por cuadro, y luego, por ejemplo, promediaría el PSNR de una secuencia de video completa para obtener la puntuación final. Mayor PSNR es mejor.

PSNR-HVS y PSNR-HVS-M son extensiones de PSNR que intentan emular la percepción visual humana, por lo que deberían ser más precisas. VQMT y MSU pueden calcular PSNR, PSNR-HVS y PSNR-HVS-M entre dos videos.

SSIM, MS-SSIM

La similitud estructural (SSIM) es tan fácil de calcular como PSNR, y ofrece resultados más precisos, pero aún cuadro por cuadro. Encontrará algunas implementaciones en el enlace de Wikipedia, o puede usar VQMT o MSU . Estas herramientas también incluyen MS-SSIM, que ofrece mejores resultados (es decir, más representativos) que SSIM, así como algunos otros derivados.

Los resultados deberían ser similares a los del PSNR. Nuevamente, debe comparar una referencia a un video procesado para que esto funcione, y ambos videos deben ser del mismo tamaño.

VMAF

Video Multi-Method Assessment Fusion de Netflix es un conjunto de herramientas para calcular la calidad de video en función de algunas métricas existentes, que luego se fusionan mediante métodos de aprendizaje automático en una puntuación final entre 0 y 100. Netflix ha explicado todo aquí :

[VMAF] predice la calidad subjetiva combinando múltiples métricas de calidad elemental. La razón básica es que cada métrica elemental puede tener sus propias fortalezas y debilidades con respecto a las características del contenido de origen, el tipo de artefactos y el grado de distorsión. Al 'fusionar' métricas elementales en una métrica final utilizando un algoritmo de aprendizaje automático, en nuestro caso, un regresor de máquina de vectores de soporte (SVM), que asigna pesos a cada métrica elemental, la métrica final podría preservar todas las fortalezas de las métricas individuales , y entregar una puntuación final más precisa.

También puede usar ffmpegpara calcular los puntajes de VMAF .

VQM

La métrica de calidad de video se validó en el Grupo de expertos en calidad de video (VQEG) y es un muy buen algoritmo de referencia completa. Puede descargar VQM de forma gratuita o usar la implementación desde MSU.

Cuando se registra y descarga, desea utilizar el Modelo general de NTIA o el Modelo de calidad de video con retardo de fotogramas variable .

Otras métricas

  • PEVQ es una métrica de referencia completa estandarizada bajo ITU-T J.246. Apunta a señales multimedia, pero no a video HD.
  • VQuad-HD es otra métrica de referencia completa estandarizada como ITU-T J.341. Como es más nuevo, es más adecuado para video HD.

Ambas son soluciones comerciales y no encontrarás un software para descargar.

También hay algunas normas de la UIT sobre métricas sin referencia, como ITU-T P.1201 y ITU-T P.1202 , que funcionan con parámetros del flujo de bits para la transmisión de IPTV. ITU-T P.1203 se puede utilizar para casos de transmisión adaptativa.


Resumen

Si solo busca comparar criterios simples medibles objetivamente como:

  • Tamaño del marco
  • Tasa de bits
  • Cuadros por segundo
  • Resolución de video

... una simple llamada a ffmpeg -idebe darle todos los detalles que necesita al principio. También eche un vistazo a la -vstatsopción. Luego podría resumir esto en una hoja de cálculo. Tenga en cuenta que cuando codifica videos, x264por ejemplo, registrará cosas como PSNR directamente en un archivo si es necesario, para que pueda usar estos valores más adelante.

En cuanto a cómo sopesar estos criterios, probablemente debería enfatizar la velocidad de bits, pero solo si sabe que el códec es el mismo. En general, se podría decir que cuando ambos videos usan x264, el que tiene una tasa de bits más alta es mejor. Aún más en general, debe elegir una resolución más baja cuando tiene dos videos con la misma tasa de bits, ya que la degradación debida al aumento de escala no es tan mala como la degradación debido a la baja tasa de bits.

No es posible comparar diferentes códecs según su velocidad de bits a menos que sepa más sobre el contenido y la configuración de codificación individual. La velocidad de fotogramas también es algo muy subjetivo y debe tenerse en cuenta en sus mediciones si está muy por debajo de 25 Hz.

Para resumir, enfatice mucho la tasa de bits si es lo único que tiene. No olvides usar tus ojos también :)

slhck
fuente
En primer lugar, como autor original de la pregunta, lamento no haber comentado antes. La publicación es realmente impresionante y bien apreciada. Desafortunadamente, no puedo aceptarlo como la respuesta a mi pregunta original. La razón es: publiqué deliberadamente la pregunta aquí y no en StackOverflow, porque quería una sugerencia de una herramienta existente y lista para usar. Ya se trate de cómo escribir dicha herramienta, su respuesta sería el ganador absoluto. Pero lo siento, no puedo escribir todo lo que necesito desde cero, así que permita que el usuario ingrese preguntas y espere respuestas (tal vez no ayer o hoy, tal vez en el futuro ;-)
pfalcon
1
Gran respuesta informativa. Aunque no es una respuesta directa, me gusta ver que la gente se tome su tiempo para escribir ese material informativo. +1
SuperDuck
1

No conozco ninguna herramienta que le dé una recomendación final o puntaje, pero usando FFmpeg , puede generar todos los detalles que enumeró en la pregunta.

En la línea de comando, ffmpeg -i enumerará la información del video. A partir de ahí, puede escribir un script para analizar la información y ponderarla según lo considere apropiado.

jhulst
fuente
Gracias, sí, eso es lo que estaba haciendo durante un par de horas antes de decidir preguntar si existe
alguna