Emezeta.com

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.

Guía definitiva de compresores y formatos de compresión

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.

Algoritmo de compresión Run-Length Encoding (RLE), usado en formato PCX

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, compresor de archivos freeware

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, compresor chino con una interfaz gráfica idéntica a la del WinRAR.

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.

Microsoft IExpress: Interfaz gráfica del MakeCAB (Cabinet Maker) de Windows

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, de Testaware Tools

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, compresor de archivos coreano con dos formatos propios: ALZ y EGG

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 (formato NZ), compresor de archivos con muy buen rendimiento y eficiencia

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

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.

Guía compresores y formatos de compresión: Kgb Archiver

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, compresor de código abierto que permite comprimir en formato 7z entre otros

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, compresor de alto rendimiento que comprime en un nuevo formato ARC

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, mejora de Google compatible con los algoritmos de compresión gzip, deflate y zlib

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.

URL | pigz
URL | Snappy

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, compresor gratuito de código abierto que soporta muchos formatos

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).

ZCM Archive, compresor experimental del formato ZCM

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)