python - 在 python(实时)中将 mp3 转码为 ogg 的简单方法?

标签 python audio transcoding

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

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

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

我看过的东西:

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

建议?

最佳答案

您知道,使用 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 编码器将在不同的进程中运行,并且可能会在不同的内核上进行调度。如果您尝试对单线程库执行相同的操作,则转码速度只能达到单核处理速度。

关于python - 在 python(实时)中将 mp3 转码为 ogg 的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5464912/

相关文章:

python - 如何过滤或限制在 PyGTK 文本输入字段中输入的文本?

math - 主动噪声消除的原理是什么?

audio - 将音频广播到网站

java - 以编程方式转码 MPEG-2 视频

python - 用双引号而不是单引号返回 Python 列表中的变量

Python + Ubuntu Linux + nohup 错误 : [1]+ Exit

video - 场景剪辑检测和一致的 GOP 大小 - 自适应流

iphone - 如何同时对多个轨道(音频和视频)使用 AVAssetReader 和 AVAssetWriter?

Python网络浏览器打开带有书签的url,例如www.something.com/file.html#top

ios - 如何暂停/恢复以repeatActionForever开头的播放声音