• 请不要在回答技术问题时复制粘贴 AI 生成的内容
unmayx
V2EX  ›  程序员

压缩的尽头是自指?从 LZMA2、PAQ8PX 到 zstd/ZIP/RAR Quine,我折腾了一遍“自包含压缩包”

  •  
  •   unmayx ·
    Mabbs · 4 days ago · 1607 views

    最近把之前关于压缩的各种折腾整理成了一篇长文,发在博客上,想搬来论坛和大家聊聊。

    一开始只是想给博客离线包找更强的压缩算法:7-Zip 的 LZMA2 已经很能打,但我不信邪,又试了 ZPAQ 、PAQ8PX 、NNCP 、cmix 。结果挺有意思:

    • ZPAQ:一分钟左右把 16MiB 压到约 3.5MiB ,老算法但速度和压缩比还挺平衡;
    • PAQ8PX:压到约 3.1MiB ,本次冠军,但花了一个半小时、吃了 30GiB 内存,解压同样痛苦;
    • NNCP:FFmpeg 作者 Fabrice Bellard 的 Transformer 压缩算法,RTX 4090 上跑了一个半小时,结果 4.1MiB ,还没 LZMA2 高;
    • cmix:测试时压到一半崩溃,内存和耗时也很夸张。

    结论大概是:追求极限压缩比,PAQ8PX 很强;日常使用,LZMA2 的 7-Zip 依然是最稳的选择;想在小文件上再挤一点,ZPAQ 可以试试。

    更有意思的是后半篇:继续折腾“自包含压缩包 / Quine 压缩包”——也就是压缩包里包含一份和自身字节完全相同的副本。之前做过 7z Quine ,这次又让 AI 研究了:

    • zstd Quine:利用可跳过帧、RAW block 和 XXH64 校验值构造,最终做成 .tar.zst,Windows 资源管理器也能直接打开;文章里附了完整生成代码;
    • ZIP Quine:利用成员数据重叠绕过窗口限制,7-Zip 和 libarchive 能正常解压,但 Python zipfile 会因为检查压缩数据越过后续局部头而报错,算是一点兼容性代价;文章里也附了生成器;
    • RAR Quine:原理上也能做,AI 也生成出来了,但因为 RAR 不是开源软件,文章里只放了生成后的样例供研究。

    文章里还有一段让我挺感慨的:这些代码我基本看不懂,但 AI 就是能把问题解决。复杂格式、校验值构造、兼容性坑,全都硬啃下来了。于是最后也忍不住写了点关于 AI 和“记录还有没有意义”的感想。

    原文在这里:《关于压缩的各种探索》

    感兴趣的朋友可以聊聊:

    1. 你用过最离谱但确实有效的压缩算法是什么?
    2. 极限压缩比和可用性之间,你会怎么选?
    3. 对这种“压缩包包含自身”的 Quine 玩法,有没有其他格式可以继续挑战?
    4. AI 生成这种复杂但能跑的代码,你觉得是解放生产力,还是让人越来越看不懂基础设施?

    欢迎拍砖、补充算法和格式,也欢迎试试文中的 zstd/ZIP 生成器~

    11 replies  •  2026-11-02 14:42:51 +08:00
    whileFalse
    whileFalse
    4 days ago
    1
    我是觉得图片视频等大文件压不动,小的文本文件本来就没多少,所以你这个命题有点无聊
    unmayx
    unmayx
    OP
    4 days ago
    2
    @whileFalse 😓所以你觉得压缩没意义?
    moonlord
    moonlord
    4 days ago
    3
    “把压缩包又用 7-Zip 额外压缩了一遍”……
    感觉应该直接压缩原始文件,再比较差异,会比较客观
    unmayx
    unmayx
    OP
    4 days ago
    4
    @moonlord 我的博客压缩包构造是不压缩的,相当于 tar 那样,因为这几个压缩程序不是所有都有构造归档的功能,所以没办法压缩整个文件夹
    greatbody
    greatbody
    3 days ago
    5
    把香农的信息论拿出来,压缩是有极限的。
    archxm
    archxm
    3 days ago via Android
    6
    要不要搞精神,灵魂压缩?
    最近赛博朋克 边缘行者 2 ,可下载了
    unmayx
    unmayx
    OP
    3 days ago
    7
    @archxm 😂LLM 不就是灵魂压缩
    archxm
    archxm
    3 days ago via Android
    8
    @unmayx 还不够极致,还可以优化
    Overfill3641
    Overfill3641
    3 days ago
    9
    fitgirl 那些倒是可以把 LZMA2 压缩不行的砍一大半,但是解压就痛苦了,还容易卡死。
    所以还是通用压缩软件就完事,需要的时候解压不慢也能稳定出货。
    LLM 相当于有损压缩,还原不了完整信息,如果不计较精度,视频也可以无限压缩。
    chinni
    chinni
    3 days ago
    10
    现在压缩最大的作用是 打包。压缩率关注已经没有什么很大诱惑了。。。。以前研究过不少压缩 encode.ru 现在变成 encode.su 了好像。里面很多压缩都试过。
    precomp 和 packjpg 还是好用的。winzip 的 zipx 可以给 jpg 再压缩到原来的 80% 左右,和 packjpg 差不多。还有古老的 stix 格式呢。
    现在都不折腾了。
    gitlight
    gitlight
    2 days ago
    11
    其实从直觉上来说,如果能针对博客数据进行算法调整,博客数据本身这种高度结构化的数据本身可以为压缩算法带来一些先验规律,从而获得更高的压缩率
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1270 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 21:44 · PVG 05:44 · LAX 13:44 · JFK 16:44
    ♥ Do have faith in what you're doing.