首页 > 解决方案 > 如何连接两个非常不同的 mp3 文件(差异比特率、通道、采样率、bitdeph)?

问题描述

作为输入,我得到一个 mp3 文件(input.mp3),然后我需要将它分成两个单独的部分(完成)并在这些部分之间插入另一个 mp3(second.mp3)。

问题:我尝试使用每个命令来连接文件,将它们转换为 .ts 等。但我总是只听到第一个 mp3 文件的声音,而第二个文件的声音丢失了。我想我必须将我的 mp3 文件转换为与 input.mp3(比特率,采样率通道数)文件完全相同的格式,然后才能将其连接到它。

我可以连接 input.mp3 的两个部分,但无论我做什么,我都无法与 second.mp3 连接。

我正在使用带有 exec 和 ffmpeg.exe 文件的 php。是否可以对其进行编码,因此无论输入如何,我都可以将 second.mp3 转换为适合连接 mp3 的?

标签: ffmpegmp3

解决方案


如何连接两个非常不同的 mp3 文件(差异比特率、通道、采样率、bitdeph)?

让我们从每个组件开始......

比特率

这个无所谓。MP3 流可以(并且确实!)在流中改变比特率。只要您加入帧头,就可以了。

位深度

MP3 中不存在采样位深度的概念。您可以以 24 位捕获,编码为 MP3,解码器将解码为 16 位。(或者,使用某些命令行开关,反之亦然!)这不是问题,因为位深度不适用。

采样率

这通常是一个问题。大多数玩家并不认为他们会在中途改变输出采样率。大多数玩家不会尝试重新采样以保持他们已经输出的速率。改变采样率会遇到一些麻烦,我并不感到惊讶。

渠道

这类似于采样率问题,因为它需要更改输出设备的配置。即使玩家支持它,它也不会是无缝的。(除非您从立体声转为单声道,否则单声道可以轻松上混为立体声。)

作为输入,我得到一个 mp3 文件(input.mp3),然后我需要将它分成两个单独的部分(完成)并在这些部分之间插入另一个 mp3(second.mp3)。

这实际上提出了另一个你没有问过的问题......时间。MP3 在相对较大的帧(通常为 576 个样本)中工作,这成为您可以拼接的分辨率。不好。此外,轨道的开头通常有一两帧初始化。

第三个问题是位储存器。这是一个框架中的内容存储在可能有额外空间的不同框架中的地方。

归根结底,您将不得不将所有内容解码为常规 PCM 样本,进行拼接,然后重新编码为 MP3。您还必须将所有内容重新采样到一个共同的时钟速率,并混合到一个特定的通道数。幸运的是,一旦解码为 PCM,这一切都是微不足道和标准的。一旦您的输入流兼容,您就可以在 PCM 帧上任意拼接,这是最细粒度的。


推荐阅读