先看现象。用 openai 1.51 的 Python SDK 调 gpt-4o-audio-preview,把一段 44.1kHz 的 mp3 读成 bytes 再 base64 塞进 input_audio,接口返回 400,原文是 unsupported audio format,同一段音频转成 wav 后又能过,文件本身用播放器打开正常。

这类报错背后常见的原因有几处,逐个排除就行。input_audio 的 format 字段只接受 wav 和 mp3 两个值,写 flac 直接拒。另一种情况是base64 编码时把 data URI 前缀一起编进去了,解码后不是音频。

还有一种情况,采样率超过 16kHz,部分区域节点会在解码阶段拒绝。

另外,文件其实是 m4a 改了后缀,容器格式与声明不一致。

动手时先用 ffprobe 确认容器和真实采样率

ffprobe -v error -show_format -show_streams sample.mp3 | grep -E 'codec_name|sample_rate'

然后统一转成 16kHz 单声道 wav 再送

ffmpeg -y -i sample.mp3 -ar 16000 -ac 1 sample.wav

只对音频字节做 base64,不要带前缀

python -c "import base64;print(len(base64.b64encode(open('sample.wav','rb').read())))"

等前面都确认过,再改完后用最小请求验证一次格式判定

curl https://api.openai.com/v1/chat/completions -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" -d @audio_req.json

怎么算真的好了,看的是同一批现象。同一个文件转码后请求返回 200,choices 里能拿到转写或描述内容,日志中不再出现 unsupported audio format。

补一句。后缀名不等于容器格式,m4a 改名为 mp3 是这类报错最常见的原因,先用 ffprobe 看 codec 再说别的。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189