You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提取视频音频后使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:17:36