¿Qué es la codificación entrópica?

La codificación entrópica es una compresión sin pérdida que usa, en promedio, menos bits para los símbolos más probables y más bits para los menos probables. La codificación Huffman y la codificación aritmética son métodos habituales.

Cómo funciona la codificación entrópica

Un códec primero convierte la información de origen en símbolos cuya distribución estadística se puede modelar; después, una etapa de codificación entrópica representa las secuencias probables de forma compacta. El decodificador debe conocer o reconstruir las mismas tablas de códigos, los mismos contextos y el mismo estado para revertir esa representación. Esta etapa se diferencia de la cuantización: puede reducir la cantidad de bytes, pero no descarta intencionalmente valores de símbolos. Suele aparecer cerca del final de un codificador de imágenes, audio o video y cerca del inicio de su decodificador.

Datos clave

  1. Un código Huffman asigna a cada símbolo codificado su propia palabra de código de longitud variable, por lo que no puede usar menos de un bit por símbolo, por predecible que sea. La codificación aritmética no tiene ese límite inferior. La especificación VP8, cuyo codificador booleano es una variante de un codificador aritmético, desarrolla un ejemplo en el que un resultado tiene una probabilidad de 1/1024 y la tasa mínima posible es de aproximadamente una centésima de bit por valor. La ganancia es mayor con datos muy sesgados y desaparece cuando ambos resultados son igualmente probables; en ese caso, el mismo texto establece un límite inferior de un bit.
  2. La codificación entrópica puede rehacerse sin alterar la calidad. La herramienta jpegtran de libjpeg-turbo reorganiza los coeficientes DCT comprimidos de un JPEG sin decodificar por completo la imagen, y su documentación describe como operaciones sin pérdida los cambios a parámetros entrópicos optimizados, barridos progresivos o codificación aritmética. Para cjpeg, la misma documentación indica que -optimize suele reducir ligeramente el tamaño del archivo sin afectar la calidad de la imagen ni la velocidad de descompresión, mientras que el codificador se ejecuta algo más lento y necesita mucha más memoria; jpegtran acepta la misma opción. La herramienta jpegtran no puede cambiar el ajuste de calidad y puede eliminar metadatos: su opción predeterminada, -copy comments, conserva los marcadores de comentarios y descarta otros metadatos, así que pasa -copy all para conservar los datos Exif, un perfil ICC y otros marcadores adicionales.
  3. Un codificador entrópico más eficiente solo ayuda si todos los decodificadores de destino lo implementan. En el estándar JPEG, el proceso secuencial básico usa codificación Huffman, y la codificación aritmética solo está disponible en los procesos extendidos y sin pérdida. La documentación de libjpeg-turbo advierte que JPEG con codificación aritmética no está ampliamente implementado y que muchos decodificadores no pueden leer esos archivos en absoluto. Comprueba los decodificadores que debes admitir antes de habilitar un modo de codificación entrópica distinto del predeterminado.
  4. El decodificador debe reproducir exactamente las tablas y el estado de probabilidad del codificador, por lo que el daño se extiende más allá de los bytes corruptos. La documentación de libjpeg-turbo indica que, sin marcadores de reinicio, el daño en un JPEG suele arruinar la imagen desde el error hasta el final; con ellos, suele limitarse a la porción que llega hasta el siguiente marcador, y los marcadores ocupan espacio adicional. JPEG restablece su predicción DC y sus estimaciones de probabilidad aritmética en cada intervalo de reinicio, lo que permite reanudar la decodificación en ese punto. La herramienta jpegtran no emite marcadores de reinicio de forma predeterminada, incluso cuando el archivo de origen los tiene, y no conserva el intervalo del original: -restart N inserta nuevos marcadores cada N filas de MCU, así que elige N explícitamente para mantener esa protección. Su documentación incluye -restart entre las opciones que establecen la representación codificada y describe sus transformaciones como operaciones sin pérdida, por lo que un archivo sin daños se decodifica en la misma imagen con o sin marcadores.

Cuándo es relevante la codificación entrópica

Los desarrolladores de códecs aplican codificación entrópica a coeficientes cuantizados, residuos de predicción y otros valores estructurados, y su eficiencia depende de cuánto se ajuste el modelo de probabilidad a los datos. Los demás la encuentran como un ajuste del codificador: las herramientas JPEG ofrecen tablas Huffman optimizadas o codificación aritmética, y los codificadores H.264 ofrecen CAVLC o CABAC. La etapa en sí no descarta nada, por lo que, con una cuantización determinada, estos ajustes equilibran el tamaño del archivo, el costo de encoding y el soporte de los decodificadores.

Fuentes

Convierte tus conocimientos sobre multimedia en un pipeline funcional

Conecta las subidas, el procesamiento, la IA, el almacenamiento y la entrega mediante una sola API declarativa, mientras nos encargamos por ti del stack de encoding, el escalado y los cambios constantes de formatos.

Prueba Transloadit gratis