使用OpenAI API转录Telegram OGG语音文件时遇400错误求助
解决OpenAI语音转录API识别OGG文件失败的问题
你遇到的400错误是因为传递给API的file参数是单纯的bytes对象,OpenAI无法通过它识别文件格式——即使OGG在支持列表里,API也需要通过文件名扩展名来判断格式。
修复方案
将读取到的bytes内容包装成带文件名的类文件对象,让API能识别格式:
import io import aiofiles from openai import AsyncOpenAI async def transcribe_voice_message(file_path): """OpenAI Speech To Text request""" client = AsyncOpenAI(api_key=openai_api_key) try: async with aiofiles.open(file_path, 'rb') as f: file_content = await f.read() # 用BytesIO封装bytes内容,并指定含扩展名的文件名 audio_file = io.BytesIO(file_content) audio_file.name = "audio.ogg" transcription = await client.audio.transcriptions.create( model="whisper-1", file=audio_file ) return transcription.text except Exception as e: logger.error(f"Open API error: {e}") return ""
关键说明
- OpenAI的转录API要求
file参数是类文件对象(具备read()方法),并且需要通过文件名的扩展名来识别音频格式。单纯的bytes对象没有文件名信息,导致API无法判断格式。 - 通过
io.BytesIO包装bytes内容,并设置name属性为带.ogg扩展名的文件名,就能让API正确识别文件格式,完成转录。
如果之前尝试转MP3后仍报错,要确认转换后的文件是有效的MP3格式,而不是仅修改文件名——可以用ffmpeg等工具进行格式转换:
ffmpeg -i input.ogg output.mp3
内容的提问来源于stack exchange,提问作者Антон Кокорин
相关产品推荐
相关产品推荐

