【问题标题】:How can I concatenate two mp3 files with different bit rates如何连接两个具有不同比特率的 mp3 文件
【发布时间】:2010-12-13 01:30:53
【问题描述】:

我的 linux web 服务器上安装了 FFmpeg。当我执行以下代码时,我有间歇性的结果。

我想我已经发现当 MP3 具有不同的比特率时,它们不会编译。

exec ('cat '. $pair['source_file'] . ' ' . $pair['translated_word_file'] . '>' . $temp_mp3);

我可能在网上找到了一些文章,其中提到将它们分开,然后以一致的比特率将它们捆绑在一起。

我已经确认这不适用于基本的“cat”功能,并且如果它们具有相同的采样率,则可以使用“sox”。

现在问题变成了“让它们达到相同采样率的最佳方法是什么?”

【问题讨论】:

  • 你说的是不同的采样率还是不同的比特率?

标签: php linux mp3 ffmpeg


【解决方案1】:

您需要找到一种方法来去除所有 ID3 标签和其他废话,并将其分解为 MP3 流。然后,在 MP3 帧上剪切和拼接。你不应该让一个框架不完整!

如果您有正确的帧流并且在流中间没有任何随机数据(标签),那么即使文件的比特率发生变化,拼接文件也应该没有问题!

但是!您可能应该坚持使用相同的位深度(例如 16 位)和采样率(例如 44.1kHz)。您将这两个参数与问题中的输出比特率混淆了。

看到这个:http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html

还有这个:http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm

编辑:对此的一个重要警告是位水库。虽然您可以创建流并在帧上拆分,但如果位库正在使用中,某些数据可能会损坏。我之前根据我对一些流的经验得出了这个答案。几年后,我现在知道您无法可靠地拼接所有流的帧。

【讨论】:

  • 我必须承认,我仍在弄清楚采样率和比特率之间的差异。您对口语有建议的“评分”吗?
  • 暂时将 mp3 转换为原始格式,然后合并,然后重新编码是否有意义?然后我可以在最后分配 id3 标签?我会知道标签应该是什么......
  • 采样率是从记录设备获取样本的速度。频率响应与此有很大关系。 CD 的采样频率为 44.1kHz。也就是说,每秒测量 44,100 次压力水平。位深度是进行这些测量的分辨率。 8 位仅允许 256 级测量,而 16 位允许 65,536。 CD 使用 16 位样本。现在您所指的比特率是编解码器使用的带宽量。带宽越低,音频质量越低...
  • 很多互联网广播电台将使用 128kbit、44.1kHz 16 位立体声流。这意味着 MP3 编解码器将使用每秒 128kbits 的带宽来近似最初以 44.1kHz 16 位采样的音频。对于语音,您可以在 64kbit Mono、44.1kHz 16-bit 下获得良好的质量。 48kbit 也可以。对于“电话质量”,您可以降低到 24kbit MONO、22.05kHz、16-bit。
  • 您可以转换为原始格式,进行拼接,然后重新编码。请记住,每次应用有损编解码器(如 MP3)时,都会进一步降低质量。您将重新压缩已经压缩的内容。
【解决方案2】:

首先转换一个 mp3 的比特率,以便两者具有统一的比特率。然后进行连接。

【讨论】:

  • 如果你已经在使用合适的工具来打开一个.... 还不如做“合适的” :-)
  • 不情愿地,我必须承认这是答案。我必须将它们全部下载到我的服务器并通过批量调整运行它们,然后将它们上传回服务器。显然,有一种方法可以做得更好。这会将它们转换为“特权格式”,然后组合然后指定比特率。但是,我无法在我的服务器上执行此操作。
  • 经过更多研究,我发现这真的只适用于我的家用机器。我将不得不尝试更强大的连接选项。
  • 您可以拥有没有统一比特率的 MP3。这不是这里的问题。见:mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm
  • @Brad:问题是 sox 拒绝工作,除非有统一的比特率。这些天我和 sox 一起工作。当尝试单独使用“猫”时,几乎没有媒体播放器可以理解该文件。
猜你喜欢
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 2020-12-12
相关资源
最近更新 更多