SpeechRecognition报错无法识别PCM WAV等格式音频,求解决方案
解决音频转文本格式不兼容问题
问题分析
报错ValueError: Audio file could not be read as PCM WAV, AIFF/AIFF-C, or Native FLAC说明你的音频文件并非speech_recognition支持的无压缩格式——即使后缀是.wav,也可能是MP3、ADPCM等压缩编码封装的,或者参数不符合工具要求。
具体解决方案
1. 确认音频真实编码
用ffmpeg工具查看文件详细信息,执行命令:
ffmpeg -i example.wav
查看输出里的Audio行,确认编码格式(比如是否为pcm_s16le这类无压缩PCM编码)。
2. 转换为标准兼容格式
用ffmpeg将音频转成Google语音识别最适配的16位、16kHz、单声道PCM WAV,执行命令:
ffmpeg -i example.wav -acodec pcm_s16le -ar 16000 -ac 1 output.wav
该命令会强制输出无压缩的标准WAV格式,完全符合speech_recognition的要求。
3. 修正代码冗余问题
原代码中同时调用了r.record(source)和r.listen(source),record已经读取了整个音频文件,后续listen会无数据可读取,属于无效操作。修正后的代码如下:
import speech_recognition as sr r = sr.Recognizer() with sr.AudioFile("output.wav") as source: # 读取整个音频文件内容 audio = r.record(source) try: s = r.recognize_google(audio) print("Text: " + s) except Exception as e: print("Exception: " + str(e))
为什么之前的转换工具无效?
wavio和scipy.io.wavfile仅负责读取/写入WAV文件,不会自动处理压缩编码的转换,它们只是按原编码格式操作,无法将压缩WAV转为无压缩PCM格式;而ffmpeg是专业音频处理工具,能彻底解决格式兼容问题。
内容的提问来源于stack exchange,提问作者Sharhad
相关产品推荐
相关产品推荐

