正如这里建议的那样,我正在使用cat
命令将多个 .mp3 文件连接成一个 .mp3 文件。
想象一下,我在当前文件夹中有以下 .mp3 文件:
001001.mp3 001002.mp3 001003.mp3 001004.mp3 001005.mp3
或者,像这样:
096001.mp3 096002.mp3 096003.mp3 096004.mp3
我需要以升序连接这些 .mp3 文件,即 001001.mp3+001002.mp3+001003.mp3+etc.
为了将这些 .mp3 文件合并为一个,我在当前文件夹中执行以下命令:
cat *.mp3 > final.mp3
我测试了最终的 .mp3 文件,这是我所期望的,但我需要确保上面的命令按升序选择文件。
我可以确定上面的命令总是按升序连接文件吗?
谢谢先生!
cat
不是这项工作的正确工具。MP3 格式有各种各样的垃圾,可能潜伏在文件的开头和结尾,这需要被去除。mp3wrap
是你想要的。它将排除文件中的任何元数据并将音频粘贴在一起。在您这样做之前,请运行
ls *.mp3
以检查它们的顺序是否正确。当我最初写这个答案时(六年前!)通配符 glob 显然表现不佳,但我认为他们现在可以。例如,您可能需要重命名文件,如果它们被编号但不是零填充,
{1-11}.mp3
将按1 10 11 2 3 4 5 6 7 8 9
. 这很容易解决。mp3wrap似乎是一个不错的解决方案,但是当我播放生成的文件时,时间戳不正确。当您将 mp3 加入到您知道以后要拆分的文件中时,似乎最好使用 mp3wrap。
我只是想将一些 mp3 永久连接在一起。我最终使用 ffmpeg 连接文件:
一、安装ffmpeg
Ubuntu 15.04+
Ubuntu 14.10 及更低版本
访问http://ffmpeg.org/download.html,下载其中一个静态构建,解压,然后复制到 /usr/local/bin
ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3
更多信息: https ://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245
如前所述,
mp3wrap
是一个很好的解决方案。不过,它可能并非一直有效。据我所知,mp3wrap
假设所有输入文件都具有相同的特征,例如 VBR 与 CBR、比特率等。如果不满足这个假设,它很可能会失败。在这种情况下,唯一的解决方案是将所有 mp3 文件解码为原始格式,例如.wav
,将它们与类似的程序连接起来,sox
然后将所有文件重新编码为 mp3。大多数人都在建议
mp3wrap
,但它有缺点:生成的文件不会在某些播放器中报告其完整长度,然后您无法超越该点。mp3cat
据我所知,这项工作做得又快又好。可以在http://mulholland.xyz/dev/mp3cat/下载,使用方法如下:另一种可能性是
sox
但它似乎很慢(可能它解码并重新编码音频?)
它基于单个字符进行字母排序。这意味着“01”在“1”之前,因为naught 的值低于1。
这是一个例子。我有一个目录,其中包含名为 1、2、3、04、05 和 06 的文件。它们是包含自己文件名的文本文件:
所以,是的,它会的;但您需要确保所有文件都正确“填充”。
这个漂亮的 bash 脚本行可以让您直观地比较文件名,从而很容易发现任何错误:
它的输出将如下所示:
如果不是,您将需要填充文件名:在 StackOverflow 上填充文件名的Bash 脚本解释了如何执行此操作。
编辑。投票给奥利的答案,这要好得多。:P
我会留下我的,因为它添加了一些东西,但你应该使用他的解决方案,
请记住,
sort
仍然会按照我上面描述的方式对事物进行排序,如果它们的长度不相等,您仍然需要填充文件名。我发现在线服务audio-joiner工作得很好,并保留了正确的时间戳(与 mp3wrap 相反)。
perl
且可用的终端)ffmpeg
ffmpeg
我喜欢bmaupin 的评论,但它可以通过使用产生自然排序的(版本)数字
sort -V
:而且您不必处理
' " () [] {}
文件名中的特殊字符。让我总结一下其他答案:
mp3wrap
将mp3文件连接成一种特殊的“concatenated mp3 file”格式,这种格式速度更快,因为它不需要重新编码,但缺点是不是一个有长度的普通mp3文件等等。ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3
输入起来很麻烦,但应该很好用,因为它是用于连接视频文件的标准命令。但是,在我的测试中,它在输入文件转换中引入了故障。sox file1.mp3 file2.mp3 target.mp3
应该很好用,当然更容易打字,但它也在我的测试中引入了故障。即使我使用
sox
先将每个 .mp3 文件转换为 .wav,然后sox file1.wav file2.wav target.wav
,输出也包含可听见的故障。但是,如果我使用
mpg123
将 mp3 文件解码为 .wav,那么我可以将 .wav 文件与 Sox 连接,而不会听到故障。这表明sox
(并且可能ffmpeg
)的问题在于 mp3 文件的解码。mp3cat
显然效果很好,但我懒得测试它,因为在我的发行版的存储库中找不到它奇怪的是还没有人提到
mpg123
。尽管在其 20 多年的历史早期就受到安全和许可问题的困扰,但它是最初的 mp3 播放器之一,应该相当稳定。由于它在将 mp3 参数发送到声卡之前会自动连接其 mp3 参数(以无故障的方式),因此我们只需使用-w
选项告诉它输出到 Wave 文件即可。然后lame
将其编码回mp3。这是一个完成此任务的脚本:使用示例: