You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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:

  1. 先打开你的test.cue文件,找到开头的FILE行,确保文件名和你的M4B文件完全一致,并且格式标注为M4B。比如:

FILE "test.m4b" M4B
如果原来的行是FILE "test.m4b" WAVE,把WAVE改成M4B就行。

  1. 然后运行下面的ffmpeg命令:
ffmpeg -i test.cue -map 0 -c copy output_%02d.m4a

-c copy表示直接复制音频编码,不会重新压缩,速度非常快,输出的文件会按output_01.m4aoutput_02.m4a这样的顺序命名。

方案二:用shntool工具分割(兼容性更强)

如果CUE格式比较特殊,ffmpeg识别有问题,可以试试Ubuntu官方仓库里的shntool,它对CUE的解析更友好:

  1. 先安装工具和必要的编码支持:
sudo apt update && sudo apt install shntool libsox-fmt-mp4
  1. 然后运行分割命令:
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

火山引擎 最新活动