Los ingenieros de software siempre han desarrollado nuevas formas de encajar una gran cantidad de datos en un espacio reducido. Era cierto cuando nuestros discos duros eran pequeños y la llegada de Internet lo ha hecho más crítico. La compresión de archivos juega un papel importante en la conexión, permitiéndonos enviar menos datos a lo largo de la línea para que podamos tener descargas más rápidas y adaptar más conexiones a redes ocupadas.



¿Entonces, cómo funciona?

Responder a esa pregunta implicaría explicar algunas matemáticas muy complicadas, ciertamente más de las que podemos cubrir en este artículo, pero no es necesario comprender con precisión cómo funciona matemáticamente para comprender los conceptos básicos.

Las bibliotecas más populares para comprimir texto se basan en dos algoritmos de compresión, que utilizan ambos al mismo tiempo para lograr índices de compresión muy altos. Estos dos algoritmos son codificación LZ77 y Huffman. La codificación de Huffman es bastante complicada, y no entraremos en detalles sobre eso aquí. Principalmente, usa algunas matemáticas sofisticadas para asignar más cortos códigos binarios a letras individuales, reduciendo el tamaño de los archivos en el proceso. Si desea obtener más información al respecto, consulte Este artículo sobre cómo funciona el código, o esto explicador de Computerphile .

LZ77, por otro lado, es relativamente simple y es de lo que hablaremos aquí. Busca eliminar palabras duplicadas y reemplazarlas con una clave más pequeña que represente la palabra.

Tome este breve fragmento de texto, por ejemplo:

El algoritmo LZ77 miraría este texto, se daría cuenta de que repite howtogeek tres veces y lo cambiaría a esto:

Anuncio publicitario

Luego, cuando quiera volver a leer el texto, reemplazaría cada instancia de (h) con howtogeek, devolviéndonos a la frase original.

A esta compresión la llamamos sin pérdida: los datos que ingresa son los mismos que los datos que obtiene. No se pierde nada.

En realidad, LZ77 no usa una lista de claves, sino que reemplaza la segunda y tercera ocurrencia con un enlace en la memoria:

Así que ahora, cuando llegue a (h), mirará hacia atrás a howtogeek y lo leerá en su lugar.

Si está interesado en una explicación más detallada, este video de Computerphile es muy útil.

Ahora, este es un ejemplo idealizado. En realidad, la mayor parte del texto se comprime con claves tan pequeñas como unos pocos caracteres. Por ejemplo, la palabra the se comprimiría incluso cuando aparezca en palabras como allí, su y luego. Con texto repetido, puede obtener algunas relaciones de compresión locas. Tome este archivo de texto con la palabra howtogeek repetida 100 veces. El archivo de texto original tiene un tamaño de tres kilobytes. Sin embargo, cuando se comprime, solo ocupa 158 bytes. Eso es casi un 95% de compresión.

Anuncio publicitario

Ahora, obviamente, ese es un ejemplo bastante extremo, ya que tuvimos la misma palabra repetida una y otra vez. En la práctica general, probablemente obtendrá alrededor del 30-40% de compresión usando un formato de compresión como ZIP en un archivo que es principalmente texto.

Este algoritmo LZ77 se aplica a todos los datos binarios, por cierto, y no solo al texto, aunque el texto generalmente es más fácil de comprimir debido a la cantidad de palabras repetidas que usan la mayoría de los idiomas. Un idioma como el chino puede ser un poco más difícil de comprimir que el inglés, por ejemplo.

¿Cómo funciona la compresión de imágenes y videos?

La compresión de video y audio funciona de manera muy diferente. A diferencia del texto, donde puede tener una compresión sin pérdidas y no se pierden datos, con las imágenes tenemos lo que se llama Compresión con pérdida, donde sí se pierden algunos datos. Y cuanto más comprime, más datos pierde.

Esto es lo que lleva a esos archivos JPEG de aspecto horrible que la gente ha subido, compartido y capturado varias veces. Cada vez que la imagen se comprime, pierde algunos datos.

Aquí tienes un ejemplo. Esta es una captura de pantalla que tomé y que no se ha comprimido en absoluto.

Luego tomé esa captura de pantalla y la ejecuté en Photoshop varias veces, exportándola cada vez como un JPEG de baja calidad. Aquí está el resultado.

Se ve bastante mal, ¿verdad?

Anuncio publicitario

Bueno, este es solo el peor de los casos, exportando con una calidad JPEG del 0% cada vez. A modo de comparación, aquí hay un JPEG de 50% de calidad, que es casi indistinguible de la imagen PNG de origen a menos que lo amplíe y lo observe de cerca.

