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

使用speech_recognition转WAV至文本遇Error 400,求本地解决方案

解决方案:本地处理WAV转文本避免Google接口报错

问题分析

你遇到的HTTP Error 400: Bad Request是因为Google免费语音识别接口有音频时长/大小限制,且依赖网络。哪怕2MB的文件如果时长过长(比如高采样率音频),也会触发限制导致请求失败。同时你原代码一次性上传整段音频,完全依赖在线服务,无法满足本地处理大文件的需求。

本地替代方案:使用Vosk离线模型

Vosk是开源离线语音识别工具,支持多语言(含德语de-DE),无时长/大小限制,完全本地运行,适合处理大音频文件。

步骤1:安装依赖

pip install vosk pydub
  • pydub用于音频格式转换(若需要),vosk负责本地识别。

步骤2:下载德语Vosk模型

下载适配的德语模型(如vosk-model-de-0.21),解压到本地目录并记录路径。

步骤3:本地识别代码

import vosk
import wave
import json

def speech_to_text_local(filename, model_path):
    # 加载本地模型
    model = vosk.Model(model_path)
    # 打开WAV文件
    wf = wave.open(filename, "rb")
    
    # 校验音频格式(Vosk要求16kHz单声道PCM)
    if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
        print("请确保音频为16kHz单声道WAV格式")
        return
    
    rec = vosk.KaldiRecognizer(model, wf.getframerate())
    rec.SetWords(True)  # 可选:输出带时间戳的词
    
    # 逐块读取音频并识别
    result_text = []
    while True:
        data = wf.readframes(4000)
        if len(data) == 0:
            break
        if rec.AcceptWaveform(data):
            res = json.loads(rec.Result())
            result_text.append(res["text"])
    
    # 处理剩余音频片段
    final_res = json.loads(rec.FinalResult())
    result_text.append(final_res["text"])
    
    # 合并结果并保存
    full_text = " ".join(result_text)
    with open("deruntertan.txt", "w+", encoding="utf-8") as af:
        af.write(full_text)
    print(full_text)
    return full_text

# 调用:替换为你的WAV路径和模型解压路径
speech_to_text_local("untertanaudio.wav", "./vosk-model-de-0.21")

格式转换(若音频不符合要求)

如果你的WAV不是16kHz单声道,用pydub转换:

from pydub import AudioSegment

def convert_audio(input_path, output_path):
    audio = AudioSegment.from_wav(input_path)
    audio = audio.set_frame_rate(16000).set_channels(1)
    audio.export(output_path, format="wav")

# 先转换再识别
convert_audio("untertanaudio.wav", "converted_audio.wav")
speech_to_text_local("converted_audio.wav", "./vosk-model-de-0.21")

原代码崩溃原因

  • recognize_google调用Google在线API,免费版严格限制音频时长(通常1分钟内)和大小,超出即返回400错误。
  • 2MB文件若为高采样率(如48kHz),时长可能超过限制,同样触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:53:16