提取视频音频后使用speech_recognition报错的解决方案咨询
解决视频转音频后speech_recognition的两类错误
错误1:AssertionError: audio_data must be audio data
问题原因
recognize_google()要求传入AudioData对象,而非sr.AudioFile实例- speech_recognition的
Recognizer类没有独立的confidence()方法,Google语音识别的置信度需通过指定show_all=True参数获取完整响应后提取
修正代码
import speech_recognition as sr recognizer = sr.Recognizer() with sr.AudioFile('sound.wav') as source: # 读取音频生成AudioData对象 audio_data = recognizer.record(source) # 获取包含置信度的完整识别结果 full_result = recognizer.recognize_google(audio_data, show_all=True) if full_result: # 提取首个识别结果的置信度与文本 confidence = full_result['alternative'][0]['confidence'] transcript = full_result['alternative'][0]['transcript'] print(f"置信度: {confidence}") print(f"识别文本: {transcript}") else: print("未检测到可识别的语音内容")
错误2:ValueError: Audio file could not be read as PCM WAV...
问题原因
moviepy导出的pcm_s32le编码WAV文件,与speech_recognition兼容的音频格式(16位PCM WAV)不匹配,导致无法读取。
解决方法
方案1:修改moviepy导出参数
将音频编码改为pcm_s16le,适配speech_recognition的要求:
from moviepy.editor import * local_video_path = "Video.mp4" sound = AudioFileClip(local_video_path) # 导出16位PCM编码的WAV文件 sound.write_audiofile("sound.wav", 44100, 2, 2000, "pcm_s16le")
方案2:用ffmpeg直接转换(兼容性更强)
如果moviepy导出仍有问题,可直接用ffmpeg转换视频到兼容格式:
ffmpeg -i Video.mp4 -acodec pcm_s16le -ar 44100 -ac 2 sound.wav
Python中通过subprocess调用ffmpeg:
import subprocess subprocess.run([ "ffmpeg", "-i", "Video.mp4", "-acodec", "pcm_s16le", "-ar", "44100", "-ac", "2", "sound.wav" ], check=True)
内容的提问来源于stack exchange,提问作者Mr Learner
相关产品推荐
相关产品推荐

