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 只抓音频轨。
  • 只看抓取是否成功,不看失败日志:边缘性坏帧会被重试掩盖,留下日志才能发现。
  • 以为目录正常就等于数据完整:目录先于数据写入,两者要分别确认。
  • 光驱本身有问题:如果系统报告的状态和实际不符,先换一个光驱或检查仓门,再判断是盘的问题还是驱动器的问题。
alcohol-soft.com
Alcohol is CD / DVD burning copying backup recording duplication emulation and creation software.
cdstatus.sourceforge.net
cdrom diagnostics and fast music ripping for linux