我有一个大的M4B文件和一个CUE文件。我想要将它分成许多M4B文件,或者将其分成许多MP3文件(以前的首选)。
我想在命令行中执行此操作(OS X,但如果需要可以使用Linux),而不是安装粗略软件。我有ffmpeg
并且可以安装其他命令行音频程序。
答案 0 :(得分:1)
我做了两个步骤,效果很好。
第1步 - 将M4B转换为MP3
为此,您可以使用VLC Media Player(不知道如何通过命令行执行,因此这里是GUI指令)。
步骤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接受输入和输出文件格式。