记录一下那天晚上的排查过程。用 google-genai 1.2 把一段 40 分钟的教学视频按每秒一帧抽出来,全部作为 inline_data 放进一次请求,接口返回 400 INVALID_ARGUMENT,提示 input token 超过 1048576,视频本身只有 300MB。

刚开始盯着「帧图没有压缩,单帧分辨率过大导致 token 翻倍」,折腾了半个多小时,排掉了。

这类报错背后常见的原因有几处,逐个排除就行。每帧按固定 token 计价,2400 帧早就超过单次上限。少数情况下是inline_data 有请求体体积上限,大视频必须走 File API。

少数情况下是抽帧间隔设错,实际按 10fps 在取。

先按 0.2fps 重抽并统计帧数

ffmpeg -i lesson.mp4 -vf fps=0.2 frames/f_%05d.jpg

再往下把帧数乘以单帧估值算总量

python -c "import os;n=len(os.listdir('frames'));print(n, n*258)"

大文件改用 File API 上传后再引用

curl -X POST "https://generativelanguage.googleapis.com/upload/v1beta/files" -H "x-goog-api-key: $GEMINI_KEY" -F "file=@lesson.mp4"

剩下的就是分段请求并按时间段合并结果

python -c "print([ (i*600,(i+1)*600) for i in range(4) ])"

改完先别撤,确认这几项。分段请求全部返回 200,每段都能给出对应时间段的描述,合并后覆盖整段视频且没有漏段。

视频理解的 token 是按帧累计的,不是按文件大小,先把帧率和分辨率降下来,比反复申请配额有效。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189