先看现象。把 30 分钟的会议录像 mp4 直接传给多模态接口,返回 400,原文 file too large,文件 1.8GB,压到 720p 后还是超限。
这类报错背后常见的原因有几处,逐个排除就行。单文件体积有上限,与时长无关。另一种情况是接口不支持直接解析视频,需要抽帧或转音频。
少数情况下是上传走的是整包而不是分片。
不容易想到的是,容器内 nginx 的 client_max_body_size 也会拦。
第一件事是看文件体积与码率
ffprobe -v error -show_entries format=duration,size,bit_rate -of default=nw=1 meeting.mp4
再往下抽成每分钟一帧的图片序列
ffmpeg -i meeting.mp4 -vf fps=1/60 -q:v 3 frames/%04d.jpg
接着把音轨单独抽出来走转写
ffmpeg -i meeting.mp4 -vn -ac 1 -ar 16000 audio.wav
末了按批次送帧并合并时间轴
python vision_batch.py --dir frames --batch 8 --out timeline.json
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
白天有业务在跑,能验证的部分都压到了晚上做。
恢复的判定其实很直接。视频内容能被完整理解,时间轴与原始录像对齐,接口不再报 file too large。
这里还有个坑。多模态接口吃的是图或音频,不是容器格式,先抽帧再谈体积才是正路。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
