使用librosa批量计算音频平均时长及查找最长最短音频的方法
解决方案
完整可运行代码
import librosa import glob # 初始化总时长变量、存储所有音频路径+时长的列表 total_duration = 0 audio_info = [] audio_paths = glob.glob('E:/...*/*.wav') # 可选:判断是否找到匹配的音频文件 if not audio_paths: print("未匹配到对应路径下的wav文件,请检查路径配置") else: for path in audio_paths: y, sr = librosa.load(path, sr=16000) cur_duration = librosa.get_duration(y=y, sr=sr) total_duration += cur_duration audio_info.append((path, cur_duration)) # 计算并输出平均时长 avg_duration = total_duration / len(audio_paths) print(f"平均时长:{avg_duration:.2f} 秒") # 查找并输出最长音频 max_item = max(audio_info, key=lambda x: x[1]) print(f"最长音频:路径为{max_item[0]},时长为{max_item[1]:.2f} 秒") # 查找并输出最短音频 min_item = min(audio_info, key=lambda x: x[1]) print(f"最短音频:路径为{min_item[0]},时长为{min_item[1]:.2f} 秒")
实现说明
- 修复了原代码的隐藏问题:删除了重复的librosa导入,新增总时长变量初始化,避免运行时报错
- 平均时长输出:通过print配合格式化字符串输出,保留2位小数提升可读性
- 最长/最短音频查找:遍历音频时同步存储每个文件的路径和对应时长,最后通过max、min函数按时长字段取值,直接得到对应文件的完整信息
- 新增空路径校验,避免路径匹配不到文件时出现除零报错
内容的提问来源于stack exchange,提问作者KRISHNA CHAUHAN
相关产品推荐
相关产品推荐

