8

その場で MP3 (他の形式はプラス) を OGG にトランスコードできるライブラリ/モジュールを探しています。

これが必要な理由: 個人用の比較的小さな Web アプリを作成しています。これにより、人々はブラウザー経由で音楽を聴くことができます。<audio>リスニング部分については、新しい強力なタグを使用する予定です。ただし、そこで MP3 をサポートするブラウザーはほとんどありません。ライブ トランスコーディングは、ディスク スペースを浪費せず (音楽ライブラリ全体を変換する場合のように)、パフォーマンスの問題も発生しないため、最良のオプションのように思えます。

基本的に、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 に答える