8

我正在寻找可以即时将 MP3(其他格式是加号)转码为 OGG 的库/模块。

我需要这个:我正在编写一个相对较小的网络应用程序,供个人使用,它将允许人们通过浏览器听他们的音乐。对于听力部分,我打算使用新的和强大的<audio>标签。但是,很少有浏览器支持 MP3。实时转码似乎是最好的选择,因为它不会浪费磁盘空间(就像我要转换整个音乐库一样),而且我不会遇到性能问题,因为同时最多有 2-3 个听众。

基本上,我需要为它提供一个 MP3(或其他任何东西),然后返回一个类似文件的对象,我可以将其传回我的框架(flask顺便说一下)以提供给客户端。

我看过的东西:

  • gstreamer-- 看起来有点矫枉过正,虽然对很多格式都有很好的支持;文档非常缺乏
  • timeside-- 看起来不错且易于使用,但它还有很多我不需要的东西(绘图、分析、UI ......)
  • PyMedia -- 最后更新时间:2006 年 2 月 1 日...

建议?

4

1 回答 1

7

您知道,使用subprocess调用外部实用程序并不可耻。例如,您可以构造如下管道:

#!/usr/bin/env python
import subprocess
frommp3 = subprocess.Popen(['mpg123', '-w', '-', '/tmp/test.mp3'], stdout=subprocess.PIPE)
toogg = subprocess.Popen(['oggenc', '-'], stdin=frommp3.stdout, stdout=subprocess.PIPE)
with open('/tmp/test.ogg', 'wb') as outfile:
    while True:
        data = toogg.stdout.read(1024 * 100)
        if not data:
            break
        outfile.write(data)

事实上,这可能是你最好的方法。考虑到在多 CPU 系统上,MP3 解码器和 OGG 编码器将在不同的进程中运行,并且可能会被安排在不同的内核上。如果您尝试对单线程库执行相同的操作,则只能以单核处理它的速度进行转码。

于 2011-03-28T21:27:57.163 回答