¿Por qué los algoritmos de compresión de datos sin pérdida no funcionan bien en archivos de video?

Respuesta corta: falta de cuantización.


Respuesta larga: lea a continuación.

Antes de proporcionar la respuesta a su pregunta exacta, echemos un vistazo al diagrama de bloques del codificador y decodificador del reconocido estándar de compresión de video H.264.


Si miramos los dos diagramas de bloques con cuidado, podemos notar que todas las operaciones en la parte del codificador, excepto QUANTIZATION, tienen una operación inversa correspondiente en el decodificador.

La cuantización redondea los valores de píxeles al nivel predefinido más cercano. Consideremos un ejemplo de juguete aquí:

Considere el conjunto de números {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Considere dos niveles de cuantización: 1 y 10
Entonces la salida sería la siguiente: {1, 1, 1, 1, 1, 10, 10, 10, 10, 10}

Si tenemos que realizar la compresión del flujo de salida, es fácil comprimirlo si lo denotamos como PASOS DE 1 Y PASOS DE 10. Esta representación requiere menos número de bits en comparación con la compresión de la secuencia original. Por lo tanto, al aplicar la operación de cuantización, podemos reducir el número de bits necesarios para representar el flujo de números. Entonces, la cuantización es precisamente el punto donde ocurre la compresión.

Esta misma lógica también se aplica durante la compresión de video. Los coeficientes DCT de los bloques se cuantifican para que obtengamos un flujo continuo de números antes de la compresión.

Sin embargo, la cuantización es un proceso irreversible. Perdemos los números originales una vez que los cuantificamos. No hay forma de recuperarlos. Este es precisamente el punto donde se produce la pérdida de información.

Ahora, volviendo a la pregunta, cualquier algoritmo que realice una compresión sin pérdida de videos no puede (y no lo hará) cuantificar flujos de bits. Pero como se mencionó anteriormente, la compresión eficiente se logra solo cuando cuantificamos los coeficientes DCT. Esta es la razón por la cual los algoritmos de compresión sin pérdida no funcionan bien en archivos de video.

Respuesta no técnica: porque la versión comprimida normalmente será un poco más larga que la versión sin comprimir (porque necesita un encabezado que diga “el siguiente archivo no está comprimido, solo almacenado”). Es por eso que un programa que sí lo hace, por ejemplo, la compresión zip utiliza “almacenamiento” como uno de sus algoritmos. Si el archivo no se puede acortar sin perder datos (que es lo que Suraj está haciendo), simplemente se almacena sin comprimir.