分割音频MP3文件

6
我希望使用NodeJS将音频文件分割成较小的部分,并将这些部分保留为单独的音频文件。有没有人可以推荐一种可行的方法,计算时间相对较低?

2
我正在寻求一个在Node中分割mp3文件的解决方案,我并不是在寻求工具推荐。 - jvrdelafuente
2
你能解释一下这些负面点吗? - jvrdelafuente
2
很可能是因为这个问题成为了Meta主题的主题 -- 这通常会引起大量人们对帖子的关注,从而导致大量的赞/踩。此外,你的问题可能被关闭,因为从所读到的内容来看,你似乎在寻找一个特定的模块来完成这个任务。 - Qantas 94 Heavy
2
@Qantas94Heavy 谢谢,我不同意关闭我的问题的动机。我正在寻找解决我的问题的方法。我提到了模块的评论,但这个问题的目的是在Node中找到分割mp3文件的方法。 - jvrdelafuente
3个回答

19
您可以使用ffmpeg,它基于命令行,这很棒因为它是可访问的,但子进程有时可能会死亡。这里有一个节点接口,将ffmpeg的使用抽象出来,而不是通过命令行调用:https://npmjs.org/package/ffmpeg 在命令行中,您的最终命令可能如下所示:
ffmpeg -i long.mp3 -acodec copy -ss 00:00:00 -t 00:30:00 half1.mp3
ffmpeg -i long.mp3 -acodec copy -ss 00:30:00 -t 00:30:00 half2.mp3

这个命令的意思是:
  • -i:输入文件为long.mp3
  • -acodec:使用音频编解码器
  • copy:我们正在复制
  • -ss:开始时间
  • -t:长度
  • 最后是输出文件名
为了处理潜在的超时/挂起进程,您应该“重试”并提供超时。不确定错误回调的工作效果如何。即它们是否在挂起的进程上适当地失败。

我之前了解过ffmpeg,但是我正在使用modulus.io来部署我的应用程序,我不确定是否可以使用ffmpeg命令行,因为我需要在使用之前安装它。 - jvrdelafuente
@jvrdelafuente 或许 http://npmjs.org/package/ffmpeg-bin 可以解决问题。你可以尝试将其作为依赖项添加,而不需要进行其他任何工作。 - Parris
我无法尝试那个,因为我正在使用Windows工作,并且我不确定modulus.io正在使用哪个操作系统。我将尝试直接在modulus上执行。你能给出一个使用示例吗?因为我不确定如何将ffmpeg库与ffmpeg-bin混合使用。 - jvrdelafuente
@jvrdelafuente 你可以获取 Windows 版本的 ffmpeg 二进制文件,将它们放入 git 存储库中,并在 package.json 中包含该存储库。你也可以将 Mac、Linux 等二进制文件放在其中。 - Parris
我会在这个周末尝试您的解决方案。谢谢。 - jvrdelafuente
显示剩余2条评论

1

我曾经使用过SoX这个命令行工具来处理音频。请确保在UNIX系统中从源代码构建它以获取MP3支持。你需要的命令是trim。

这里是官方文档 - http://sox.sourceforge.net/sox.html


1

您可以尝试使用node-lame来解码mp3文件为原始PCM数据,然后直接将数据分割成两段……我并不是音频格式方面的专家,但我的假设是PCM是一种相对简单的格式,没有太多比特操作,所以仅需计算应该在第一部分和第二部分中占百分之几,然后进行分割即可得到两个数据块,您可以使用同一模块将其重新编码为mp3文件。

如果mp3文件是恒定比特率的,则可能可以直接对mp3文件进行相同的操作。我记得在Napster和Kazaa等野蛮时代,往往下载一半就断了,但我仍然可以听到歌曲的前半部分而没有任何问题。我不知道这样做能否完全满足您的要求,但值得一试。


1
我想根据开始时间和结束时间来分割一首歌。您的方法可以实现这个目标吗?您能举个例子吗?我不确定我是否理解得很好。 - jvrdelafuente
我不确定node-lame是否让你访问歌曲的实际运行时间,但假设您事先知道歌曲确切地长3分钟,并且您想将歌曲分为前2分钟和最后1分钟。假设它是一个恒定比特率的mp3文件,并且您可以直接拆分它,而无需解码。您会发现这个文件恰好是3兆字节。您可以将文件读入内存中,获取文件的前两个兆字节并保存它,然后获取文件的最后一个兆字节并保存它。从而通过拆分文件来分割歌曲。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接