0

音楽コレクションをスキャンし、トラックの ID3 情報を読み取り、その特定のアーティストが 2 回以上アクセスされた曲を持っていない限り、それを保存する小さなツールを作成しています。Mutagenタグの読み取りに使用する予定です。

しかし、私を含めた多くの人の音楽コレクションは膨大で、20,000 曲を超えています。私の知る限り、ライブラリMutagenはすべての曲を開いたり閉じたりして、ID3 情報を取得する必要があります。MP3 はそれほどパフォーマンスに重きを置いているわけではありませんが、曲数が多いです。各アーティストのカウントを保持し、曲数が 2 を超えた場合は情報を保存しないという形で、小規模な最適化を既に計画していますが、私が知る限り、アーティスト ID3 タグを確認するためにすべての曲を開く必要があります。 .

アーティスト名のヒントとしてディレクトリを使用し、アーティストの曲数が 2 を超えたらそのディレクトリの情報を読み取らないというアイデアをいじりましたが、すべての人が適切な Artist/Album/Songs ディレクトリに音楽をセットアップしているわけではありません。

非常に多くの MP3 を開くことのオーバーヘッドを削減する可能性のある他の最適化を念頭に置いている人はいますか?

4

2 に答える 2

1

時期尚早の最適化に注意してください。これがパフォーマンスの問題になると本当に確信していますか? あなたの要件は何ですか -- スクリプトをどれくらい速く実行する必要がありますか? 単純なアプローチでどれくらい速く実行されますか? 最適化する前にプロファイリングと評価を行います。実際には存在しないパフォーマンスの問題が発生している可能性が非常に高いと思います。

保証された正しい答えが必要な場合は、各ファイルに 1 回アクセスすることを避けることはできません。これまで見てきたように、ファイルを完全にスキップする最適化は、基本的に自動化された当て推量になります。

以前に行ったスキャンの記録を保持し、その後のスキャンでファイルの最終更新日を使用して、一度スキャンしたファイルを再スキャンすることを回避できますか? これは、最初のスキャンに少し時間がかかる可能性がありますが、その後のスキャンは高速になることを意味します。

音楽コレクションに対して多数の複雑なクエリをすばやく実行する必要がある場合は、コレクション全体のメタデータをデータベース (SQLite や MySQL など) にインポートすることを検討してください。インポートには時間がかかります -- 新しいファイルを挿入するための更新には少し時間がかかります (上記のように最終更新日を確認します)。ただし、データがデータベースに格納されると、データベースが適切にセットアップされていると仮定すると、すべてがかなりスムーズになるはずです。

于 2013-03-10T17:26:33.283 に答える
1

一般に、この質問では、アーティストまたはトラックのタイトルを検出する複数の方法を使用することをお勧めします。

1 つ目の確認方法: ファイル名は ARTIST-TITLE.mp3 形式ですか? (または類似)
(このファイル名は「Artist-Track.mp3」になります)

for file in os.listdir(PATH_TO_MP3s):
   artist = re.split("[\_\-\.]", file)[-3]
   track = re.split("[\_\-\.]", file)[-2]
   filetype = re.split("[\_\-\.]", file)[-1]

もちろん、最初にファイルがその形式であるかどうかを確認する必要があります。

2番目のステップ(最初がそのファイルに適合しない場合)は、ディレクトリ名が適合するかどうかを確認します(あなたが言ったように)

3 番目と最後の 1 つは、ID3 タグを確認することです。

ただし、値を信頼する前に、値が正しいかどうかを確認してください。
たとえば、私が提供したコードに「Track-Artist.mp3」を使用すると、アーティストとトラックが切り替わります。

于 2013-03-10T17:34:08.143 に答える