当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

正如我所建议的那样,here我使用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以检查它们的顺序是否正确。当我最初写这个答案时(超过六年前!),通配符显然表现不佳,但我认为他们现在这样做了。

您可能需要重命名文件,例如,它们已编号但不是zero-padded,{1-11}.mp3将按1 10 11 2 3 4 5 6 7 8 9排序。 This can be fixed easily

次佳解决办法

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之类的程序连接起来,并由re-encoding完成所有mp3。

第四种办法

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

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

test$ cat *
04
05
06
1
2
3

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

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

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

它的输出将如下所示:

   04
   05
   06
    1
    2
    3

如果不是,则需要填写文件名:StackOverflow上的Bash script to pad file names说明了如何操作。


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

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

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

第五种办法

大多数人都建议使用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

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

第六种办法

我发现在线服务audio-joiner能够很好地工作并保留正确的time-stamp(与mp3wrap相反)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6933.html,未经允许,请勿转载。