一条命令让游戏库瘦身一半:Linux下用tochd批量转CHD的完整实战手册
【免费下载链接】tochdConvert game ISO and archives to CD/DVD CHD for emulation on Linux.项目地址: https://gitcode.com/gh_mirrors/to/tochd
上个月,朋友阿凯正面临一个"幸福的烦恼":他从二手市场淘来的 300 多张 PS1、PSP 游戏盘,加上网上下载的各类 7z 压缩包,已经把 2TB 移动硬盘占掉六成空间,而 RetroArch 加载 CUE 文件时还频繁报错,好几款游戏打到一半就崩溃。我推荐他试了试tochd——一个专为 Linux 设计的游戏镜像转换工具,它能把散落的 ISO、CUE+BIN、GDI 甚至压缩包,批量统一成高压缩的 CHD 格式。结果他只花了一个下午,就把整个游戏库收拾得明明白白。
先从阿凯的2TB硬盘说起:游戏库为什么会越攒越乱
阿凯的经历几乎是每个模拟器玩家的缩影。游戏资源来源五花八门:自己抓盘的 ISO、网站打包好的 CUE+BIN、Dreamcast 的 GDI 多文件格式、还有动不动就十几 GB 的 7z 压缩包。问题随之而来:
- 文件太散:一个 CUE+BIN 游戏可能带三五个音轨文件,少拷一个就玩不了;
- 空间浪费:ISO 原文件 700MB~4GB 起步,大量重复内容没有压缩;
- 兼容性差:不同模拟器支持的格式不统一,换模拟器就要重新折腾;
- 备份困难:多文件打包分享容易丢文件,云盘同步更是噩梦。
tochd 解决的正是这一整套问题,而且是自动化的。
30秒看懂tochd是什么:一句话、三个数字、一张表
一句话:tochd 是7z解压工具和 MAME 官方chdman转换器之间的"调度员",它把"解压→识别→转换→清理"四步串成一条命令。
三个数字建立认知:
- 40%~60%:转换后的 CHD 体积通常只有原镜像的一半上下;
- 1 个:不管原来是一个 ISO 还是一整套 CUE+BIN,最后都变成一个
.chd单文件; - 3 类:ISO、CUE+BIN、GDI 三种光盘镜像格式全覆盖,外加 7z、zip、rar、gz 等压缩包。
| 维度 | 使用前 | 使用后 |
|---|---|---|
| 文件形态 | ISO、CUE+BIN、GDI、7z、zip 混存 | 清一色.chd单文件 |
| 一个游戏占几个文件 | 最多十几个(含音轨) | 1 个 |
| 平均体积 | 700MB~4GB | 约为原来的 40%~60% |
| 模拟器加载 | 部分核心需要特殊处理 | RetroArch、PPSSPP 原生识别 |
| 迁移备份 | 漏拷一个文件就报废 | 拷一个.chd即可 |
核心能力一览:tochd凭什么一条命令顶十步手动操作
| 核心能力 | 人话解释 | 真实效果 |
|---|---|---|
| 压缩包自动拆解 | 发现.7z/.zip/.rar先解压到临时目录,再自动寻找内部镜像 | 免手动解压,单任务省下 3~5 分钟人工操作 |
| 三类镜像全识别 | ISO、CUE+BIN、GDI 都能自动匹配正确的转换流程 | 覆盖 PS1、PS2、PSP、Dreamcast 等主流光盘平台 |
| 多线程并行处理 | -p参数开启,多个文件同时转换 | 4 线程批量转换,总耗时约为串行的三分之一 |
| CD/DVD 智能切换 | -m auto按 750MB 阈值自动选择格式 | PSP 等非 CD 游戏兼容性显著提升 |
如果你想知道自己手头有哪些格式能被识别,直接运行tochd --list-formats,它会列出所有支持的类型;tochd --list-programs则会告诉你7z和chdman分别装在哪里。
10分钟上手:安装到产出第一个CHD文件的最小路径
tochd 本身是单个 Python 脚本,不需要任何第三方 Python 库,唯一前提是系统里有7z和chdman两个命令。
第一步:安装依赖(Arch 系为例,其他发行版用对应包管理器装7z与chdman即可)
sudo pacman -S p7zip mame-tools第二步:克隆并安装脚本
git clone https://gitcode.com/gh_mirrors/to/tochd cd tochd bash suggested_install.sh安装脚本会自动找到一个你有写入权限的$PATH目录,把tochd.py安装成可直接执行的tochd命令。
第三步:先预演,再实转(强烈建议新手养成这个习惯)
tochd -X . # 预演模式:只列出会处理哪些文件,不真正转换 tochd -q . # 正式转换当前目录下所有可识别的镜像与压缩包-X是 dry-run(空跑),相当于"先看看清单再动手",避免误操作。-q是安静模式,隐藏 7z 和 chdman 的刷屏输出,只保留每个任务的起止状态。几秒后,你就能看到每个任务输出的Completed:字样和对应的.chd路径——第一个成果到手。
进阶玩法:普通用户、进阶玩家、重度用户的三级跳
第一级:目录整批转换,把散落镜像收进一个文件夹
不想让 CHD 和源文件混在一起?用-d指定输出目录:
tochd -q -d ~/Games/CHD ~/Downloads这条命令会扫描~/Downloads下所有支持的镜像与压缩包,把产出的 CHD 统一收进~/Games/CHD,源文件保持原样,方便你确认无误后再手动删除。
第二级:PSP的DVD格式、统计信息与保留原名
PPSSPP 开发者明确建议 PSP 镜像用chdman createdvd转换,而 tochd 默认走 CD 格式,所以转 PSP 游戏务必加-m dvd:
tochd -qs -m dvd ~/PSP_Games/*.iso其中-s会在结束时打印Started / Completed / Failed / Elapsed time统计信息,让你对整批任务一目了然。另外,从压缩包转出的 CHD 默认会改名对齐压缩包文件名,如果你希望保留包内文件的原名(比如版本号、汉化组信息就藏在里面),加上-R:
tochd -R -q "Street Fighter 3 (Chinese Patch).7z"第三级:stdin管道、临时目录与底层参数调校
重度用户可以把 tochd 接进自己的脚本工作流。比如用find喂文件列表、甚至配合其他工具按条件筛选:
find ~/Games -name "*.7z" | tochd -p -单个-表示从标准输入逐行读取文件路径。再看两个能解决实际痛点的参数:
tochd --temp-dir /tmp/chd_work -p ~/Games/*.7z # 把解压临时目录挪到指定位置 tochd -H 2048 game.iso # 手动指定 chdman 的 hunk 大小--temp-dir适合磁盘吃紧的场景——把解压中间产物放到空间更充裕的分区;-H一般用不上,但遇到特殊光盘(如某些非标准扇区)时可以覆盖 chdman 的默认值。如果你把 7z 或 chdman 装在了非标准路径,还能用--7z、--chdman直接指定可执行文件。
避坑指南:新手最容易踩的6个坑与正确做法
| 新手常见的错误 | 后果 | 正确做法 |
|---|---|---|
| PSP 游戏不指定格式直接转 | 转换成功但 PPSSPP 不认,白忙一场 | 统一加-m dvd,或直接用-m auto按体积自动判断 |
| 并行模式下干等进度条 | 以为卡死了,其实只是进度条被隐藏 | 并行时用-s看最终统计,或回到单线程模式看实时输出 |
用kill -9强杀进程 | 残留.tochd_开头的临时文件夹,可能占数 GB | 用Ctrl+C优雅中断;想让 Ctrl+C 停止全部任务就加-E |
| 解压包里有多个同名 ISO | 重复转换、结果互相覆盖 | tochd 发现 CUE/GDI 时已自动忽略同目录 ISO;必要时先手动解压清理 |
| CUE 引用了 APE 格式音频 | 转换直接失败 | 先把 APE 转成 WAV 再交给 tochd |
文件名以-开头 | 被当成命令行参数报错 | 用--分隔:tochd -- -weird_name.iso |
调优技巧:让转换速度再快一倍的实用参数
转换速度主要卡在磁盘 IO 和 CPU 压缩。三个参数组合起来效果最明显:
-t NUM:配合-p使用,指定并行线程数,0表示用满全部 CPU 核心,默认 2。CPU 核心多时开满,吞吐量立竿见影;-c NUM:限制每个 chdman 进程占用的核数。如果你开 8 个并行任务,每个还都吃满多核,系统会严重过载,此时用-c 1反而更快;--temp-dir:把解压临时目录放到 SSD 或/tmp(内存盘)上,解压瓶颈大幅缓解。转换完临时目录会被自动清理,但如果曾经强杀过进程,记得检查并手动删除残留的.tochd_*文件夹。
推荐节奏:先用tochd -X -d 输出目录 源目录预演确认清单 → 再跑tochd -q -s -d 输出目录 -p -t 线程数 源目录正式转换 → 拿到统计后抽查几个 CHD 在模拟器里实测。
横向对比:tochd vs 手动解压+chdman
| 方案 | 操作步骤 | 每文件额外耗时 | 出错风险 | 自动化程度 |
|---|---|---|---|---|
| 手动方案 | 解压 → 找镜像 → 查格式 → 敲 chdman 命令 → 清理临时文件 | 多花 3~8 分钟人工时间 | 命令拼错、格式选错、漏清理 | 无 |
| 自己写批处理脚本 | 开发调试成本高,难覆盖边界情况 | 视脚本质量而定 | 兼容性问题多 | 中 |
| tochd | 一条命令 | 几乎为零 | 低(有预演、跳过重复) | 高(解压→识别→转换→清理全自动) |
再对比"干脆不转":CHD 单文件省空间、易迁移、原生兼容主流模拟器,长期看这笔转换时间是绝对划算的投资。
社区与生态:源码、文档与自助排障入口
tochd 采用 MIT 协议,整个项目核心就是一个零依赖的 Python 脚本:
- 主程序源码:tochd.py,约 800 行,逻辑清晰,值得通读;
- 更新日志:CHANGES.md,每个版本的功能变化和已知问题都记录在案;
- 安装与卸载脚本:suggested_install.sh、uninstall.sh;
- 自助查询:
tochd --list-examples内置常用示例,tochd --list-formats查看支持格式,tochd --list-programs确认依赖路径,出问题先跑这三条命令基本能定位一半问题。
遇到版本升级或行为变化,先翻 CHANGES 里的"bug"条目;遇到没见过的文件格式,看--list-formats的输出,比盲目猜测快得多。
写在最后:今晚就把你的游戏库收编了
一个周末下午,300 个游戏的镜像全部变成 CHD,移动硬盘腾出一半空间,RetroArch 里所有游戏一键加载、再没报过错——这就是阿凯的故事,也可以成为你的故事。工具本身免费开源、安装只要三条命令、跑起来只需一条命令。
现在就从一句tochd -X ~/Downloads开始,看看你的游戏库有多少文件可以"收编"。今晚动手,明天你拥有的就是一个更整齐、更轻量、也更可靠的模拟器游戏库。
【免费下载链接】tochdConvert game ISO and archives to CD/DVD CHD for emulation on Linux.项目地址: https://gitcode.com/gh_mirrors/to/tochd
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考