El PNG para esta imagen tenía un tamaño de 200 KB, pero este JPEG con una calidad del 50% solo tiene 28 KB.

Entonces, ¿cómo ahorra tanto espacio? Bueno, el algoritmo JPEG es una hazaña de ingeniería. La mayoría de las imágenes almacenan una lista de números, y cada número representa un solo píxel.

JPEG no hace nada de esto. En cambio, almacena imágenes usando algo llamado Transformada discreta del coseno , que es una colección de ondas sinusoidales sumadas en diferentes intensidades. Utiliza 64 ecuaciones diferentes, pero la mayoría de ellas no se utilizan. Esto es lo que hace el control deslizante de calidad para JPEG en Photoshop y otras aplicaciones de imágenes: elegir cuántas ecuaciones usar. Luego, las aplicaciones usan la codificación Huffman para reducir aún más el tamaño del archivo.

Esto le da a los archivos JPEG una relación de compresión increíblemente alta, que puede reducir un archivo de varios megabytes a un par de kilobytes, dependiendo de la calidad. Por supuesto, si lo usas demasiado, terminas con esto:

Esa imagen es horrible. Pero cantidades menores de compresión JPEG pueden tener un impacto significativo en el tamaño del archivo, y esto hace que JPEG sea muy útil para la compresión de imágenes en sitios web. La mayoría de las imágenes que ve en línea están comprimidas para ahorrar tiempo de descarga, especialmente para usuarios móviles con conexiones de datos deficientes. De hecho, todas las imágenes de Kyoceramita se han comprimido para que la página se cargue más rápido, y probablemente nunca te hayas dado cuenta.

Compresión de video

El video funciona de manera un poco diferente a las imágenes. Uno pensaría que simplemente comprimirían cada fotograma de video usando JPEG, y ciertamente lo hacen, pero hay un método mejor para el video.

Anuncio publicitario

Usamos algo llamado compresión entre cuadros, que calcula los cambios entre cada cuadro y solo los almacena. Entonces, por ejemplo, si tiene una toma relativamente fija que ocupa varios segundos en un video, se ahorra mucho espacio porque el algoritmo de compresión no necesita almacenar todo el material en la escena que no cambia. La compresión entre cuadros es la razón principal por la que tenemos televisión digital y video web. Sin él, los videos serían de cientos de gigabytes, más que el tamaño promedio del disco duro en 2005 cuando se lanzó YouTube.

Además, dado que la compresión entre cuadros funciona mejor con video principalmente estacionario, esta es la razón por la que confeti arruina la calidad del video .

Nota: GIF no hace esto, por lo que los GIF animados suelen ser muy cortos y pequeños, pero aún así tienen un tamaño de archivo bastante grande.

Otra cosa a tener en cuenta sobre el video es su tasa de bits, la cantidad de datos permitida en cada segundo. Si su tasa de bits es de 200 kb / s, por ejemplo, su video se verá bastante mal. La calidad aumenta a medida que aumenta la tasa de bits, pero después de un par de megabytes por segundo, obtienes rendimientos decrecientes.

Este es un fotograma ampliado tomado de un video de una medusa. El de la izquierda está a 3 Mb / s, y el de la derecha es de 100 Mb / s.

Anuncio publicitario

Un aumento de 30 veces en el tamaño del archivo, pero no mucho aumento en la calidad. En general, los videos de YouTube se ubican alrededor de 2-10Mb / s dependiendo de su conexión, ya que probablemente no se notaría nada más.

Esta demostración funciona mejor con video real, por lo que si desea comprobarlo usted mismo, puede descargar el mismo videos de prueba de tasa de bits utilizado aquí.

Compresión de audio

La compresión de audio funciona de manera muy similar a la compresión de texto e imágenes. Cuando JPEG elimina detalles de una imagen que no verá, la compresión de audio hace lo mismo con los sonidos. Es posible que no necesite escuchar el crujido de la púa de guitarra en la cuerda si la guitarra real es mucho, mucho más fuerte.

MP3 también usa bitrate, que van desde el extremo bajo de 48 y 96 kbps (el extremo bajo) hasta 128 y 240 kbps (bastante bueno) hasta 320 kbps (audio de alta gama), y probablemente solo escuche la diferencia con auriculares excepcionalmente buenos ( y orejas).

También hay códecs de compresión sin pérdidas para audio, el principal es FLAC, que utiliza la codificación LZ77 para ofrecer audio sin pérdidas. Algunas personas confían en la calidad de audio perfecta de FLAC, pero con el predominio de MP3, parece que la mayoría de las personas no pueden notar la diferencia o no les importa.

LEER SIGUIENTE