如果我有一个CUE文件,如何拆分M4B文件?

时间:2017-02-19 15:18:56

标签: audio ffmpeg command-line-interface mp3

我有一个大的M4B文件和一个CUE文件。我想要将它分成许多M4B文件,或者将其分成许多MP3文件(以前的首选)。

我想在命令行中执行此操作(OS X,但如果需要可以使用Linux),而不是安装粗略软件。我有ffmpeg并且可以安装其他命令行音频程序。

2 个答案:

答案 0 :(得分:1)

我做了两个步骤,效果很好。

第1步 - 将M4B转换为MP3

为此,您可以使用VLC Media Player(不知道如何通过命令行执行,因此这里是GUI指令)。

  • 转到Media->转换/保存
  • 添加M4B文件,单击"保存/转换"
  • 在“个人资料”下,选择“音频MP3”
  • 选择目的地(输出)文件
  • 按开始
  • ...等等......但你应该看到一个进度条

步骤1.5 - 修复遗失的标签 不幸的是,使用VLC将m4b转换为mp3将删除所有标签。因此,您可能希望使用类似puddletag(linux)的内容来重新添加标记。

第2步 - 使用.cue文件拆分MP3

获得MP3后,请使用mp3splt(命令行)

-c标志允许您使用cue文件作为分割点。

这两个都是很好的程序(至少我已经使用了多年)所以我认为它们不被认为是粗略的。"

答案 1 :(得分:0)

我不知道CUE工作表格式有多严格,但是假设您遵循这种通用格式:

TRACK 1 AUDIO
  TITLE "Chapter 01"
  INDEX 01 0:0:00
TRACK 2 AUDIO
  TITLE "Chapter 02"
  INDEX 01 22:56:01

然后,您可以使用ffmpeg和perl单线执行此操作。

user@host:~$ INFILE=input.m4b
user@host:~$ OUTPREFIX=output
user@host:~$ OUTEXT=mp3
user@host:~$ perl -ne 'sub p{printf(qq#"%s" -ss %f -to %f "%s_Chapter_%02d%s"\n#, "'"$INFILE"'", $_[0], $_[1], "'$OUTPREFIX'", $_[2], "'$OUTEXT'")}; if(/^\s+INDEX (\d+) (\d+):(\d+):(\d+)$/){$a=$b;$b=$4/60+$2*60+$3; p($a, $b, ++$c)if$b>0}; END{p($b, $b*100, ++$c)}' CUEFILE.cue | xargs -n 6 ffmpeg -i

perl单行代码会忽略提示表中的所有行,但会忽略INDEX ...行,并且会忽略第一个索引(假定为零)。它输出ffmpeg的参数。 xargs接受正确数量的参数(在这种情况下,一次为6),并为每个章节(或曲目,或其他内容)调用ffmpeg一次。

此方法可以与提示表一起使用,以分割并转换任何音频/视频文件,前提是ffmpeg接受输入和输出文件格式。