Todo sobre Apple, Android, Juegos Apks y Sitios de Peliculas

¿Cómo funciona la compresión de archivos?

Los ingenieros de software siempre han desarrollado nuevas formas de encajar una gran cantidad de datos en un espacio pequeño. Era cierto cuando nuestros discos duros eran pequeños y la llegada de Internet simplemente lo hizo más crítico. La compresión de archivos juega un papel importante a la hora de conectarnos, ya que nos permite enviar menos datos en el futuro para que podamos tener descargas más rápidas y conectar más conexiones en 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 funcionan matemáticamente para comprender los conceptos básicos.

Las bibliotecas más populares para comprimir texto se basan en dos algoritmos de compresión y utilizan ambos al mismo tiempo para lograr índices de compresión muy altos. Estos dos algoritmos son “LZ77” y “codificación Huffman”. La codificación de Huffman es bastante complicada y no entraremos en detalles sobre eso aquí. Principalmente, utiliza algunas matemáticas sofisticadas para asignar códigos binarios más cortos a letras individuales, reduciendo el tamaño de los archivos en el proceso. Si quieres saber más al respecto, consulta 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.

Tomemos como ejemplo este breve texto:

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

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

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

En realidad, LZ77 no utiliza 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), volverá a mirar “howtogeek” y lo leerá en su lugar.

Si está interesado en una explicación más detallada, este vídeo de Computerphile es bastante útil.

Ahora bien, 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 “el” se comprimiría incluso cuando aparezca en palabras como “allí”, “su” y “entonces”. Con texto repetido, puedes obtener índices de compresión increíbles. 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, sólo ocupa 158 bytes. Eso es casi un 95% de compresión.

Ahora, obviamente, ese es un ejemplo bastante extremo ya que la misma palabra se repitió una y otra vez. En la práctica general, probablemente obtendrás entre un 30 y un 40 % de compresión utilizando un formato de compresión como ZIP en un archivo que es principalmente texto.

Por cierto, este algoritmo LZ77 se aplica a todos los datos binarios, 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 vídeos?

La compresión de vídeo y audio funciona de forma muy diferente. A diferencia del texto, donde se puede realizar 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”, en la que se pierden algunos datos. Y cuanto más comprimes, más datos pierdes.

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.

He aquí un ejemplo. Esta es una captura de pantalla que tomé y que no ha sido comprimida en absoluto.

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

Tiene muy mala pinta ¿verdad?

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

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

Entonces, ¿cómo se 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 de coseno discreta, 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 utilizan 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 que tendría varios megabytes a un par de kilobytes, dependiendo de la calidad. Por supuesto, si lo usas demasiado, terminarás con esto:

Esa imagen es horrible. Pero pequeñas cantidades 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 ves en línea están comprimidas para ahorrar tiempo de descarga, especialmente para usuarios de dispositivos móviles con malas conexiones de datos. De hecho, todas las imágenes de How-To Geek se han comprimido para acelerar la carga de la página y probablemente nunca lo hayas notado.

Compresión de video

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

Usamos algo llamado “compresión entre cuadros”, que calcula los cambios entre cada cuadro y solo los almacena. Entonces, por ejemplo, si tienes 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 de la escena que no cambia. La compresión entre cuadros es la razón principal por la que tenemos televisión digital y vídeo web. Sin él, los vídeos ocuparían 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 vídeo principalmente estacionario, esta es la razón El confeti arruina la calidad del vídeo..

Nota: GIF no hace esto, razón por la cual los GIF animados suelen ser muy cortos y pequeños, pero aun así tienen un tamaño de archivo bastante grande.

Otra cosa a tener en cuenta sobre el vídeo es su tasa de bits: la cantidad de datos permitida en cada segundo. Si tu tasa de bits es de 200 kb/s, por ejemplo, tu vídeo 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, los rendimientos son decrecientes.

Este es un fotograma ampliado tomado de un vídeo de una medusa. El de la izquierda es de 3Mb/s y el de la derecha es de 100Mb/s.

Un aumento de 30 veces en el tamaño del archivo, pero no mucho aumento en la calidad. Generalmente, los vídeos de YouTube se sitúan entre 2 y 10 Mb/s dependiendo de su conexión, ya que probablemente no se notará nada más.

Esta demostración funciona mejor con vídeo real, así que si quieres comprobarlo por ti mismo, puedes descargarlo. vídeos 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. Mientras que JPEG elimina detalles de una imagen que no verás, la compresión de audio hace lo mismo con los sonidos. Es posible que no necesites escuchar el crujido de la púa de la guitarra en la cuerda si la guitarra real suena mucho, mucho más fuerte.

MP3 también utiliza una tasa de bits, que va desde el extremo inferior de 48 y 96 kbps (el extremo inferior) hasta 128 y 240 kbps (bastante bueno) y 320 kbps (audio de gama alta), y probablemente solo escuchará la diferencia con auriculares excepcionalmente buenos ( y orejas).

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