报错是这么冒出来的。用 ffmpeg 把录音转成 16k 单声道 wav,传给转写接口仍返回 400,原文 unsupported audio format,文件后缀是 .wav 但容器其实是 caf。
中间走过弯路,把「双声道没有下混,声道数超限」当成主因,改完现象没变。
这类报错背后常见的原因有几处,逐个排除就行。采样率不是判据,容器格式才是,扩展名和容器不一致。少数情况下是wav 用了 32 位浮点,部分接口只吃 16 位整型。
另外,文件头缺长度字段,流式生成的文件被判为不完整。
探一遍真实容器与参数
ffprobe -v error -show_entries stream=codec_name,sample_rate,channels,sample_fmt -of default=nw=1 input.wav
然后统一转成 16k 单声道 16 位
ffmpeg -y -i input.wav -ar 16000 -ac 1 -sample_fmt s16 out.wav
显式指定文件名后缀再上传
curl -sS https://api.openai.com/v1/audio/transcriptions -H "Authorization: Bearer $OPENAI_API_KEY" -F file=@out.wav -F model=whisper-1
中途换过一次思路,把范围缩到最小的那一层,反而快了。
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
恢复的判定其实很直接。转写接口返回 200 且文本非空,ffprobe 显示 pcm_s16le、16000 Hz、单声道三项都符合要求。
改后缀不改容器是最常见的误判,转码一律重跑 ffmpeg,别用重命名骗接口。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
