如何从Hugging Face可迭代数据集中获取音频文件?
处理MLCommons/peoples_speech数据集的音频保存问题
方法一:直接利用已加载的音频数组保存为WAV
流式加载数据集时,每个样本的audio字段已经包含了解码后的音频numpy数组(array)和采样率(sampling_rate),无需额外下载文件,直接用音频处理库保存即可。推荐使用soundfile库,操作简单高效:
- 先安装依赖:
pip install soundfile numpy
- 保存音频的代码:
import soundfile as sf # 遍历流式取到的10个样本 for sample in dataset: # 提取音频数据和采样率 audio_data = sample['audio']['array'] sample_rate = sample['audio']['sampling_rate'] # 用样本id作为文件名,避免冲突 wav_filename = f"{sample['id']}.wav" # 保存为WAV格式 sf.write(wav_filename, audio_data, sample_rate) print(f"音频已保存至: {wav_filename}")
方法二:通过path下载原始FLAC文件并转换为WAV
如果需要保留原始FLAC格式文件,再转换为WAV,可以借助数据集的文件系统获取下载链接:
- 安装额外依赖(如果需要):
pip install requests soundfile
- 下载并转换的代码:
import requests import soundfile as sf # 获取数据集的文件系统对象 fs = dataset.dataset_info.download_manager.filesystem for sample in dataset: flac_file_path = sample['audio']['path'] # 检查文件是否存在于数据集存储中 if fs.exists(flac_file_path): # 获取文件的实际下载URL file_url = fs.get_url(flac_file_path) # 下载FLAC文件 flac_filename = f"{sample['id']}.flac" with open(flac_filename, 'wb') as f: f.write(requests.get(file_url).content) print(f"原始FLAC文件已下载至: {flac_filename}") # 转换为WAV格式 audio_data, sample_rate = sf.read(flac_filename) wav_filename = f"{sample['id']}.wav" sf.write(wav_filename, audio_data, sample_rate) print(f"已转换为WAV文件至: {wav_filename}")
注意事项
- 方法一效率更高,因为流式加载时音频数据已经被解码到内存中,无需额外的网络请求。
- 两种方法生成的WAV文件都可以直接交给音频编码器处理。
内容的提问来源于stack exchange,提问作者Formal_this
相关产品推荐
相关产品推荐

