我正在寻找可以将 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/