You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash脚本中批量将.cda转换为.mp3并保留原文件名

解决CD中.cda转MP3的脚本问题

首先要明确:.cda文件并不是实际的音频文件,它只是CD光盘上的轨道索引标记,每个文件只有44字节,仅记录对应轨道的位置信息,没有实际音频数据。你复制.cda到硬盘后,ffmpeg根本无法从中提取音频,这就是命令失效的核心原因。

正确的做法是直接从CD的音频轨道抓取并编码为MP3,不需要复制.cda文件。以下是修正后的脚本:

# 创建目标目录(USB驱动器路径为/d/,参数$1作为子文件夹名称)
TARGET_DIR="/d/$1"
mkdir -p "$TARGET_DIR"

# 获取CD的总轨道数(假设CD驱动器盘符为/e/)
TRACK_COUNT=$(ffprobe -v error -show_entries format=nb_streams -of default=noprint_wrappers=1:nokey=1 cdrom://e/)

# 遍历每个轨道,转换为MP3
for ((track=1; track<=TRACK_COUNT; track++)); do
  # 从CD轨道读取音频,用libmp3lame编码,-q:a 2对应高质量MP3(0-9,数值越小质量越高)
  ffmpeg -i "cdrom://e/?track=$track" -codec:a libmp3lame -q:a 2 "$TARGET_DIR/track_$track.mp3"
done

# 查看转换完成的文件
ls "$TARGET_DIR"

关键说明:

  • mkdir -p "$TARGET_DIR":确保目标目录存在,即使父目录不存在也会自动创建,避免因目录不存在报错。
  • ffprobe:用来探测CD的总轨道数,保证能遍历所有音频轨道。
  • 循环中的ffmpeg命令:直接从CD的指定轨道读取原始音频数据,无需依赖.cda文件,编码为MP3时通过-q:a 2设置高质量参数,你可以根据需求调整数值(0为最高质量,9为最低)。
  • 输出文件按轨道编号命名,避免文件覆盖,也方便区分不同曲目。

注意事项:

  • 确保Git Shell环境中已安装ffmpeg和ffprobe,且能正常调用(可通过ffmpeg -version和ffprobe -version验证)。
  • 确认CD驱动器的盘符正确(脚本中为e/,需替换为你实际的CD盘符)。
  • 转换过程中不要弹出CD,确保光盘始终在驱动器内。

内容的提问来源于stack exchange,提问作者Yonatan Tevet-Markelevich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:24:47