问题描述
正如我所建议的那样,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来连接文件:
-
首先,安装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
之类的程序连接起来,并由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相反)。