Los ingenieros de software siempre han desarrollado nuevas formas de ajustar una gran cantidad de datos en un espacio pequeño. Fue cierto cuando nuestros discos duros eran pequeños y el advenimiento de Internet lo ha vuelto más crítico. La compresión de archivos juega un papel importante en la conexión con nosotros. Ya que nos permite enviar menos datos en la línea para que podamos tener descargas más rápidas y ajustar 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 lo que podemos abarcar en este artículo. Pero no es necesario que comprendas exactamente cómo funciona matemáticamente para entender los conceptos básicos.
Las bibliotecas más populares para comprimir texto se basan en dos algoritmos de compresión. Estos usan ambos al mismo tiempo para lograr relaciones de compresión muy altas. Estos dos algoritmos son «LZ77» y «Codificación de 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.
Este algoritmo LZ77 se aplica a todos los datos binarios, por cierto, y no solo a texto. Aunque el texto en general 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 podría ser un poco más difícil de comprimir que el inglés, por ejemplo.
¿Cómo funciona la compresión de imagen y video?
La compresión de video y audio funciona de manera muy diferente. A diferencia del texto en el que puedes tener una compresión sin pérdida, y no se pierden datos. Con las imágenes tenemos lo que se llama «Compresión con pérdida» en el que sí se pierden algunos datos. Y cuanto más comprimes, más datos perderás.
Esto es lo que lleva a esos archivos JPEG de aspecto horrible que las personas han subido, compartido y capturado en pantalla varias veces. Cada vez que la imagen se comprime, pierde algunos datos.
Aquí hay un ejemplo. Esta es una captura de pantalla que tomé que no se ha comprimido en absoluto.
Luego tomé esa captura de pantalla y la ejecuté en Photoshop varias veces. Cada vez que la exportaba como un JPEG de baja calidad. Aquí está el resultado.
Se ve bastante mal, ¿verdad?
Bueno, este es solo el peor de los casos. Exportando a 0% de calidad JPEG cada vez. A modo de comparación, aquí hay un JPEG de 50% de calidad. Que casi no se puede distinguir de la imagen PNG de origen a menos que lo explote y lo mire de cerca.
El PNG para esta imagen tenía un tamaño de 200 KB. Pero este JPEG de 50% de calidad es de 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 su lugar, almacena imágenes utilizando algo llamado Transformada de coseno discreto. Que es una colección de ondas sinusoidales que se agregan a diferentes intensidades. Utiliza 64 ecuaciones diferentes. Pero la mayoría de ellas no se usan. Esto es lo que hace el control deslizante de calidad para JPEG en Photoshop y otras aplicaciones de imagen. Elige cuántas ecuaciones usar. Las aplicaciones luego usan la codificación Huffman para reducir aún más el tamaño del archivo.
Esto le da a los JPEG una relación de compresión increíblemente alta. Lo que puede reducir un archivo que sería 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 pequeñas cantidades de compresión JPEG pueden tener un impacto significativo en el tamaño del archivo. 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.
Compresión de video
El video funciona un poco diferente de las imágenes. Pensarías que simplemente comprimirían cada fotograma de video usando JPEG, y ciertamente lo hacen, pero hay un mejor método 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 toma varios segundos en un video, se ahorra mucho espacio porque el algoritmo de compresión no necesita almacenar todas las cosas en la escena que no cambian. La compresión entre cuadros es la razón principal por la que tenemos TV digital y video web. Sin él, los videos serí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 el video principalmente estacionario, esta es la razón por la cual el confeti arruina la calidad del video.
Nota: GIF no hace esto, por lo que los GIF animados son a menudo muy cortos y pequeños, pero aún 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 permitidos en cada segundo. Si tu tasa de bits es de 200 kb / s, por ejemplo, tu 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, se obtienen rendimientos decrecientes.
Este es un cuadro ampliado tomado de un video de una medusa. El de la izquierda está a 3Mb / s, y el de la derecha es de 100Mb / s.
Un aumento de 30x en el tamaño del archivo, pero no mucho en la calidad. En general, los videos de YouTube se sitúan en torno a 2-10Mb / s según su conexión, ya que probablemente no se notará nada más.
Esta demostración funciona mejor con el video real, por lo que si deseas comprobarlo tú mismo, puedes descargar los mismos videos de prueba de tasa de bits utilizados aquí.
Compresion de audio
La compresión de audio funciona de manera muy similar a la compresión de texto e imagen. Cuando JPEG elimina los 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 chirrido de la selección de guitarra en la cuerda si la guitarra real es mucho más alta.
MP3 también utiliza la tasa de bits, que va desde el extremo inferior de 48 y 96 kbps (el bajo) hasta los 128 y 240 kbps (bastante bueno) hasta los 320 kbps (audio de alta gama), y es probable que solo escuches la diferencia con auriculares excepcionalmente buenos.
También hay códecs de compresión sin pérdida para audio, el principal es FLAC, que utiliza la codificación LZ77 para entregar audio sin pérdida. Algunas personas confían en la calidad de audio perfecta de FLAC, pero con la prevalencia de MP3, parece que la mayoría de la gente no puede decir o no importa la diferencia.
¿Tienes alguna pregunta o problema relacionado con el tema del artículo? Queremos ayudarte.
Deja un comentario con tu problema o pregunta. Leemos y respondemos todos los comentarios, aunque a veces podamos tardar un poco debido al volumen que recibimos. Además, si tu consulta inspira la escritura de un artículo, te notificaremos por email cuando lo publiquemos.
*Moderamos los comentarios para evitar spam.
¡Gracias por enriquecer nuestra comunidad con tu participación!