问题出现得很突然,日志倒是留得挺全。60 秒 30fps 的装配视频按 1fps 抽 60 帧送多模态模型,模型回答说画面里没有人操作,改成 2fps 后帧数 120 又触发请求过大,只好回头找采样策略。

刚开始盯着「抽帧时统一缩放加重运动模糊」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。1fps 的采样间隔大于动作持续时间,关键帧落在两次采样之间。另一种情况是均匀抽帧不看场景切换,镜头切换后画面几乎重复。

还有一种情况,帧数上限按张数算,加密采样直接越界。

动手时先按场景切换抽帧并限制长边

ffmpeg -i demo.mp4 -vf "select='gt(scene,0.3)',scale=768:-1" -vsync vfr frames/f_%03d.jpg

再往下统计实际抽出的帧数

python -c "import glob;print(len(glob.glob('frames/*.jpg')))"

然后对关键片段单独提高帧率

ffmpeg -ss 00:00:12 -t 6 -i demo.mp4 -vf fps=8 frames/hi_%03d.jpg

剩下的就是打包时把总帧数压到上限以内

python pack_frames.py --max-frames 24 --scene-thresh 0.3 --dir frames

别只看报错消失,验证要多做一步。关键动作片段里能看到手部位移的连续帧,模型描述中出现具体动作,总帧数不超过 24 且请求返回 200。

场景阈值抽帧命中率高于均匀抽帧,但 0.4 以上会把渐变镜头漏掉,0.25 到 0.35 之间多试两档再定。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189