使用Sphinx引擎视频转录报错AttributeError: NoneType无close属性求解决
视频语音转录报错解决思路及替代方案
问题分析
你遇到的错误是:
ERROR : transcribe_video_to_text audio.close() AttributeError: 'NoneType' object has no attribute 'close'
根源在于video.audio.write_audiofile("temp_audio.wav")方法没有返回值,赋值给audio变量后,audio是None,自然无法调用close()方法。
错误修复步骤
- 移除
audio = video.audio.write_audiofile(...)的赋值操作,直接调用该方法即可 - 删除无效的
audio.close()语句 - 补充导入
os模块(原代码使用了os.remove但未导入) - 建议用
with语句管理VideoFileClip对象,自动释放资源,无需手动调用video.close() - 可添加异常捕获,避免识别失败导致程序崩溃
修复后的代码
import moviepy.editor as mp import speech_recognition as sr import os # 补充导入os模块 def transcribe_video_to_text(video_path): # 用with语句管理视频对象,自动释放资源 with mp.VideoFileClip(video_path) as video: video.audio.write_audiofile("temp_audio.wav") # 初始化语音识别对象 recognizer = sr.Recognizer() # 读取音频文件 with sr.AudioFile("temp_audio.wav") as source: audio_data = recognizer.record(source) # 执行语音识别并添加异常处理 try: text = recognizer.recognize_sphinx(audio_data, keyword_entries=[('whisper', 1.0)]) except sr.UnknownValueError: text = "无法识别音频内容" except sr.RequestError as e: text = f"语音识别服务出错: {e}" # 删除临时音频文件 os.remove("temp_audio.wav") return text # 视频文件路径 video_path = "Gods Architect Antoni Gaudis glorious vision.mp4" # 执行转录并输出结果 transcription = transcribe_video_to_text(video_path) print("视频转录文本:") print(transcription)
替代库与AI工具
离线方案(无需联网)
- Whisper:OpenAI开源模型,多语言支持,准确率远高于Sphinx,安装命令
pip install openai-whisper,示例代码:
import whisper def transcribe_video(video_path): model = whisper.load_model("base") # 可选tiny/base/small/medium/large模型 result = model.transcribe(video_path) return result["text"] # 使用示例 text = transcribe_video("你的视频路径.mp4") print(text)
- Vosk:轻量开源离线识别工具,支持多语言模型,适合低性能设备
在线方案(需API密钥)
- Google Cloud Speech-to-Text:准确率高,支持复杂场景转录
- 阿里云/百度语音识别:国内厂商服务,对中文方言、口音支持更友好
内容的提问来源于stack exchange,提问作者Tahereh Maghsoudi
相关产品推荐
相关产品推荐

