先看现象。把一段三分钟的监控视频按每秒两帧抽出来,共三百多张图塞进一次请求,返回 400,原文 too many images in request,模型是 gpt-4o。

这类报错背后常见的原因有几处,逐个排除就行。单次请求的图片数量有上限,超了直接拒。也可能是每张图都按高精度计费,token 很快超上下文。

还有一种情况,抽帧间隔过密,前后帧内容几乎重复。

另外,先用多张图再转成一条视频,混合类型不被接受。

先按场景变化抽关键帧

ffmpeg -i in.mp4 -vf "select='gt(scene,0.3)'" -vsync vfr frames/%03d.jpg

限制最多取多少帧

python -c "import glob;fs=sorted(glob.glob('frames/*.jpg'));print(len(fs[::max(1,len(fs)//12)]))"

等前面都确认过,再分批请求并在本地汇总

python video_summarize.py --frames frames --batch 8 --merge

怎么算真的好了,看的是同一批现象。每批请求返回 200,最终摘要覆盖整段视频的关键事件,单次请求图片数稳定在上限之内。

容易忽略的是,视频理解的质量取决于关键帧选得好不好,堆帧数只会同时抬高成本和延迟,多数场景十二帧已经够用。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189