找回密码
 立即注册

微信扫码登录

使用验证码登录

QQ登录

只需一步,快速开始

查看: 767|回复: 19

【CHDMAN】算法优化版

[复制链接]

12

主题

13

回帖

1400

积分

金牌会员

积分
1400
发表于 2024-11-17 04:40:18 | 显示全部楼层 |阅读模式
本帖最后由 lanyer 于 2025-1-3 02:31 编辑

目前,官方的chdman 有四种默认编码算法:lzma、deflate、flac 和 huffman。


其中 lzma编码 压缩率最高,但是解码速度最慢,7zip 默认就是这种算法。 更新的 zstd 算法解码速度最快,能比前者快5~10倍(来源),但是由于一些历史兼容性原因,chdman在默认参数下不开启zstd编码。

chdman 目前的做法是优先考虑文件大小,即对每个文件块分别用所选的算法进行压缩,然后盲目地选取最小的那个压缩保留,这通常导致最终的 chd 文件大部分是 lzma,即使同时指定了 zstd 算法,也因其压缩比难以超越 lzma,而导致其解压速度快、CPU 开销小的特点也没机会体现。(目前官方的建议是如果要使用 zstd,则需要禁用 lzma)

另外,一些难以压缩的数据块,比如 mpeg2 视频,还有光盘中已经被压缩打包的数据,哪怕chdman压缩后体积只小一点点,也会被二次压缩。这就导致在用户端加载使用chd 时会产生无意义的解压系统开销。(Lzma 解压的 CPU 开销昂贵)。特别是对于一些对电池要求较高的手持或移动设备来说。况且这样做文件大小也并没有缩小太多。


有没有办法可以同时利用lzma的高压缩率和zstd的高速度和低CPU开销的优势,并且尽可能的减少不必要的二次解压系统开销呢?
这里我们设计一个算法选择的阈值:94.4272%

默认(用于 dvd)四种压缩算法:zstd、flac、huff、lzma。前三个优先级相同,压缩后仍会保留最小的那个,但如果压缩后大小超过原始大小的 94.4272%,则不会对数据块进行压缩,而是直接存储(难压缩数据不进行二次压缩)。
LZMA的优先级落后于前三个,当 lzma 压缩后的数据块尺寸小于前三个中最优算法的 94.4272% 时,会选择 lzma 算法,
最终文件大小不会比默认参数大很多,但基本每个块都会得到合理的算法分配,在文件大小和解压速度/CPU 开销之间达到微妙的平衡。
至于 94.4272% 这个数字的由来,则是来自于黄金分割的三次递归。
shutterstock_715785541.png


例:
压缩 cd (ps1)镜像:
chdman.exe createcd  -i "输入文件名.cue" -o "输出文件名.chd"

压缩 dvd (ps2, psp)镜像:
chdman.exe createdvd -hs 2048 -i "输入文件名.iso" -o "输出文件名.chd"

一个小贴士:压缩dvd光盘使用最小的块大小(2048),能捕获到最多的重复块而使最终的chd文件体积大幅减小。但是对于重复块较少的镜像,增大块大小能显著帮助压缩算法提高压缩率,最终缩减chd文件体积。

查询chd文件 详细算法统计信息命令:
chdman.exe verify -i "文件名.chd"

例如最新的 真·三国无双3 猛将传 中文版.iso ,用以上算法压缩后,显示 35.7%的数据块不压缩,49.6%的数据块用高效的 zstd算法压缩,只有 13.3%的数据用LZMA强力压缩。一个非常合理的搭配。比默认大部分lzma压缩的chd体积只大 0.5%
chd.png




1月2日更新:加入中文文件名和路径输入支持




如果不喜欢算法优化,这里有 原版+中文支持,传送门:

chdman4f.zip

1.12 MB, 下载次数: 36

8

主题

208

回帖

1886

积分

金牌会员

积分
1886

最佳新人

发表于 2024-11-17 05:44:10 来自手机 | 显示全部楼层
又学习了一招,感谢楼主!

0

主题

30

回帖

471

积分

中级会员

积分
471
发表于 2024-11-17 06:24:55 | 显示全部楼层
谢谢大佬分享

0

主题

24

回帖

1291

积分

金牌会员

积分
1291
发表于 2024-11-17 07:42:27 来自手机 | 显示全部楼层
这种反常规压缩最讨厌!不是什么模拟器非得支持chd才行!

点评

不是什么文盲非得瞎bb秀存在感才行!  发表于 2024-11-17 12:00

0

主题

105

回帖

1034

积分

金牌会员

积分
1034
发表于 2024-11-17 07:49:50 | 显示全部楼层
感谢楼主科普……但是我想问问现在有多少模拟器是支持直接读取CHD的?

0

主题

105

回帖

1034

积分

金牌会员

积分
1034
发表于 2024-11-17 07:50:29 | 显示全部楼层
像是redump的那些家用机的ISO,都是.zip为标准的

152

主题

2508

回帖

6035

积分

论坛元老

独乐乐不如众乐乐,免费分享游戏光荣,贩卖游戏可耻.

积分
6035

推广达人最佳新人

发表于 2024-11-17 08:27:03 | 显示全部楼层
路过看看!
回复

使用道具 举报

0

主题

775

回帖

2627

积分

金牌会员

积分
2627
发表于 2024-11-17 10:01:50 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

4

主题

721

回帖

2763

积分

金牌会员

积分
2763
QQ
发表于 2024-11-17 12:55:29 来自手机 | 显示全部楼层
进来看一下

3

主题

69

回帖

904

积分

高级会员

积分
904
发表于 2024-11-17 14:00:38 | 显示全部楼层
支持支持,用CHD还是很方便的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|肖琪模拟游戏站 ( 沪ICP备2023018581号-5|沪公网安备31011702888952号 )

GMT+8, 2025-1-5 10:10 , Processed in 0.079169 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表