|
本帖最后由 lanyer 于 2024-11-17 12:20 编辑
CHDMAN (smart Z)算法优化版
官方的chdman 默认 4种算法,lzma deflate flac huffman,
其中 lzma编码 压缩率最高,但是解码速度最慢,7zip 默认就是这种算法。 最新的 zstd 解码速度最快,能比前者快10~20倍,但是由于一些历史兼容性原因,chdman在默认参数下并不开启zstd编码。
官方现有的的做法是把选定的每种算法都压缩一遍,然后无脑选择体积最小的那个保留。这通常导致压好的成品chd文件中大部分都是lzma,就算同时指定了zstd算法,其高速度低开销的特点也基本上体现不出来。
另外一些很难被压缩的数据块,例如影音动画,还有光盘中已经被压缩打包的数据,哪怕chdman压缩后体积只小一点点,也会被二次压缩。这导致使用chd游戏时无意义的解压系统开销。(lzma解压cpu开销昂贵)。尤其是一些掌上或者移动设备对电池要求高的设备。而文件体积并不能减小多少。
这个 smart Z 算法优化版 为解决以上问题而来。
算法:1.优选zstd算法(目前主流模拟器全部支持)。设置95%为阈值,如果压缩后体积超过原始95%大小的数据块将不压缩而直接存储(难压缩数据不压缩)。
2.音频音轨选flac最优算法,为第二级算法。在数据轨中,如果flac 能比 zstd压缩率高出5%,就会优先选择。
3. lzma为第3级算法。当数据块压缩率比 zstd ,flac 再高出5% 时会选择 lzma算法。
为配合以上算法,压缩参数应为
压缩ps1 cd:
chdman.exe createcd -c cdzs,cdfl,cdlz -i "输入文件名.cue" -o "输出文件名.chd"
压缩ps2 dvd 、 psp iso:
chdman.exe createdvd -c zstd,flac,lzma -hs 65536 -i "输入文件名.iso" -o "输出文件名.chd"
最终得到的文件体积不会比默认参数大多少,但能保证每个字节都尽可能的得到合理的算力分配。在文件体积和解压速度/cpu开销 之间取得一个微妙的平衡。
查询chd文件每个数据块算法分布命令:
chdman.exe verify -i "文件名.chd"
例如最新的 真·三国无双3 猛将传 中文版.iso ,用以上算法压缩后,显示 35.7%的数据块不压缩,49.6%的数据块用高效的 zstd算法压缩,只有 13.3%的数据用LZMA强力压缩。一个非常合理的搭配。比默认大部分lzma压缩的chd体积只大 0.5%
chdman(smart Z).7z
(846.12 KB, 下载次数: 29)
|
|