La guía definitiva de formatos de compresión
En la informática, existe un mundo apasionante que con el tiempo se ha convertido en algo muy común y corriente en el día a día: la compresión de archivos.
Debido a las altas tasas de compresión de los formatos de hoy en día, la rápida velocidad de los compresores y la comodidad del almacenamiento de varios archivos y carpetas en un sólo archivo, se utiliza frecuentemente para organizar información y a la vez ahorrar espacio en disco.
A grandes rasgos, el mundo de la compresión de datos se suele dividir en dos grandes grupos:
- La compresión con pérdidas (lossy): Aquella que se efectua eliminando información prescindible. Muchos formatos ya aplican compresión. Por ejemplo, en los archivos JPG se reduce la calidad y nitidez de la fotografía a cambio de conseguir un tamaño de archivo más pequeño. Por su parte, en los archivos MP3 se reduce el tamaño del archivo a cambio de eliminar frecuencias que el oído humano no escucha.
- La compresión sin pérdidas (lossless): Aquella que se efectúa creando una réplica, donde la información repetida estará organizada de forma que, posteriormente, se podrá volver a recrear el archivo original a partir de ella. Un claro ejemplo es la optimización de archivos PNG o los formatos de compresión de los que hablaremos en este artículo.
Puedes ver un ejemplo claro de las diferencias entre formatos sin pérdidas y formatos con pérdidas en Formatos de imagen: Guía de optimización, basado en los formatos gráficos (JPG, PNG, GIF, WEBP, APNG, etc...)
Algoritmos de compresión
Inicialmente, cada formato de compresión estaba diseñado para seguir un determinado algoritmo de compresión. Actualmente, la mayoría de los formatos pueden utilizar diferentes algoritmos. Por ejemplo, varios programas permiten comprimir en formato ZIP pudiendo elegir algoritmo LZMA, deflate o bzip2.
Esto también explica por qué algunos compresores comprimen (en formato ZIP, por ejemplo) y los archivos no son reconocidos por otros compresores.
Cada unidad de información representada con una figura geométrica.
En la imagen anterior, se puede ver el funcionamiento de uno de los ejemplos más básicos de compresión, el algoritmo run-length encoding, utilizado en viejos formatos gráficos como PCX.
Factores importantes
Cuando hablamos de un buen compresor de archivos, debemos basarnos en 3 factores principales (no sólo en el tamaño):
- Tasa o ratio de compresión: Obviamente, cuando más pequeño sea el archivo comprimido, mejor es el compresor.
- Velocidad de compresión: Cuanto menos tarde en realizar la compresión, mejor. También es importante la velocidad de descompresión, que se suele tener en cuenta a parte.
- Memoria RAM utilizada: Otro factor importante es la cantidad de memoria que necesitamos para realizar la descompresión (ver punto 4).
Al final del artículo incluyo varias tablas comparativas para echar un vistazo a los compresores que muestran mejor rendimiento teniendo en cuenta estos factores.
La mayoría de los usuarios puede que sólo conozca los formatos más comunes (ZIP, RAR, ACE...), pero existen muchísimos formatos de compresión destinados al almacenamiento de archivos. Vamos a separarlos en grupos...
1. Los clásicos (las caras conocidas)
Probablemente, el formato más conocido sea el ZIP, debido a que, a pesar de ya estar bastante extendido, Microsoft lo incorporó de serie en Windows XP como Carpeta comprimida.
Formato .ZIP
El formato ZIP tiene una triste historia. Originalmente, este formato fue desarrollado por Phil Katz, mediante su famosa utilidad para MSDOS PKZip. Sin embargo, el origen de este formato siempre estuvo marcado por la controversia. Antes de PKZip, pasó por otros nombres como PKPAK y PKARC, este último en referencia a ARC, otro conocido compresor de los años 80, de Thom Henderson.
Thom demandó a Phil, argumentando que PKARC era un plagio de ARC, sólo que era mucho más rápido porque Phil lo tradujo a lenguaje ensamblador. Efectivamente, se encontraron en el código fuente de PKARC comentarios prácticamente idénticos a los de ARC, incluso las mismas faltas de ortografía.
Aunque Thom ganó el juicio, no le sirvió de mucho. Phil haría algunas modificaciones y PKZip (debido a su mejor rendimiento) ya era el programa más popular y extendido.
Años más tarde, Phil Katz moriría debido a sus problemas con el alcohol.
Fuente | Ben Baker remembers Phil Katz.
Formato .ZIPX
Uno de los programas que más popularizaron el formato ZIP fue WinZip. Phil Katz no era amigo del sistema Windows, por lo que le tomaron ventaja. Más tarde, en WinZip 12 se introdujo el formato ZIPX que no es más que el formato ZIP con distintos algoritmos de compresión (BZip, LZMA, PPMd, JPEG y WAVPack).
URL | WinZip (Shareware)
BandiZip permite comprimir en zip, zipx, tar.gz, lzh y 7z.
Una de las alternativas gratuitas a WinZIP es BandiZip, el cuál permite varios formatos de compresión actuales y tiene versión para 64 bits.
URL | BandiZip Archiver (Freeware)
Existen muchos formatos que realmente son archivos ZIP renombrados con otra extensión, como por ejemplo, los archivos JAR (Java), APK (aplicaciones Android), CBZ (Comics) o el formato EPA (Elige tu propia aventura).
Formato .RAR
Otro de los titanes indiscutibles en el mundo de la compresión fue el formato RAR. A pesar de mejorar sustancialmente la compresión de ZIP, siempre se mantuvo a la sombra del formato ZIP en la época del MSDOS, hasta la actualidad, donde WinRAR lo propulsó hasta convertirse en uno de los más populares.
URL | WinRAR (Shareware)
HaoZip permite comprimir en zip, 7z, tar.gz, tar.bz, tar.xz y lzh.
Existen dos clones de WinRAR gratuitos destacables. El primero de ellos, HaoZip, un compresor chino que tiene prácticamente la misma interfaz, pero con funcionalidades mejoradas y ampliadas.
Destaca por la gran cantidad de algoritmos que permite: la compresión zip permite algoritmos como (deflate, deflate64, bzip2 y LZMA), la compresión 7z (LZMA, LZMA2, PPMd, bzip2) y la compresión lzh (lh5, lh6, lh7). Además, también incorpora varias utilidades externas interesantes, como un conversor de imágenes o un programa para montar unidades virtuales.
URL | HaoZip Archiver (Gratuito)
El segundo de ellos, KuaiZip, también chino, un poco más básico que el anterior, pero con su propio formato KZ de compresión, además de permitir comprimir en zip y 7z.
URL | KuaiZip Compressor (Gratuito)
Formato .CAB
Aunque para instalaciones y un público más reducido, Microsoft tiene su propio formato de compresión: CAB o Cabinet. Aunque no mucha gente la conoce, existe una herramienta en Windows llamada IExpress que no es más que un interfaz gráfico del comando makecab, que permite crear archivos CAB o, incluso, sencillos programas de instalación.
Sin embargo, las tasas de compresión de CAB suelen ser bajas.
Combinación de teclado | Win+R / iexpress
Formato .ACE
Quizás, otro de los formatos más conocidos fue el formato ACE, el cuál superaba (en su momento) los ratios de compresión de RAR.
Desgraciadamente, su apuesta por ser un formato privativo (junto a su escasa innovación y renovación del formato y programa), poco a poco lo han ido sumiendo en el olvido.
URL | WinACE (Shareware)
Formato .LZH
LHA fue distribuido como código abierto desde sus primeros años, cuando luchaba por ganar terreno contra el ARJ en plataformas MS-DOS.
Aunque el formato LZH/LHA de Haruyasu Yoshizaki se puede considerar como un formato olvidado, este formato sigue siendo muy popular en Japón y varios de los programas mencionados en este artículo permiten comprimir con él. De hecho, en la versión japonesa de Windows 7, se incorpora un complemento para utilizar los archivos LZH como carpetas comprimidas.
WinLZH comprime en 7z, cab, lzh, pak, paq8p, rar, uha y zip.
WinLZH, un programa realizado por Testaware, un grupo de la demoscene, permite comprimir en este formato (junto a varios otros), además de varias opciones adicionales mediante una interfaz un tanto rústica.
URL | WinLZH (Gratuito)
Formato .SITX
Por último, no nos olvidemos del formato SITX (que no Sith), utilizado en sistemas de Apple por la empresa Smith Micro Software en su programa Stuffit.
URL | Stuffit (Shareware)
2. Los desconocidos (formatos misteriosos)
Pero además de los formatos clásicos, existen varios formatos de compresión no tan extendidos y conocidos que tienen muy buenos ratios de compresión, algunos mejorando a los alcanzados por RAR.
Formato .ALZ
AlZip es un compresor coreano que se creó en base a la frustración local por tener que utilizar el idioma inglés de WinZip. Poco más tarde, incluirían el formato propio ALZ.
La interfaz del programa permite realizar las tareas más comunes en este tipo de aplicaciones. Destaca también la utilización de unos iconos animados con su mascota, un huevo con ojos que hace referencia a su segundo formato de compresión.
AlZip permite comprimir en alz, egg, zip, tar.gz, tar.bz y lzh.
Aunque tuvo bastantes cambios, el programa actualmente es gratuito (tiene un serial en su página disponible para cualquier usuario).
URL | AlTools AlZip (Gratuito, Freeware)
Formato .EGG
Como se contaba en el apartado anterior, AlZip incorpora un segundo formato propio, el formato EGG (huevo), que analiza los tipos de ficheros a comprimir, para aplicarles el mejor método de compresión.
Formato .UHA
Otro formato, quizás de los más conocidos de esta categoría es UHArc, el cuál suele tener un buen rendimiento de compresión y posee una interfaz gráfica, llamada WinUHA.
URL | WinUHA, en Lo4d.com.
Formato .NZ
Uno de los compresores que suele liderar las tablas comparativas de compresores es NanoZip. A pesar de ser un compresor aún experimental, sus resultados suelen ser siempre muy buenos.
NanoZip, diseñado para comprimir exclusivamente con su formato NZ.
En la imagen podemos ver la cantidad de algoritmos que se pueden aplicar con este compresor, en el formato NZ.
URL | NanoZip (experimental)
Otros formatos
Existen muchos otros formatos desconocidos dignos de mención, como por ejemplo CCM, FLZ de FlashZip o DGCA, los cuales consiguen generalmente buenas tasas de compresión y rendimiento.
3. Los olvidados (abuelos cuenta-batallitas)
Existen varios formatos que se pueden considerar como obsoletos, ya que o no poseen interfaz gráfica y han dejado de utilizarse o han sido reemplazados por otros compresores mejores. Aún así, comentaré brevemente los más relevantes.
Formato .ARJ
Quizás el más famoso de esta categoría sea ARJ. Se popularizó bastante en la época de MS-DOS (debido a su soporte multivolumen que permitía guardar en varios diskettes), pero sufrió la extensión masiva de PKZip, que acabó reemplazándolo.
ARJ 2.30 para MS-DOS, de Robert K. Jung
La falta de interfaz gráfica para Windows acabó matándolo, ya que la única existente fue WinARJ y era fea con ganas.
URL | 10 formatos que quizás ya olvidaste (Incluye ARJ)
Formato .AIN
Otro compresor muy utilizado en la época de MSDOS fue AIN Archiver, de Transas Marine, el cual mejoraba los ratios de compresión de ARJ (no siempre).
Formato .ZOO
Otro de los clásicos de mediados de los 80 fue el formato ZOO, aún soportado como lectura en algunos programas de compresión. Fue desarrollado por Rahul Dhesi y se basaba en el algoritmo LZW de compresión.
Formato .ACB
Por último, otro de los compresores que quizás te podrían sonar, fue el ACB, de George Buyanovsky. Conseguía muy buenos resultados, a cambio de un tiempo de compresión bastante superior.
4. Los gigantes (pesos pesados)
Antes de comenzar el artículo, comentaba que uno de los factores importantes a tener en cuenta es el del uso de la memoria RAM del equipo. Los compresores de este apartado se basan en ese punto. Consiguen unas tasas de compresión increíblemente buenas (comparadas con otros), sin embargo el nivel de recursos (tanto memoria RAM como tiempo de compresión, o incluso descompresión) suele ser muy exigente.
Formato .PAQ
Este formato, de código abierto, es uno de los que consiguen ratios de compresión más altos, y se han creado multitud de forks utilizando PAQ como base. La mayoría de los formatos comentados a continuación en este grupo, parten de una base de PAQ.
Dos implementaciones podrían ser FrontPAQ y ZPAQ. El primero de ellos no necesita instalación, permite comprimir y descomprimir archivos desde Windows simplemente arrastrándolos hasta su icono. Se basa en PAQ8P, de Andreas Morphis. El segundo es un compresor en línea de comandos.
URL | FrontPAQ (Gratuito, código abierto)
URL | ZPAQ (Gratuito, código abierto)
Formato .RK
WinRK utiliza el formato RK, otro de los pesos pesados que se basa en una implementación cerrada derivada del formato PAQ: PWCM.
URL | WinRK (Shareware)
Formato .KGB
Otro de los formatos conocidos de este grupo es KGB, de Tomasz Pawlak. KGB Archiver (su interfaz gráfica) permite cómodamente comprimir archivos y/o carpetas, estimando la cantidad de RAM que va a utilizar.
KGB Archiver permite comprimir en paq (desde 1 a 7) y zip.
URL | KGB Archiver (Gratuito, código abierto)
Otro programa, PeaZip (comentado en el último apartado de este artículo) también permite comprimir en formato PAQ desde su interfaz gráfica.
5. Los modernos (de espíritu libre)
Los formatos y tecnologías libres (que utilizan formatos sin patentes o restricciones) siempre se terminan por extender con más rapidez que otros. En esta sección veremos dos ejemplos (aunque no son los únicos) de como un formato y programa de compresión de código abierto, puede llegar a ser la opción más interesante.
Formato .7Z
Uno de los formatos que ya tardaba en aparecer era 7z. Es el formato propio del compresor 7zip, el cuál es de código abierto y superior en redimiento a los clásicos formatos zip o rar.
7zip permite comprimir en 7z, bzip2, gzip, xz y zip.
Se trata de un compresor muy eficiente y sencillo. Además, 7zip permite comprimir con diferentes algoritmos: 7z (LZMA, LZMA2, PPMd y bzip2) y zip (deflate, deflate64, bzip2, LZMA y PPMd).
URL | 7zip (Gratuito, código abierto)
Formato .ARC
Por otra parte, tenemos ARC (no confundir con el formato ARC de SEA, mencionado al principio del artículo). Se trata de un nuevo formato ARC que gestiona el compresor de código abierto FreeARC.
FreeARC permite comprimir en su formato propio: ARC.
Una de las cosas que destacan de este compresor es que tiene un formato de alto rendimiento que utiliza algoritmos conocidos para crear sus archivos ARC. En la pestaña de compresión se puede elegir los siguientes perfiles:
Nivel de | Método | RAM necesaria para | Velocidad | ||
---|---|---|---|---|---|
Compresión | Comprimir | Descomprimir | Comprimir | Descomp. | |
Máximo | ccm | 2,5GB | 1GB | 3MB/s | 3-40MB/s |
Alta | uharc | 288MB | 192MB | 3MB/s | 3-40MB/s |
Normal | 7z | 288MB | 160MB | 5MB/s | 5-60MB/s |
Rápida | rar | 288MB | 160MB | 10MB/s | 10-60MB/s |
Muy rápida | bzip2 | 288MB | 192MB | 20MB/s | 15-100MB/s |
Ultra rápida | zip | 4MB | 8MB | 50MB/s | 120MB/s |
Junto a NanoZip suele quedar en los primeros puestos de rendimiento y eficiencia, en las comparativas de compresión.
URL | FreeARC (Gratuito, código abierto)
Otros formatos
Existen otros formatos menos extendidos también dignos de mención, como pueden ser el formato QUAD, BALZ y LZPX, los tres diseñados por Ilya Muravyov.
URL | Encode Narod (Gratuito, código abierto)
6. Los perezosos (a mi, dámelo todo junto)
Existen ciertos compresores (como bzip2 o gzip) que sólo son capaces de realizar la compresión sobre un sólo fichero. A esto se le denomina compresión sólida. No hay mayor problema, ya que lo que se suele hacer es empaquetar todos los archivos en un sólo fichero (utilizando tar, por ejemplo).
Es por eso que estos archivos se suelen denominar tar.gz o tar.bz2, para diferenciarlos de si están sólo empaquetados (.tar), o empaquetados y comprimidos.
Formato .GZ
Probablemente, uno de los formatos más extendidos es gz (gzip), el cuál es una evolución del formato z (compress). Es muy utilizado en entornos GNU/Linux y se basa en el algoritmo deflate (utiliza la popular librería zlib).
URL | Gzip
Zopfli consigue un 5% más de compresión, manteniendo la compatibilidad.
Recientemente, Google ha publicado zopfli, un compresor que mejora el ratio de gzip (un 5%) manteniendo la compatibilidad y la velocidad de descompresión. Eso sí, la velocidad de compresión es 100 veces más lenta, por lo que es ideal para compresión de archivos estáticos y desaconsejable para compresiones al vuelo (on-the-fly).
URL | Zopfli
En menéame, el usuario im_dario nos comenta la existencia de pigz (gzip paralelo) y snappy, el primero de ellos orientado a «heavy-users» que soporta múltiples procesadores y núcleos, mientras que el segundo podría ser considerado el inverso de zopfli, ya que está orientado para conseguir una mayor velocidad.
Formato .BZ2
Si hablamos de gzip es obligatorio hablar de bzip2, el cuál tiene un mejor ratio de compresión, pero es más lento y utiliza más memoria RAM.
URL | Bzip2
Otros formatos
Algunos formatos destacables similares a gzip o bzip2 son LZ, de Lzip (basado en LZMA), LZO, de Lzop (uno de los compresores más rápidos) o XZ (basada en LZMA2), que es básicamente el mismo formato que 7z, pero con soporte para metadatos. Este último es muy utilizado en distribuciones como Arch Linux.
Un excelente compresor que soporta multitud de formatos y además tiene un interfaz gráfica impecable y un formato de compresión propio (PEA) es PeaZip.
PeaZip soporta pea, 7z, arc, tar.bz2, tar.gz, quad/balz, xz, zip y paq.
Además, permite utilizar algoritmos concretos en formatos como 7z (LZMA, LZMA2, PPMd y bzip2), zip (deflate, deflate64, bzip2, LZMA y PPMd) o PAQ (LPAQ8, PAQ8o y ZPAQ). También permite personalizar y establecer tu propio formato con el compresor y parámetros externos que especifiques, útil para nuevos formatos.
URL | PeaZip (Gratuito, código abierto)
7. Experimentales (cobayas comprimibles)
Por último, aunque sólo están disponible en versión de linea de comandos y están en fase experimental, han obtenido muy buenos resultados algunos compresores como CSC32 (de Fu Siyuan) o Hook, ZCM, LZSR, Rings y Yzx (de Nania Francesco Antonio).
Si estás interesado en ver el rendimiento de los diferentes formatos de compresión, recomiendo las siguientes comparativas donde puedes ver dichos resultados:
- Compression Ratings: Contiene listas técnicas y calculadoras para obtener datos a partir de los parámetros indicados. De las más técnicas y completas. Ofrece los parámetros exactos utilizados y ofrecen los datos reales listos para descargar y comprobar por uno mismo. (2012)
- Squeeze Chart: Comparativa con todo lujo de detalles, separada en tipos de datos y con multitud de información sobre cada compresor. (2013)
- Maximum Compression: Datos organizables por rendimiento, ratio de compresión o velocidad de compresión o descompresión. (2011)