web-dev-qa-db-ja.com

librosa.load()がmp3ファイルをロード(サンプル)するのに時間がかかりすぎる

次のPythonコードを使用してlibrosaライブラリを使用してmp3ファイルをサンプリング(アナログからデジタルに変換)しようとしていますが、時間がかかりすぎます(1つのファイルで約4秒) )librosamp3をサポートしていないため、低速のaudioreadを使用してmp3をサンプリングしているためと考えられます

コード:

import time
import librosa

s = time.time()
for i in mp3_list[:10]: # list of mp3 file paths, doing for 10 files
    y, sr = librosa.load(i)

print('time taken =', time.time() - s)

time taken = 36.55561399459839

私もこの警告を受けます:

UserWarning: "PySoundFile failed. Trying audioread instead."

明らかに、これは実際のアプリケーションには時間がかかりすぎます。これのより良い代替策があるかどうか知りたいですか?

比較すると、同じサイズのwavコンバージョンを10回サンプリングするのにかかった時間は、合計で約1.2秒でした

3
john doe

したがって、警告はそれをほのめかします。 Librosa開発者は このGitHubの質問 で同様の質問に対処しました:

Libsndfileは(まだ/現在のところ)mp3形式をサポートしていないため、mp3のロード時にこの警告が常に発生します。 Librosaは最初にlibsndfileを使用しようとしますが、それが失敗した場合、それはaudioreadパッケージにフォールバックします。これは少し遅くて壊れやすいですが、より多くのフォーマットをサポートします。

これは Librosa-code で確認されています:_try ... except RuntimeError ..._

したがって、この場合にできることは、load()の最初のブロックで無駄になる時間を回避するためにaudioreadを直接使用する独自のlibrosa.load()を実装するか、または pydub などの別のライブラリを使用します。あるいは、それらをロードする前に ffmpeg to convert your mp3 to wave を使用できます。

2
SuperKogito