¿Qué es la compresión con pérdida?

La compresión con pérdida reduce el tamaño de los archivos al descartar de forma irreversible información considerada menos importante para la calidad percibida. La descompresión produce una aproximación en lugar de los datos originales exactos.

Muestras de origen
Archivo más pequeño que se decodifica como una aproximación
La cuantización descarta detalles que la decodificación no puede restaurar.

Cómo funciona la compresión con pérdida

Un codificador con pérdida suele transformar las muestras en una representación que permite aislar los detalles perceptualmente menos importantes, cuantiza esos detalles con poca precisión o los elimina, y codifica entrópicamente lo que queda. La etapa de cuantización descarta una precisión que la decodificación no puede restaurar. JPEG ilustra este patrón: sus procesos basados en DCT cuantizan los coeficientes de frecuencia mediante una tabla de cuantización, las tablas de ejemplo de la norma se basan en umbrales psicovisuales y los codificadores también suelen almacenar el color con menor resolución que el brillo. Los codificadores de video añaden un control de tasa que decide cuánta cuantización recibe cada parte de la imagen; x265, por ejemplo, aumenta o disminuye la cuantización por bloque según la complejidad del contenido de origen. Como estas decisiones varían entre códecs, codificadores y ajustes preestablecidos, los resultados con una misma tasa de bits nominal pueden verse o sonar diferentes, así que evalúa los ajustes con tu propio contenido. Los pipelines normalmente conservan la fuente de mayor calidad disponible y crean a partir de ella cada versión derivada para la entrega, en lugar de partir de otra versión derivada.

Datos clave

  1. Decodificar y volver a realizar el encoding con un codificador con pérdida cuantiza de nuevo los datos y, por lo general, añade pérdida; reutilizar el ajuste de calidad anterior no puede recuperar lo que ya se descartó. Algunas operaciones evitan esto al trabajar directamente sobre los datos codificados: jpegtran de libjpeg-turbo, por ejemplo, gira o voltea un JPEG reorganizando sus coeficientes sin decodificar por completo la imagen, de modo que los datos de la imagen se transforman sin degradación, algo que su manual contrasta con decodificar y volver a realizar el encoding. El manual también indica los límites: jpegtran no puede cambiar la calidad de la imagen, los giros y volteos dejan sin transformar los bloques parciales de los bordes cuando la dimensión de la que depende la transformación (el ancho para -flip horizontal o -rotate 270, la altura para -flip vertical o -rotate 90, cualquiera de las dos para -rotate 180) no es múltiplo del tamaño del bloque iMCU (normalmente 8 o 16 píxeles), y eliminar esos bloques con -trim no es estrictamente una operación sin pérdida.
  2. Los valores numéricos de calidad son específicos de cada codificador y no son intercambiables. cjpeg -quality va de 0 (peor) a 100 (mejor) y escala las tablas de cuantización, mientras que el factor de tasa --crf de x265 funciona al revés: un valor más alto significa más cuantización y menor calidad, y el tamaño del archivo depende entonces de la complejidad del contenido de origen. Compara los codificadores inspeccionando o midiendo sus resultados, en lugar de igualar los valores numéricos.
  3. El valor máximo de una escala de calidad no implica necesariamente ausencia de pérdida. En cjpeg, la calidad 100 solo minimiza la pérdida en la etapa de cuantización; el submuestreo y el error de redondeo siguen perdiendo información. La reconstrucción exacta necesita un modo o formato sin pérdida y, como algunos formatos, como WebP, ofrecen ambos modos, la extensión del archivo no indica cuál se utilizó.
  4. Cambiar el contenedor no tiene por qué reducir la calidad. La copia de flujos de FFmpeg (-c copy) transfiere los paquetes sin decodificación ni encoding, por lo que no hay pérdida de calidad, pero puede fallar cuando el contenedor de destino necesita información que falta en el origen, y no puede aplicar filtros. Cambiar el tamaño es un filtro, por lo que un nuevo tamaño de video implica transcodificar: decodificar y volver a realizar el encoding, lo que, según la documentación de FFmpeg, degrada la calidad en la mayoría de los casos.

Cuándo es importante la compresión con pérdida

Usa encoding con pérdida cuando el ahorro de ancho de banda o almacenamiento justifique cierta pérdida de fidelidad de imagen, audio o video. Los ajustes excesivos o la recompresión repetida pueden crear artefactos visibles o audibles.

Cómo ayuda Transloadit con la compresión con pérdida

Transloadit ofrece la opción de compresión con pérdida o sin pérdida en sus Robots de imágenes. /image/optimize usa únicamente optimizadores PNG sin pérdida de forma predeterminada; configurar lossy: true permite que el compresor con pérdida pngquant también compita, y gana el resultado más pequeño. /image/resize tiene un parámetro quality que controla la compresión de la salida JPG y PNG.

El parámetro lossy afecta únicamente a la optimización PNG. La documentación advierte que pngquant reduce los archivos PNG a una paleta de 256 colores, lo que puede provocar cambios de color perceptibles en imágenes con paletas de colores variadas, degradados sutiles o colores específicos de una marca.

Explora los formatos de archivo y las capacidades de compresión de Transloadit

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