合并 mp3 文件的最佳方法是啥? [关闭]

Posted

技术标签:

【中文标题】合并 mp3 文件的最佳方法是啥? [关闭]【英文标题】:What is the best way to merge mp3 files? [closed]合并 mp3 文件的最佳方法是什么? [关闭] 【发布时间】:2008-09-15 13:02:39 【问题描述】:

我有很多很多 mp3 文件,我想将它们合并到一个文件中。我用的是命令行方法

copy /b 1.mp3+2.mp3 3.mp3

但是当它们有很多并且它们的命名不一致时会很痛苦。时间似乎也永远不会正确。

【问题讨论】:

啊,对音乐文件使用dos二进制合并工具是不可取的。音乐文件带有指示音乐信息的标题。这就是不一致的原因。 您只需使用以下命令即可完成此操作:rm -f all.mp3 && cat *.mp3 > temp_file.dat; sleep 1; mv temp_file.dat all.mp3 && echo && echo "Your mp3 files have been merged into one file - all.mp3" && echo。如果你觉得这里阅读困难,你可以抓住它from this link 如果你不关心重新编码,你可以使用ffmpeg -f concat -i <(printf "file '%s'\n" /absolute/path/to/*.mp3) -aq 2 concatenated.mp3之类的东西。 -aq 2 对应于lame 中的-V2 @nisetama 大多数人可能会关心重新编码,因为它会不必要地降低质量...... 由于这个问题已经结束,我将把它放在这里以供快速参考:github.com/dmulholland/mp3cat - 支持 VBR 和 id3,到目前为止对我来说非常有用。 【参考方案1】:

David's answer 是正确的,只是连接文件会使 ID3 标记分散在内部(尽管这通常不会影响播放,因此您可以执行“复制 /b”或在 UNIX 上执行“cat a.mp3 b.mp3 > combine.mp3" 紧要关头)。

但是,mp3wrap 并不是将多个 MP3 组合成一个“干净”文件的正确工具。它实际上没有使用 ID3,而是在 MP3 帧(“包装”部分)中插入了自己的custom data format,这会导致播放问题,尤其是在 iTunes 和 iPod 上。虽然文件播放正常,如果你让它们从头到尾运行(因为播放器会跳过这些任意非 MPEG 字节),文件持续时间和比特率将被错误报告,这会中断搜索.此外,mp3wrap 会清除所有 ID3 元数据,包括封面,并且无法使用正确的文件长度更新 VBR 标头。

mp3cat 本身会产生一个很好的连接数据文件(因此,比 mp3wrap 更好),但它也会去除 ID3 标记,并且无法使用连接文件的正确长度更新 VBR 标头。

这里有一个good explanation 这些问题和方法(实际上是两个)来组合 MP3 文件并在原始元数据完好无损的情况下产生“干净”的最终结果——它是命令行,因此适用于 Mac/Linux/BSD 等。用途:

mp3cat 只将 MPEG 数据帧组合成一个连续文件,然后 id3cp 将所有元数据复制到组合文件中,最后 VBRFix 更新 VBR 标头。

对于 Windows GUI 工具,请查看Merge MP3——它可以处理所有事情。 (VBRFix 也有 GUI 形式,但它不进行连接。)

【讨论】:

实际上vbrfix 会自行丢弃非数据帧,因此不需要调用mp3cat :) (而且,由于vbrfix 也将只使用最后一个ID3v1 标签,也许id3cp 也不是必需的——不过我仍在我的包装脚本中使用它......) 确实如此......虽然您不能跳过 mp3cat 步骤,但您仍然必须以某种方式连接文件。由于您提到的原因,我更喜欢使用 id3cp - 如果您只是将一堆文件放在一起,因为 ID3v2 是页眉,ID3v1 是页脚,这取决于这些标签中的哪个或两个存在,只是执行 cat 和VBRFix 将是不可预测的(它是使用第一个 mp3 的 ID3 标签,还是最后一个?)。此外,VBRFix 是这些实用程序中最狡猾的,所以我更愿意给它最少的工作量。 :) 很公平——在我的 debian 系统上,mp3cat 是我唯一必须从源代码编译的东西,所以这就是为什么我只 cat 文件然后在结果上运行 vbrfix -ri1 -ri2 -always 的原因之一: ) 这是一个用于从文本文件中获取文件列表的命令,每行一个用于运行 mp3cat。 cat playlist.txt | while read fn ; do cat "$fn"; done; | mp3cat - ->out.mp3 请注意有两个名为 mp3cat 的工具:MP3cat by Darren Mulholland 和 mp3cat by Tom Clegg。【参考方案2】:

正如 Thomas Owens 所指出的,简单地连接文件会留下多个 ID3 标头分散在生成的连接文件中 - 因此时间/比特率信息将非常错误。

您将需要使用可以为您组合音频数据的工具。

mp3wrap 将是理想的选择 - 它旨在将 MP3 文件连接在一起,无需解码 + 重新编码数据(这将导致音频质量损失),并且还将智能处理 ID3 标签.

也可以使用 mp3splt 工具将生成的文件拆分回其组成部分 - mp3wrap 将信息添加到 IDv3 注释以允许这样做。

【讨论】:

我真正想要的是一个 GUI 来重新排序它们并将它们作为一个具有正确标题的文件输出。我最终重命名了文件以使它们以正确的顺序排列并使用 mp3wrap FullDisk.mp3 *.mp3 其实我一开始试过mp3wrap,结果很失望。输出 mp3 文件播放不正确。 joelhardi 的方法(cat + vbrfix)效果很好,而且我根本不需要任何标签。 mp3wrap 还在维护吗?网站看起来像是 1993 年的,我不想依赖如此冒险的东西。【参考方案3】:

使用 ffmpeg 或类似工具将所有 MP3 转换为一致的格式,例如

ffmpeg -i originalA.mp3 -f mp3 -ab 128kb -ar 44100 -ac 2 intermediateA.mp3  
ffmpeg -i originalB.mp3 -f mp3 -ab 128kb -ar 44100 -ac 2 intermediateB.mp3

然后,在运行时,将您的文件连接在一起:

cat intermediateA.mp3 intermediateB.mp3 > output.mp3

最后,通过 MP3Val 工具运行它们以修复任何流错误,而无需强制完全重新编码:

mp3val output.mp3 -f -nb

【讨论】:

cat 命令是否有 Windows 替代方案? Windows:复制 /b file1+file2 dest 根据 ffmpeg 文档,有一个内置的文件连接,使用相同的编解码器或不同的编解码器 是的,mp3val 是要走的路。对于 Mac OS,在triq.net/articles/mp3-scan-repair-download 处有 mp3val 的替代方案 这会重新编码原始文件,导致质量下降【参考方案4】:

时间问题与 MP3 文件的 ID3 标头有关,这是您的方法在复制整个文件时没有考虑到的问题。

您有选择的语言想要使用还是没关系?这将影响支持您想要的操作的可用库。

【讨论】:

这只是一个个人项目,所以我不关心语言。简单是最好的,我最大的问题是它似乎不需要花太多时间,但有。回答您的问题 VB.NET。谢谢【参考方案5】:

MP3 文件有你需要尊重的标题。

您可以使用像Open Source Audio Library Project 这样的库并围绕它编写一个工具。 或者你可以使用像Audacity这样理解mp3文件的工具。

【讨论】:

【参考方案6】:

我真正想要的是一个 GUI 来重新排列它们并将它们作为一个文件输出

Playlist Producer 正是这样做的,将它们解码并重新编码成一个组合的 MP3。它专为创建混音磁带或简单的播客而设计,但您可能会发现它很有用。

(披露:我编写了软件,如果您购买专业版,我会获利。精简版是免费版本,有一些限制)。

【讨论】:

是否有机会为 Windows 8 更新? 该软件完全兼容所有现代版本的Windows,包括Windows 8、8.1和10。我已经很长时间没有更新网站了,该大修了,但是软件仍然可用并且工作正常。【参考方案7】:

正如大卫所说,mp3wrap 是要走的路。但是,我发现它没有修复音频长度标题,因此即使所有数据都在那里,iTunes 也拒绝播放整个文件。 (我合并了三个 7 分钟的文件,但它只看到了前 7 分钟。)

我找到了this blog post,它解释了如何解决这个问题,以及如何从原始文件中复制 ID3 标签(mp3wrap 会自行删除您的 ID3 标签)。或者只是复制标签(使用来自id3lib 的id3cp),这样做:

id3cp original.mp3 new.mp3

【讨论】:

mp3wrap 似乎被遗弃了,或者至少是某个随机人的项目,很容易停止更新。有什么方法可以用 ffmpeg 做到这一点?【参考方案8】:

我会使用 Winamp 来执行此操作。创建要合并为一个的文件的播放列表,选择磁盘写入器输出插件,选择文件名,您就完成了。您将获得的文件将是正确的 MP3 文件,您可以设置比特率等。

【讨论】:

当一个文件名放入时,它只是简单地覆盖文件。我错过了什么吗? 您输入的文件名应该是您希望将合并输出保存到的文件名。但是,此解决方案涉及重新编码音频(解码然后重新编码),这将导致音频质量下降(因为 MP3 是一种有损格式)。我认为这也需要相当长的时间:)【参考方案9】:

我以前没有听说过 mp3wrap。看起来很棒。我猜有人也在某个地方把它变成了一个gui。但是,为了回应原始帖子,我编写了一个执行 COPY /b 方法的 gui。所以,在幕后,没有什么新鲜事,但是如果你有很多文件要合并,这个程序就是为了让这个过程不那么痛苦……而且你不想重新编码和每组文件合并是相同的比特率。如果你有这个(并且你在 Windows 上),请查看 Mp3Merge:http://www.leighweb.com/david/mp3merge,看看这是否是你要找的。​​p>

【讨论】:

这对我来说很好用!【参考方案10】:

如果您想要免费的东西,它具有简单的用户界面,可以制作完全干净的mp3,我推荐MP3 Joiner。

特点:

去除 ID3 数据(ID3v1 和 ID3v2.x)并且不添加它自己的(与 mp3wrap 不同) 无损加入(不对 .mp3 进行解码和重新编码)。无需编解码器。 简单的用户界面(见下文) 内存使用率低(使用流) 非常快(与 mp3wrap 相比) 我写的 :) - 所以你可以请求功能,我会添加它们。

链接:

MP3 Joiner 网站:Here 最新安装程序:Here

【讨论】:

在 windows7 上无法启动。 @stiv 确实如此 :) 我很想知道你的机器出了什么问题。 @James 无法激活。无法使用。 @ChristianDalager 有一个已知的错误,其中 '.'在激活窗口打开的链接中,从 url 中删除。尝试单击“激活”,然后将打开的“&v=10”部分网址更改为“&v=1.0”。这适用于任何使用 Firefox 的人。之后应该可以正常工作。 在 Windows 7 上不起作用,只是在启动时显示错误(抱怨输入字符串格式错误,仅此而已)。【参考方案11】:

我个人会使用带有音频通过选项的 mplayer 之类的东西,例如 -oac 复制

【讨论】:

【参考方案12】:

而不是使用命令行来做

复制 /b 1.mp3+2.mp3 3.mp3

您可以改用"The Rename" 将所有 MP3 片段重命名为一系列名称,这些名称根据某种计数器按顺序排列。然后你可以使用相同的命令行格式,但稍微改变一下:

复制 /b *.mp3 output_name.mp3

假设您同时翻录了所有这些片段 MP3,并且它们具有相同的音频设置。当我将 .aa 中的有声读物转换为单个 .mp3 时,这对我来说非常有用。我不得不将所有的 .aa 文件刻录到 9 张 CD 上,然后翻录所有 9 张 CD,然后剩下大约 90 张 mp3。在 a55 中真的很痛苦。

【讨论】:

以上是关于合并 mp3 文件的最佳方法是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

防止用户在后台处理时单击表单上的任何内容的最佳方法是啥? [关闭]

合并大量小文件以最大化可恢复性的最佳方法是啥

在 mysql 中存储二进制数据(图像、pdf、mp3、视频等)的最佳方法是啥,为啥?

将动态内容推送到单独的 html 文件中的最佳方法是啥[关闭]

在 Delphi 2009 中显示 PDF 文件的最佳方法是啥[关闭]

在 Java 应用程序中读取 XML 文件的最佳/最简单方法是啥? [关闭]