关闭。这个问题需要更多 focused .它目前不接受答案。
想改进这个问题?更新问题,使其仅关注一个问题 editing this post .
3年前关闭。
Improve this question
编辑:
该问题被标记为过于宽泛,因此我将其分解为一个简单的问题:
如何从网页中播放一系列音频文件(实际上是 React),而播放之间没有小间隙?
我有一个音频文件(在本例中为 mp3,但可以是任何格式),它被 Audacity 分成 100 个单独的文件。
我将这些文件作为二进制条目存储在 MongoDB 中,以便以后获取它们。 (如果解决方案基于它,文件可以整体存储在服务器上的目录中)
在带有简单 Buffet.concat() 的 Node.JS 中,我设法加入了二进制文件,并且可以将整个文件下载为单个 mp3。
问题是,输出文件只有 3 秒长(这是一个单一的 mp3 block ),但即使玩家对 3 秒的长度感到困惑,也可以在实际持续时间内播放。它也比原始完整文件大约 3MB,可能是因为 block 之间的 header 被连接起来。
我的问题是,我怎么可能将音频 block 与输出中的正确标题合并?我知道 ffmpeg 可以做一些黑魔法,但我主要需要一个缓冲区输出来使文件可以作为网页内的流播放而无需下载。这一点非常重要。
提前非常感谢:)
最佳答案
在第一种情况下,您正在获取一个音频文件和 转换 它变成许多音频文件。
在第二种情况下,您使用了许多二进制文件(是的,它们仍然是音频文件,但您使用的进程忽略了这一事实)和 连接 将它们放入一个二进制文件中。
大多数音频文件格式都包含一堆描述其内容的信息( channel 、比特率等)。使用专为处理音频文件而设计的软件,拆分音频文件,生成更多音频文件,每个文件都有自己的一组描述性数据。
尝试在不考虑其内容的情况下连接这些文件会导致单个文件包含多个音频文件的信息。由于大多数音频格式不是为这种情况而设计的,因此一些播放器只会看到第一个部分并认为其余部分是垃圾,而其他播放器会告诉您内容是一回事,而播放其他内容。
在流程的两端以相同的方式处理文件。
Javascript 没有以您想要的方式轻松操作音频的 native 方式。不过,您确实有几个选择:
关于javascript - 在 Node.JS 中将多个音频文件合并/合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53216556/