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

Bak*_*yor 60 command-line bash files

正如这里建议的那样我使用cat命令将几个 .mp3 文件连接成一个 .mp3 文件。

想象一下,我在当前文件夹中有以下 .mp3 文件:

001001.mp3 001002.mp3 001003.mp3 001004.mp3 001005.mp3
Run Code Online (Sandbox Code Playgroud)

或者,像这样:

096001.mp3 096002.mp3 096003.mp3 096004.mp3
Run Code Online (Sandbox Code Playgroud)

我需要按升序连接这些 .mp3 文件,即 001001.mp3+001002.mp3+001003.mp3+etc.

为了将这些 .mp3 文件合并为一个,我在当前文件夹中执行以下命令:

cat *.mp3 > final.mp3
Run Code Online (Sandbox Code Playgroud)

我测试了最终的 .mp3 文件,这是我所期望的,但我需要确保上面的命令按升序选择文件。

我可以确定上面的命令总是按升序连接文件吗?

谢谢先生

Oli*_*Oli 70

cat不是这项工作的正确工具。MP3 格式有各种各样的垃圾,可以潜伏在文件的前端和末尾,这需要被剥离。mp3wrap是你想要的。它将排除文件中的任何元数据并将音频粘贴在一起。

sudo apt-get install mp3wrap
mp3wrap output.mp3 *.mp3
Run Code Online (Sandbox Code Playgroud)

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

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

  • 正确 - cat 将通过在单个 mp3 文件中“创建一个数组”(原为)mp3 文件来破坏 mp3 文件格式。但如果播放器软件足够智能,它似乎可以工作。 (2认同)

bma*_*pin 39

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

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

  1. 一、安装ffmpeg

  2. ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3

更多信息:https : //trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245

  • 是的,我使用了 avconv 一段时间,但后来我需要一些 ffmpeg 有而 avconv 没有的功能,从那以后我就没有使用过它。这些天来,当我已经知道 ffmpeg 具有时,检查 avconv 是否具有我需要的功能感觉就像是在浪费时间。 (2认同)

loe*_*org 8

如前所述,mp3wrap是一个很好的解决方案。不过,它可能不会一直有效。据我所知,mp3wrap假设所有输入文件都具有相同的特征,例如 VBR 与 CBR、比特率等。如果不满足这个假设,它很可能会失败。在这种情况下,唯一的解决方案是将所有 mp3 文件解码为原始格式,如.wav,将它们与类似的程序连接起来,sox并通过将所有文件重新编码为 mp3 来完成。


Ste*_*zzo 5

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

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

test$ cat *
04
05
06
1
2
3
Run Code Online (Sandbox Code Playgroud)

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

这行漂亮的 bash 脚本可以让您直观地比较文件名,从而很容易发现任何错误:

for f in $(ls); do printf "%05s\n" "$f"; done
Run Code Online (Sandbox Code Playgroud)

它的输出将如下所示:

   04
   05
   06
    1
    2
    3
Run Code Online (Sandbox Code Playgroud)

如果不是,则需要填充文件名:在 StackOverflow 上填充文件名的 Bash 脚本解释了如何执行此操作。


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

mp3wrap output.mp3 `ls -1 *.mp3 | sort`
Run Code Online (Sandbox Code Playgroud)

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


jos*_*lvo 5

大多数人都在建议mp3wrap,但它有缺点:生成的文件在某些​​播放器中没有报告其完整长度,然后您无法超过该点。

mp3cat据我所知,这项工作做得又快又好。可以在http://mulholland.xyz/dev/mp3cat/下载,使用方法如下:

mp3cat file1.mp3 file2.mp3 file3.mp3
Run Code Online (Sandbox Code Playgroud)

另一种可能性是 sox

sudo apt-get install sox libsox-fmt-mp3
sox file1.mp3 file2.mp3 target.mp3
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

57370 次

最近记录:

4 年,7 月 前