CHD格式转换完整流程:ISO转CHD省一半空间
【免费下载链接】rommA beautiful, powerful, self-hosted ROM manager and player.项目地址: https://gitcode.com/GitHub_Trending/rom/romm
如果你的游戏库被 ISO 文件塞满了,游戏ROM压缩是最直接的瘦身方式。MAME 项目自带的 chdman 就是做 CHD 格式转换的工具:把整张光盘镜像压成模拟器能直接读取的 CHD 文件,空间一般能省下一半。下面从该不该转、怎么转到批量处理,一次讲完。
从一个真实痛点说起
打开游戏库文件夹看看:PS1、PS2、Dreamcast 三个目录,几百个 ISO 堆在一起,单个 600MB 到 1.3GB,整个文件夹轻松吃掉 400GB。但光盘镜像是把整张碟原样搬过来的——真正被游戏读到的数据往往不到一半,剩下的是预留扇区、冗余轨道和从没写满的空间。💾 硬盘不是仓库,别什么都原样存着。拿《最终幻想VII》这种 PS1 大作举例,原始 ISO 大约 1.3GB,用 chdman 转成 CHD 后通常只剩 500MB 上下,同一批游戏能腾出差不多一半的空间,而模拟器读取时按需解压,实际加载速度基本不受影响。
先判断:你的情况该不该转
不是所有文件都值得动,先对号入座:
- 如果你玩的是 PS1、PS2、Dreamcast 这类光盘平台,且模拟器支持 CHD(RetroArch、DuckStation、PCSX2 都可以),就选 CHD——对绝大多数模拟器玩家来说,CHD 是压缩率和兼容性之间最省心的选项。
- 如果你主要玩卡带平台(GBA、N64、GB 等),文件本来就几 MB 到几十 MB,压它属于没事找事,原样存着就行。
- 如果你的模拟器是只认原始 ISO 的老核心,那部分游戏保留 ISO,别硬转。
- 如果是 Sega CD 这类多轨碟片(CUE+BIN),只转 BIN、CUE 原样保留,细节放到批量章节里说。
| 格式 | 适用场景 |
|---|---|
| ISO | 老模拟器、需要原始镜像的场景 |
| CHD | PS1/PS2/Dreamcast 等光盘平台的主力选择 |
| CUE+BIN | Sega CD 等多轨碟片,CUE 保留、BIN 可转 |
补充一点:CHD 内部数据块走 LZMA 压缩,音频轨道走 FLAC 无损压缩,通常还能再省三四成,音质没有任何损失。
五分钟上手:装好就能转
先装工具,三个平台各一行:
sudo apt install mame-tools # Debian / Ubuntu brew install mame # macOS sudo pacman -S mame-tools # Arch Linux然后一条命令完成单文件转换:
chdman createcd -i game.iso -o game.chd -c 5 chdman verify -i game.chd参数一句话带过:-i输入、-o输出、-c压缩级别(1-9,日常用 5 就行),第二行是转换后的完整性校验。
转完怎么确认没坏
chdman verify通过只说明文件结构没坏,不算完。把 CHD 扔进模拟器实机跑 10 分钟:能过第一关、能正常存档、退出重进不报错,才算真正通过。另外 CHD 文件头里嵌着原始碟片的 SHA-1,RomM 这类 ROM 管理器扫描时就是拿它匹配元数据的,转完库不会"失忆"。提取逻辑在:
backend/utils/archives.py
⚠️ 装完先跑
chdman --version确认命令可用。如果提示"命令未找到",是 PATH 没配对:Windows 上把 mame 安装目录加进环境变量之后,记得重新开一个终端再试。
批量转换:一个脚本搞定
一个目录里要转几十个 ISO 时,别手动敲。下面这个 bash 脚本在 ISO 所在目录里运行,逻辑是:转完立刻校验,校验失败就删掉坏 CHD、保留原 ISO:
for f in *.iso; do out="${f%.iso}.chd" chdman createcd -i "$f" -o "$out" -c 5 if chdman verify -i "$out"; then echo "OK: $out" else rm -f "$out"; echo "校验失败,保留 $f" fi done跑完看日志里"校验失败"的那几条,通常是源文件本身就有问题,单独处理即可,不影响其余文件。
哪些碟片要小心
- Sega CD:CUE 文件原样保留,只转 BIN,索引丢了多轨游戏会认不出来。
- 多光盘游戏:统一命名,比如
Final Fantasy VII (Disc 1).chd、Final Fantasy VII (Disc 2).chd,方便模拟器识别成套。 - PS2:少数游戏依赖原始目录结构,批量转之前先拿一两个单文件 CHD 实测能不能跑。
什么时候不值得转 + 行动清单
CHD 不是万能药,这几种情况建议原样存着:
- 只玩一次的游戏:转换本身要几分钟到十几分钟,省下的空间可能通关一次就清零了。
- 依赖原始光盘目录结构的冷门模拟器或老核心:CHD 直接打不开,硬转只会多一个用不了的文件。
- 需要频繁在多台设备间传输、协作备份的场景:CHD 每次读取都要解压,跨设备同步不如直接拷 ISO 省事。
RomM 识别 CHD 靠的是文件头里嵌入的原始碟片哈希,字段定义在:
backend/models/rom.py
想动手的话,按这个顺序来:
- □ 挑 2-3 个最大的 ISO 先试转,跑通"转换 + verify + 模拟器实机"全流程
- □ 批量前把脚本里的
-c 5调成你能接受的速度,压缩级别和时间自己取舍 - □ 用
chdman verify把已转的文件整体过一遍,失败的单独重转 - □ 全库转完后在 RomM 里重新扫描,确认封面和元数据没丢
先拿最大的几个文件验证流程,确认没问题再放开批量跑,省下的空间是实打实的。
【免费下载链接】rommA beautiful, powerful, self-hosted ROM manager and player.项目地址: https://gitcode.com/GitHub_Trending/rom/romm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考