CD 抓取是什么?如何把音频 CD 抓成数字文件并排查抓取问题
CD 抓取(cd ripping)是把音频 CD 上的音轨逐帧读取、保存为 WAV/MP3 等数字文件的过程。它和"把光盘里的文件复制出来"是两件事:音频 CD 上并没有普通文件系统里的音频文件,只有按扇区排列的 PCM 音频数据,必须由抓取工具按音频格式去读。cdstatus 就是 Linux 下做这件事的工具之一,它同时是一个光驱诊断工具,特点是逐帧读取并如实报告失败,而不是悄悄重试后告诉你"一切正常"。如果你的盘有划痕、抓取结果偶尔爆音,或者你想确认一张盘到底是音频盘还是数据盘,这套思路比单纯追求抓取速度更有用。
先分清光盘类型,再决定怎么抓
抓取前最重要的一步是确认光盘类型。cdstatus 会列出光盘属于以下哪种:
- audio(纯音频 CD)
- data mode 1 / data mode 2
- XA mode 1 / XA mode 2
- mixed mode(音频轨 + 数据轨混合)
这一步的实际意义在于:如果你刚刻完一张"音频 CD",但刻录时误把 WAV 文件当数据文件写进去了,系统会把它识别为 data disc 而不是 audio disc。此时用抓取音频的方式去读,结果自然不对——正确做法是重新刻录,并检查刻录软件的选项。混合模式光盘则要注意,只有音频轨部分才是抓取对象。
逐帧读取:为什么它比"能读出来就行"更可靠
音频 CD 的读取单位是帧(frame),每秒 75 帧。cdstatus 的能力是逐帧读取音频,包括纯音频 CD 和混合模式 CD 的音频轨。逐帧读的好处是定位精确:
- 一张盘有划痕时,你可以知道坏帧具体落在哪一帧、属于哪一轨,而不是只知道"整张盘抓取失败"。
- 遇到读不出的帧,cdstatus 会明确告诉你。即使你在配置里启用了失败重试,它仍然会报告"首次读取失败"这件事。
这一点值得单独说明。很多抓取程序遇到坏帧会自动重试,重试成功后不留下任何记录,于是你以为这张盘完好,实际上它在某一帧上已经处于边缘状态,换个光驱或过段时间可能就读不出来了。cdstatus 的做法是:重试仍然尽力把音频读出来,但把"这里出过问题"如实告诉你。对于需要判断光盘是否还能长期保存、或者要决定是否换一张盘重抓的场景,这个信息比一次成功的抓取更有价值。
抓取完成后要核对的两件事
第一,目录(TOC)和实际音轨是否一致。 cdstatus 会列出完整的目录表,包含每轨的起始时间(分:秒)以及全局帧偏移。这里有个容易踩的坑:多数刻录软件是先写目录、再写实际数据的,所以完全可能出现"目录里所有轨都正常列出,但盘上实际没有这些数据"的情况。cdstatus 能帮助发现这类问题——目录看起来对,不代表数据真的在。
第二,坏帧是否被掩盖。 结合上一条的逐帧报告,抓取结束后回看有没有失败记录,比只看"抓取是否完成"更能反映光盘的真实状态。
什么时候该用 cdstatus 这类工具
适合的场景:
- 光盘有划痕或来源可疑,需要知道问题出在哪一轨、哪一帧
- 想确认一张盘是音频盘、数据盘还是混合模式盘
- 怀疑刻录软件只写了目录没写数据
- 系统报告的光驱状态和你的实际观察不一致(比如你确信盘在里面,系统却报告仓门打开)——cdstatus 会查询光驱状态并报告系统认为的状态,这类"用户和系统各说各话"的情况正是它设计的用途之一
不太适合的场景:只是想把一批完好的 CD 快速转成 MP3,且不关心逐帧诊断信息。这种情况下逐帧读取的细致程度可能超出需要。
常见卡点
- 把数据盘当音频盘抓:先看光盘类型,mixed mode 只抓音频轨。
- 只看抓取是否成功,不看失败日志:边缘性坏帧会被重试掩盖,留下日志才能发现。
- 以为目录正常就等于数据完整:目录先于数据写入,两者要分别确认。
- 光驱本身有问题:如果系统报告的状态和实际不符,先换一个光驱或检查仓门,再判断是盘的问题还是驱动器的问题。