5

我有一个 Tornado Python 服务器,它一次接受一个可变比特率 mp3 文件(这些块由固定数量的帧组成)。

我所做的只是将二进制文件向前传递,但是,我想知道块的持续时间。因为它是可变比特率,所以我无法进行简单的计算。我正在研究 pymedia,但我在 mac OS 上开发,似乎 pymedia 无法安装在那里(而且,它自 2006 年以来一直没有更新)。我也试过 pymad 但无法安装它(它自 2007 年以来一直没有更新),无论如何它似乎更以文件为中心。

理想情况下,我想以例如诱变剂的方式从每个块中提取比特率。但是,mutagen 需要一个文件作为输入,而我希望输入一个 mp3 帧或一系列这样的帧。

def _on_read_frames(self, data):
  logging.info('read from input:\n%s', data)
  binary_audio = base64.b64decode(data)
  # need to find out how many miliseconds went by here

更新:这是近实时流媒体架构的一部分,因此 mp3 以小块编码,所以我目前的解决方案是使用允许简单计算的恒定比特率,我意识到使用可变比特率几乎没有任何好处这里。

4

1 回答 1

1

每帧有 1,152 个样本,所以如果你的块是固定数量的N帧,那么你的块是固定长度的N*1152样本。要将其转换为毫秒,您需要从帧头中找到采样率。

你只需要一个 MP3 解析器。这是完整解码器的源代码:https ://bitbucket.org/portalfire/pymp3 包括帧头解析代码,这确实是您所需要的。

以下是有关格式的更多文档:http: //www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header

于 2014-01-11T08:51:09.587 回答