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

Python SpeechRecognition识别音频仅输出前30秒就截断如何解决

问题原因和解决方案

核心原因

  • Azure 语音服务的短音频识别接口(也就是SpeechRecognition库封装的recognize_azure调用的接口)单次请求最多支持30秒音频输入,超过长度的音频会被服务端自动截断,和你本地设置的pause_threshold、duration等参数无关。
  • pause_threshold参数仅用于实时麦克风识别场景下的停顿判断,本地文件全量读取时该参数不会生效,调整它无法解决截断问题。

前置排查项

先确认你导出的converted.wav文件本身是完整的:用本地播放器打开试听,确认80秒音频没有在导出环节被截断。导出时建议补充参数将音频转为语音识别兼容的格式,降低识别出错概率:

clip.audio.write_audiofile(r"converted.wav", ffmpeg_params=["-ac", "1", "-ar", "16000"])

上面的参数会把音频转为单声道、16kHz采样率的WAV格式,符合绝大多数语音识别服务的输入要求。

解决方法

方法1:音频分块识别(无需更换依赖)

将完整音频切分为小于30秒的分片,逐片识别后拼接结果,可直接复用你现有SpeechRecognition的调用逻辑。
首先安装音频处理依赖:
pip install pydub

修改后的完整代码如下:

import speech_recognition as sr
import moviepy.editor as mp
from pydub import AudioSegment
import os

# 导出标准格式的音频文件
clip = mp.VideoFileClip(r"recording2.webm")
clip.audio.write_audiofile(r"converted.wav", ffmpeg_params=["-ac", "1", "-ar", "16000"])

# 按25秒长度切分音频,预留5秒余量避免触发30秒限制
full_audio = AudioSegment.from_wav("converted.wav")
chunk_duration = 25 * 1000 # 单位为毫秒
audio_chunks = [full_audio[i:i+chunk_duration] for i in range(0, len(full_audio), chunk_duration)]

r = sr.Recognizer()
full_transcript = ""

# 逐块识别并拼接结果
for index, chunk in enumerate(audio_chunks):
    temp_chunk_path = f"temp_{index}.wav"
    chunk.export(temp_chunk_path, format="wav")
    with sr.AudioFile(temp_chunk_path) as source:
        audio_data = r.record(source)
    try:
        chunk_text = r.recognize_azure(audio_data, key=AZUREKEY, language="en-US", show_all=False, location="westeurope")
        full_transcript += chunk_text + " "
    except Exception as e:
        print(f"第{index}块识别失败:{str(e)}")
    # 删除临时分片文件
    os.remove(temp_chunk_path)

print(full_transcript)

方法2:使用Azure官方语音SDK

如果需要处理更长的音频、或者需要更高的识别稳定性,可以直接使用Azure官方的语音SDK,内置长音频连续识别能力,不需要手动切分音频。

内容的提问来源于stack exchange,提问作者eeveepotato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:15:04