将几个.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来连接文件:
-
首先,安装ffmpeg
-
Ubuntu 15.04+
sudo apt install ffmpeg
-
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重新编码为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
而且您不必处理文件名中的' " () [] {}
等特殊字符。