video compression video-encoding h.264

video - ¿Proporción de compresión sugerida con H.264?



compression video-encoding (5)

Nota bene: me doy cuenta de que esta es una pregunta inmensamente complicada con alrededor de un millón de niveles de matices que estoy tratando de reducir a un solo número ...

Estoy a punto de emprender un gran proyecto de codificación de video usando la codificación H.264. Estamos tratando de crear múltiples perfiles de velocidad de bits para acomodar la transmisión a través de conexiones de internet, procesadores, dispositivos, etc.

En términos generales, ¿qué tipo de relación de compresión debería esperar ver (mientras me mantengo dentro de un nivel razonable de calidad)?

Por ejemplo, un archivo de video de 640x360 (16: 9) píxeles a 24 fotogramas por segundo y color de 16 bits debería generar un archivo descomprimido de aproximadamente 33 MB / s.

Me han dicho que, para ese archivo, 500 Kbits / segundo (o 62 KB / s) no es una tasa de bits de video irrazonable. Eso parece una locura: más de 530: 1 de compresión? Eso es 99.8% de compresión. ¿Mis cálculos están equivocados?

Solo busco una guía exterior aproximada para la calidad, como "más de 500x de compresión es una locura" o "menos de 400x es un desperdicio de ancho de banda". He buscado en todas partes, y nada me da ningún tipo de compresión esperada ...


En un documento bastante interesante llamado H.264 Primer , se da una fórmula simple como una pista para calcular la velocidad de bits del archivo de salida "ideal", en función de las características del video:

[ancho de imagen] x [altura de imagen] x [velocidad de fotogramas] x [rango de movimiento] x 0.07 = [velocidad de bits deseada]

donde el ancho y la altura de la imagen se expresan en píxeles, y el rango de movimiento es un número entero entre 1 y 4, 1 es de bajo movimiento, 2 es de movimiento medio y 4 es de alto movimiento (el movimiento es la cantidad de datos de imagen que cambia entre marcos, vea el documento vinculado para más información).

Entonces, por ejemplo, si tomamos un video de 1280x720 a 24 FPS, con movimiento medio (película con movimientos lentos de la cámara, no muchos cambios de escena ...), la tasa de bits ideal esperada sería:

1280 x 720 x 24 x 2 x 0.07 = 3.096.576 bps => Aproximadamente 3000 kbps

Esto es puramente una pista, y en mi opinión, la única forma de encontrar con precisión la tasa de bits ideal es probarla por error :)


No olvide la reproducción normal. MPEG solo usará YUV 4: 2: 0. En una profundidad de color de 8 bits, cada píxel solo vale 16 bits (o 64 bits cada 4 píxeles). ¡Por favor, solo el archivo RAW de la cámara usará una profundidad de 16 bits, y debe valer millones de dólares! El DVR de película medio alto solo puede proporcionar 12-14bit !! Y nadie usará H.264 para almacenar RAW. H.264 está diseñado para el producto final.

En 640x360 / 24p YUV4: 2: 0 la velocidad de bits valdrá:

640x360x24x(8+4+4)/8 = 10.5MB/s

Para 500 Kbps, la compresión será de solo 172: 1. Es normal

Para la extensión de YUV4: 2: 0, lea:
http://en.wikipedia.org/wiki/Chroma_subsampling


Solo compartiendo mi conocimiento sobre la codificación con el entorno H264

En cuanto a la relación 450-512 kbits / segundo, es mejor si usa H264 con High 5.0 o High 7.0. Bueno, puedo sugerirle que para obtener una buena proporción en equilibrio con la mejor calidad, la clave que realmente le importa es jugar con el tamaño de la Resolución. Resultado de la resolución de video = 3/4 * Resolución de video nativo / crudo

H264 tiende a perder detalles más si no comprime el marco en una resolución un poco más pequeña.


Variará dramáticamente según el contenido de los videos fuente. Voy a llegar a eso en un momento.

640x360 no es tan grande. 512kbps es muy razonable y podría decirse que es estándar. Tal vez 768kbps si realmente está interesado en la calidad.

¿Cómo es esto posible? Una respuesta simplificada: hay un par de técnicas y hechos sobre la compresión de video que lo hacen posible:

  1. No todas las estructuras de datos de marcos de video en un H.264 común (u otros CODEC) son imágenes completas . En cambio, hay dos tipos a los que se hace referencia coloquialmente como
    1. Marcos clave : una representación completa de la imagen de video completa
    2. Intra-frames : una descripción de los cambios en el cuadro anterior. Generalmente, estos marcos constituyen la gran mayoría (80% -99%) de fotogramas en un video.
  2. H.264 es " con pérdida " , al igual que muchos otros CODEC. No reproducen un duplicado exacto píxel por píxel, fotograma a fotograma, del video fuente original. Ejemplo : bloques con pérdida: si todos los píxeles menos un píxel en un área son del mismo color, el CODEC ''pierde'' el píxel. Por lo tanto, en lugar de tener que almacenar información sobre cada píxel en un marco, el CODEC simplemente dice "x1, y1 a x2, y2 son todos de color x" . Muy eficiente.

Todo es mucho más complejo que eso, con trillones de diferentes enfoques, técnicas y algoritmos dentro de CODEC específicos y entre CODEC para que esto suceda.

Por lo tanto, volvamos al comentario "Variará considerablemente según el contenido de los videos de origen": la relación de compresión que verá y la calidad resultante dependerán significativamente de:

  • el contenido del video
  • su tolerancia para los artefactos (bloques, pérdida de color, pérdida de definición)
  • los parámetros CODEC que estableces y cómo los configuras

Ejemplo : Un video de una puerta en una habitación (como una cámara de seguridad) con un cuadro clave cada diez minutos tendrá una relación de compresión increíblemente alta. Mis cálculos de la parte posterior de la servilleta ponen ese escenario en una compresión de 15,000: 1.

Dado que está comenzando un proyecto de codificación de video grande, le recomendaría un par de cosas para determinar cuál será su relación de compresión:

  • tome una muestra de los videos fuente que va a codificar. 100 o más son estadísticamente relevantes.
  • codificarlos a varias velocidades de bits, con varios parámetros, para determinar qué características resultantes satisfacen sus necesidades

Cambiar los parámetros del codificador para hacer que los videos sean más pequeños también puede tener otros impactos:

  • mayores requisitos de CPU de reproducción
  • jugador CODEC expectativas. No todos los reproductores con codificación H.264 pueden ser reproducidos por todos los jugadores
  • tiempos de codificación más largos
  • varios degradantes de calidad

Es un tema muy complicado. Buena suerte. Mi experiencia de "pulgar al viento" prueba que estarás más que satisfecho con 512-768kbps para tu proyecto.