将几个.mp3文件连接成一个.mp3

正如我在这里建议的那样,我使用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是你想要的。 它将排除文件中的任何元数据并将音频粘在一起。

 sudo apt-get install mp3wrap mp3wrap output.mp3 *.mp3 

在执行此操作之前,请运行ls *.mp3以检查它们的顺序是否正确。 当我最初写这个答案时(超过六年前!),通配符显然表现不佳,但我认为他们现在这样做了。

您可能需要重命名文件,例如,它们已编号但未填零, {1-11}.mp3将按1 10 11 2 3 4 5 6 7 8 9排序。 这可以很容易地修复 。

mp3wrap似乎是一个不错的解决方案,但是当我播放生成的文件时,时间戳不正确。 当你将mp3加入一个你知道你想要稍后拆分的文件时,似乎最好使用mp3wrap。

我只想永久地将一些mp3连接在一起。 我最终使用ffmpeg来连接文件:

  1. 首先,安装ffmpeg

    • Ubuntu 15.04+

       sudo apt install ffmpeg 
    • Ubuntu 14.10及以下
      转到http://ffmpeg.org/download.html ,下载其中一个静态版本,解压缩并复制到/ usr / local / bin

  2. 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重新编码为mp3来完成。

它根据单个字符进行字母排序。 这意味着“01”出现在“1”之前,因为naught的值低于1。

这是一个例子。 我有一个名为1,2,3,04,05和06的文件的目录。它们是包含自己文件名的文本文件:

 test$ cat * 04 05 06 1 2 3 

所以, 是的,它会; 但是你需要确保所有文件都正确填充。

这个漂亮的bash脚本行将让您在视觉上比较文件名,从而很容易发现任何错误:

 for f in $(ls); do printf "%05s\n" "$f"; done 

它的输出将如下所示:

  04 05 06 1 2 3 

如果不是,则需要填充文件名:在StackOverflow上填充文件名的Bash脚本说明了如何操作。


编辑。 为Oli的回答投票,它会好得多。 :P
我会离开我,因为它增加了一些东西,但你应该使用他的解决方案,

 mp3wrap output.mp3 `ls -1 *.mp3 | sort` 

请记住, sort仍然会按照上面描述的方式对事物进行排序,如果文件名长度不相等,您仍需要填充文件名。

我发现在线服务音频连接器工作得非常好,并保留了正确的时间戳(与mp3wrap相反)。

大多数人都建议使用mp3wrap ,但它有缺点:生成的文件不会在某些玩家中报告其全部长度,然后你就无法寻求超越这一点。

就我所知, mp3cat可以快速完成工作。 它可以在http://mulholland.xyz/dev/mp3cat/下载,使用方法如下:

 mp3cat file1.mp3 file2.mp3 file3.mp3 

另一种可能性是sox

 sudo apt-get install sox libsox-fmt-mp3 sox file1.mp3 file2.mp3 target.mp3 

但它似乎很慢(可能它解码和重新编码音频?)

您可能想尝试使用专用的音频编辑程序(如Audacity )

我喜欢bmaupin的评论 ,但它可以通过使用sort -V生成自然类型的(版本)数字:

 find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3 

而且您不必处理文件名中的' " () [] {}等特殊字符。