Audio 如果我有一个提示文件,如何拆分M4B文件?

Audio 如果我有一个提示文件,如何拆分M4B文件?,audio,ffmpeg,command-line-interface,mp3,Audio,Ffmpeg,Command Line Interface,Mp3,我有一个大的M4B文件和一个提示文件。我想将其拆分为许多M4B文件,或者将其拆分为许多MP3文件(以前的首选) 我想在命令行中执行此操作(OSX,但如果需要可以使用Linux),而不是安装sketchy软件。我有ffmpeg,可以安装其他命令行音频程序。我做了两个步骤,效果很好 步骤1-将M4B转换为MP3 为此,您可以使用VLC Media Player(不确定如何通过命令行执行,因此以下是GUI说明) 转到介质->转换/保存 添加M4B文件,单击“保存/转换” 在Profile下,选择Au

我有一个大的M4B文件和一个提示文件。我想将其拆分为许多M4B文件,或者将其拆分为许多MP3文件(以前的首选)


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

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

步骤1-将M4B转换为MP3

为此,您可以使用VLC Media Player(不确定如何通过命令行执行,因此以下是GUI说明)

  • 转到介质->转换/保存
  • 添加M4B文件,单击“保存/转换”
  • 在Profile下,选择Audio-MP3
  • 选择目标(输出)文件
  • 按开始
  • …等等…但是你应该看到一个进度条
步骤1.5-修复缺失的标签 不幸的是,使用VLC将m4b转换为mp3将删除所有标签。因此,您可能希望使用puddletag(linux)之类的东西将标记添加回

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

拥有MP3后,使用(命令行)

c标志允许您使用分割点的提示文件


这两个都是老掉牙的程序(至少我已经使用了多年),所以我不认为它们被认为是“粗略的”。

我不知道提示表格式有多严格,但假设您的提示表格式是这样的:

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 one liner忽略提示表中的所有行,但
索引…
行也忽略第一个索引,假设它为零。它打印出ffmpeg的参数。xargs采用正确数量的参数(在本例中,每次6个),并为每个章节(或曲目,或任何内容)调用ffmpeg一次


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

通过ffmpeg:ffmpeg-i的命令行(使用ffmpeg时,不再需要步骤1.5)