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

Python处理S3桶音频文件实现语音转文本的问题

解决S3中.opus音频转文本的问题

核心问题分析

  • speech_recognition仅支持wav、aiff等标准音频格式,无法直接处理.opus文件,必须先转码
  • 你碰到的charmap编码错误,是因为用文本模式操作二进制音频文件导致的,必须用二进制模式读写

解决方案步骤

1. 安装必要依赖

首先得装ffmpeg(pydub的转码依赖),再安装Python库:

  • 安装ffmpeg:根据系统选择方式(Windows用Chocolatey,Ubuntu用apt install ffmpeg,macOS用Homebrew)
  • 安装Python库:
pip install boto3 pydub SpeechRecognition

2. 内存中转码处理(推荐,无需本地存储)

直接读取S3对象的二进制数据,在内存中完成opus到wav的转码,再传入speech_recognition:

import boto3
from pydub import AudioSegment
import speech_recognition as sr
from io import BytesIO

# 初始化S3资源
s3_resource = boto3.resource('s3')
bucket_name = "你的S3桶名"
object_key = "9d3be36b-6777-4b2a-8912-4dbfaaeea0ab/year=2022/month=11/day=10/hour=0/conversation_id=00d32818-16f5-4a6f-a97c-3db50ce9254f/36f1c0ce-d168-4df3-bae8-219bd5b59802.opus"

# 获取S3对象的二进制数据
s3_object = s3_resource.Bucket(bucket_name).Object(object_key).get()
opus_raw_data = s3_object['Body'].read()

# 将opus数据转为AudioSegment对象
audio_segment = AudioSegment.from_file(BytesIO(opus_raw_data), format="opus")

# 转成wav格式并写入内存缓冲区
wav_buffer = BytesIO()
audio_segment.export(wav_buffer, format="wav")
wav_buffer.seek(0)  # 将缓冲区指针重置到起始位置

# 执行语音转文本
r = sr.Recognizer()
with sr.AudioFile(wav_buffer) as source:
    audio_data = r.record(source)
    try:
        text = r.recognize_google(audio_data)
        print(text)
    except sr.UnknownValueError:
        print("Google语音识别无法解析音频内容")
    except sr.RequestError as e:
        print(f"请求Google语音服务失败: {str(e)}")

3. 本地文件处理(避免编码错误)

如果需要将文件保存到本地,务必使用二进制模式读写:

# 下载opus文件到本地(二进制写入)
with open("temp_audio.opus", "wb") as f:
    f.write(opus_raw_data)

# 转码为wav
audio_segment = AudioSegment.from_file("temp_audio.opus", format="opus")
audio_segment.export("temp_audio.wav", format="wav")

# 读取wav文件并识别
r = sr.Recognizer()
with sr.AudioFile("temp_audio.wav") as source:
    audio_data = r.record(source)
    # 后续识别逻辑同内存处理示例

关键注意事项

  • 确保ffmpeg已添加到系统PATH,否则pydub无法完成转码
  • 所有涉及音频文件的读写操作,必须使用rb(读)或wb(写)模式,禁止使用默认文本模式
  • 若音频文件体积过大,内存处理可能占用较多资源,此时优先选择本地文件处理方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:10:33