Python 中读取音频文件的最快方式
Fastest way of readining audio files in Python
我正在处理大约 500,000 个音频文件,每个大约 10 秒长。瓶颈是读取音频文件。我目前正在使用 pydub
,并尝试以 mp3(原始来源)和 wav(在 ffmpeg 转换后)的形式阅读。都太慢了,要3天多!
有谁知道是否有更快的方法可以用来读取这些音频文件?谢谢!
audiofile is focused on reading speed is among the fastest libraries for Python, according to this benchmark。基准可能不是独立的,但也没有太大的偏见。这是一个不错的选择。
假设您的驱动器速度很快,您应该将 audiofile
与 joblib
串联使用以进行并行读取(而不是 multiprocessing
)。您可以解雇的工作数量应取决于系统何时变为 I/O-(更有可能)或 CPU-绑定。
如果您想坚持使用 ffmpeg
,请考虑使用 GNU Parallel
:
进行并行转换
OUTPUT_DIR="YOUR_DIRECTORY"
find . -name '*.mp3' -type f -print0 | parallel -0 ffmpeg -f s16le -ar 48000 -ac 1 -i {} -filter:a loudnorm ${OUTPUT_DIR}/{.}.wav
参数:
-f s16le
- 带符号的 16 位小端样本
-ar 48000
- 采样率 48kHz
-ac 1
- 1 个通道(单声道)
-i file.raw
- 输入文件
-filter:a loudnorm
EBU R128 loudness normalization
我正在处理大约 500,000 个音频文件,每个大约 10 秒长。瓶颈是读取音频文件。我目前正在使用 pydub
,并尝试以 mp3(原始来源)和 wav(在 ffmpeg 转换后)的形式阅读。都太慢了,要3天多!
有谁知道是否有更快的方法可以用来读取这些音频文件?谢谢!
audiofile is focused on reading speed is among the fastest libraries for Python, according to this benchmark。基准可能不是独立的,但也没有太大的偏见。这是一个不错的选择。
假设您的驱动器速度很快,您应该将 audiofile
与 joblib
串联使用以进行并行读取(而不是 multiprocessing
)。您可以解雇的工作数量应取决于系统何时变为 I/O-(更有可能)或 CPU-绑定。
如果您想坚持使用 ffmpeg
,请考虑使用 GNU Parallel
:
OUTPUT_DIR="YOUR_DIRECTORY"
find . -name '*.mp3' -type f -print0 | parallel -0 ffmpeg -f s16le -ar 48000 -ac 1 -i {} -filter:a loudnorm ${OUTPUT_DIR}/{.}.wav
参数:
-f s16le
- 带符号的 16 位小端样本-ar 48000
- 采样率 48kHz-ac 1
- 1 个通道(单声道)-i file.raw
- 输入文件-filter:a loudnorm
EBU R128 loudness normalization