将多个 .mp3 文件合并为一个 .mp3

将多个 .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 文件,它符合我的预期,但我需要当然上述命令按升序选择文件。

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

谢谢先生

答案1

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这很容易修复

答案2

mp3wrap似乎是一个不错的解决方案,但当我播放生成的文件时,时间戳不正确。似乎 mp3wrap 最适合用于将 mp3 合并为一个您知道稍后要拆分的文件。

我只是想永久地将一些 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

答案3

大多数人都建议这样做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

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

答案4

它根据单个字符进行字母排序。这意味着“01”排在“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

如果不是,您将需要填充文件名:用于填充文件名的 Bash 脚本StackOverflow 上解释了如何做到这一点。


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

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

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

相关内容