如何通过CUE文件分割无章节信息的M4B音频文件?
如何通过CUE文件分割无章节信息的M4B音频文件?
我明白你的困扰——手里的M4B没有内置章节,想用CUE文件分割却踩了ffmpeg的坑,而且VLC明明能正常识别CUE播放分段,这确实有点让人费解。先给你解释下你之前命令出错的原因,再给你两个适合Ubuntu 20.04的可行方案:
为什么你的ffmpeg命令会报错?
你用的-segment_times参数要求直接传入逗号分隔的时间点数值(比如0,120,300这种),它根本不支持直接读取CUE文件,所以才会抛出Invalid time duration specification的错误。VLC能识别CUE是因为它内部有专门解析CUE格式的逻辑,和ffmpeg这个参数的工作方式完全不同。
方案一:直接用ffmpeg读取CUE文件分割(最快,无重编码)
这个方法最直接,前提是你的CUE文件格式要正确适配M4B:
- 先打开你的
test.cue文件,找到开头的FILE行,确保文件名和你的M4B文件完全一致,并且格式标注为M4B。比如:
FILE "test.m4b" M4B
如果原来的行是FILE "test.m4b" WAVE,把WAVE改成M4B就行。
- 然后运行下面的ffmpeg命令:
ffmpeg -i test.cue -map 0 -c copy output_%02d.m4a
-c copy表示直接复制音频编码,不会重新压缩,速度非常快,输出的文件会按output_01.m4a、output_02.m4a这样的顺序命名。
方案二:用shntool工具分割(兼容性更强)
如果CUE格式比较特殊,ffmpeg识别有问题,可以试试Ubuntu官方仓库里的shntool,它对CUE的解析更友好:
- 先安装工具和必要的编码支持:
sudo apt update && sudo apt install shntool libsox-fmt-mp4
- 然后运行分割命令:
shnsplit -f test.cue -o m4a test.m4b
默认情况下,输出的文件名会根据CUE里的TITLE字段自动命名,如果你想自定义格式(比如“序号-标题”),可以加-t参数:
shnsplit -f test.cue -o m4a -t "%n - %t" test.m4b
这两个方案在Ubuntu 20.04上都能正常工作,你可以根据自己的情况选择~
备注:内容来源于stack exchange,提问作者Rick T




