19

小さなプロジェクトを開始する前に、mp3 形式に関する一般的なアドバイスを探しています。

mp3 形式の内部構造に関する私の理解は最小限です。理想的には、それらの詳細を抽象化するライブラリを探しています。私は Python を使用することを好みます (ただし、そうでない場合は確信できます)。

一連の mp3 ファイルをかなり簡単な方法で変更したいと考えています。私は ID3 タグにはあまり興味がありませんが、オーディオ自体には興味があります。セクションを削除したり (例: 3 分目から 10 秒を削除)、セクションを挿入したり (例: 最後にクレジットを追加) できるようにしたい。

私の理解では、mp3 形式は不可逆であるため、(たとえば) PCM 形式にデコードし、変更を加えてから再度 MP3 にエンコードすると、音質が低下します。(私が間違っていることを知りたいです。)

mp3 形式のままだと、何らかの最小フレームまたはパケット サイズを処理する必要があるため、操作の粒度が粗くなる可能性があると推測します。数秒以内の精度が得られる限り、私はそれに耐えることができます。

PyMediaを見てきましたが、データを処理するには PCM に移行する必要があります。同様に、LAMEはエンコードを支援したいと考えていますが、その場でデータにアクセスすることは望んでいません。ID3 タグのみを扱う他のライブラリをいくつか見てきました。

Python MP3 ライブラリを推奨できる人はいますか? あるいは、PCM に行ってから戻るのは悪いことであり、回避可能であるという私の思い込みを否定していただけますか?

4

5 に答える 5

7

低レベルのことをしたい場合は、pymadを使用してください。MP3 をサンプル データのバッファに変換します。

もう少し高度なものが必要な場合は、Echo Nest Remix APIを使用してください (開示: 本業のためにその一部を書きました)。いくつかの例が含まれています。カウベルの例 (つまり、MoreCowbell.dj ) を見ると、バッファーの代わりにNumPy配列を提供する pymad のフォークが表示されます。そのデータ型により、セクションを切り出して計算することが容易になります。

于 2008-11-22T03:35:23.317 に答える
6

質の高い回答を 3 つ得ました。皆さんに感謝します (そして皆さんに賛成票を投じました)。それぞれが1つの側面に対処しているため、受け入れられた回答として何も選択しなかったので、要約を書きたいと思いました.

MP3で作業する必要がありますか?

  • PCM にトランスコードしてから MP3 に戻しても、品質が低下する可能性はほとんどありません。

  • オーディオ品質を時期尚早に最適化しないでください。簡単なプロトタイプでテストして聞いてみてください。

MP3 での作業

  • ウィキペディアにMP3 ファイル形式の概要があります。

  • MP3 フレームは短く (1152 サンプル、またはわずか数ミリ秒)、そのレベルで中程度の精度が可能です。

  • ただし、ウィキペディアは、「フレームは独立したアイテム (「バイト リザーバー」) ではないため、任意のフレーム境界で抽出することはできません」と警告しています。

  • 本当にデコードを避けたいのであれば、既存のライブラリは役に立たないでしょう。

PCM での作業

このレベルにはいくつかのライブラリがあります。

  • LAME (最新リリース: 2017 年 10 月)
  • PyMedia (最新リリース: 2006 年 2 月)
  • PyMad (Linux のみ? デコーダーのみ? 最新リリース: 2007 年 1 月)

より高いレベルでの作業

  • Echo Nest Remix API (現時点では Mac または Linux のみ) は、非常に高度な操作 (音楽のビートやテンポの場所の検索など) をサポートする Web サービスへの API です。

  • mp3DirectCut (Windows のみ) は、明らかに私が望む操作を実行する GUI ですが、アプリとしては. オープンソースではありません。(私はそれを実行しようとしましたが、Access Denied インストーラー エラーが発生し、フォローアップしませんでした。変化するファイルのライブラリに対してこれらの操作を繰り返し実行したいので、GUI は私には適していません。)

私の計画は、PCM を使用して PyMedia で開始することです。ご協力いただきありがとうございます。

于 2008-11-24T00:42:43.557 に答える
3

MP3 は不可逆ですが、非常に特殊な方法で不可逆です。アルゴリズムは、耳が聞き取れない (または非常に聞き取りにくい) オーディオの特定の部分を破棄するように設計されています。同じレベルの圧縮で圧縮プロセスを何度もやり直すと、特定のオーディオに対してほぼ同じ結果が得られる可能性があります。ただし、追加の損失が徐々に蓄積される可能性があります。ファイルを頻繁に変更する場合、これは悪い考えかもしれません。品質を気にするならそれも悪い考えですが、品質を気にするなら MP3 を使うのは全体的に悪い考えです。

エンコーダーとデコーダーを使用して、いくつかの異なる mp3 ファイルを数回再エンコードし、それらがどのように変化するかを観察するテストを作成できます。これは、劣化率を判断し、それが許容できるかどうかを判断するのに役立ちます。この単純なテストを実行するために使用できるライブラリが既にあるようです。

MP3 ファイルはオーディオの「フレーム」で構成されているため、最小限の処理でフレーム全体を削除することができるはずです (フレームを削除し、ファイル ヘッダーのいくつかの小さな詳細を更新します)。フレームはかなり短い (それぞれ数ミリ秒) ので、探している精度が得られると思います。そのため、 MP3 ファイル形式を読むと、独自の Python ライブラリをコーディングしてこれを行うのに十分な情報が得られるはずです。これは、従来の「オーディオ処理」とはかなり異なります (精度を気にしないため)。そのため、これを行う既存のライブラリを見つけることはほとんどありません。あなたが見つけたように、ほとんどは最初にオーディオを解凍するので、完全にきめ細かい制御ができます。

于 2008-11-22T03:01:08.537 に答える
1

MP3ドメインにとどまっている間(つまり、PCM形式に変換したり元に戻したりせずに)mp3ファイルからmp3セグメントを削除または抽出することに関しては、オープンソースパッケージPyMp3Cutもあります。

MP3ファイルをつなぎ合わせる(たとえば、mp3ファイルの最後または最初に「クレジット」を追加する)ことに関しては、ファイルのサンプリングレートが同じ(たとえば44.1khz)で、同じであれば、MP3ファイルを単純に連結できることがわかりました。チャンネル数(たとえば、両方がステレオまたは両方がモノラル)。

于 2009-04-26T13:13:34.583 に答える
1

あなたのニーズに対する直接的な答えではありませんが、あなたが望むことをするmp3DirectCutソフトウェアを (GUI アプリとして) チェックしてください。ソースコードは公開されていると思いますので、ライブラリが見つからなくても、自分でビルドしたり、mp3DirectCut のコードを使って Python 拡張機能をビルドしたりできます。

于 2008-11-22T03:16:23.433 に答える