はじめに
対象読者は、Gemini API に動画を投げていて入力トークンの多さに困っている開発者です。
Google は 2026-09-01 に agentic video understanding を発表し、静的処理と比べて「最大 88% のトークン削減」「最大 66% のコスト削減」「最大 7% の精度向上」と説明しています(Google 公式ブログ)。動画をフレームに刻んで丸ごと入力に載せるのではなく、モデルが必要な区間だけを取りに行く方式です。
数字だけ見ると乗り換えない理由がなさそうに見えます。ただ、削れるのが入力トークンだとすると、その分の仕事はどこかに移るはずです。移った先が何トークンで、いくらの単価で課金されるのかは発表文からは読み取れません。3 本の動画(約 3 分・32 分・約 2 時間)で static と agentic を同じプロンプトで叩き、usage を突き合わせました。
測定結果
| 動画 | モード | 合計トークン | 入力(うち動画) | thinking | 所要時間 | 概算コスト |
|---|---|---|---|---|---|---|
| 約3分デモ | static | 13,967 | 13,580(13,567) | 268 | 27s | $0.0116 |
| 約3分デモ | agentic | 1,374 | 54(0) | 931 | 86s | $0.0046 |
| 32分キーノート | static | 177,712 | 176,755(176,737) | 824 | 33s | $0.1362 |
| 32分キーノート | agentic | 1,336 | 64(0) | 991 | 134s | $0.0045 |
| 約2時間キーノート | static | 測定不能(429) | — | — | — | — |
| 約2時間キーノート | agentic | 34,963 | 109(0) | 34,512 | 134s | $0.1301 |
モデルは gemini-3.6-flash、プロンプトは 3 本とも「この動画で発表された新機能を 3 つ、それぞれ 1 文で挙げてください。」で固定しています。コストは公式の 料金ページ(入力 $0.75 / 出力 $3.75 per Mtok・2026-12-31 まで。出力単価に thinking トークンを含む)から算出した概算です。
トークンの削減幅は 32 分動画で 99.2%、3 分動画で 90.2% でした。公式が言う「最大 88%」を上回っています。一方で所要時間は 3.2 倍から 4.1 倍に伸び、2 時間動画では thinking トークンが 34,512 まで膨らみました。
何を測ったか
検証に使った動画は次の 3 本です。いずれも公開されている YouTube 動画で、URL をそのまま API に渡しています。
| 尺 | 動画 | URL |
|---|---|---|
| 約3分 | Gemini 2.0 Multimodal Live API デモ | https://www.youtube.com/watch?v=9hE5-98ZeCg |
| 約32分 | Google I/O 2025 keynote in 32 minutes | https://www.youtube.com/watch?v=bDVpI23q8Zg |
| 約2時間 | Google I/O '25 Keynote | https://www.youtube.com/watch?v=o8NiE3XMPrM |
2 つのモードの違いは、動画を「入力として渡す」か「モデルが取りに行く」かの一点です。
static は既定の挙動で、公式ドキュメントによると 1 FPS でフレームを抽出します。32 分の動画で動画由来の入力が 176,737 トークンになったのは、この方式の必然的な帰結です。
つまずいた点: generateContent では有効にできない
公式ドキュメントのサンプルは、動画オブジェクトに "processing": "agentic" を並べる形で書かれています。これを見慣れた generateContent の file_data に足しても通りません。
curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.6-flash:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"contents":[{"parts":[
{"text":"要点を1つ"},
{"file_data":{"file_uri":"https://www.youtube.com/watch?v=9hE5-98ZeCg","processing":"agentic"}}
]}]}'
返ってきたのは 400 でした。
Invalid JSON payload received. Unknown name "processing" at 'contents[0].parts[1].file_data': Cannot find field.
video_metadata.processing、video_metadata.processing_mode も同じく Cannot find field です。フィールド名の綴りの問題ではなく、generateContent のスキーマ自体にこの概念がありません。
正解は /v1beta/interactions でした。ドキュメントのサンプルが model と input を持つ形になっているのは、これが従来の generateContent とは別系統の Interactions API だからです。
curl -s -X POST "https://generativelanguage.googleapis.com/v1beta/interactions?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"gemini-3.6-flash","input":[
{"type":"video","uri":"https://www.youtube.com/watch?v=bDVpI23q8Zg","processing":"agentic"},
{"type":"text","text":"この動画で発表された新機能を3つ、それぞれ1文で挙げてください。"}
]}'
ついでに探った結果として、/v1alpha/interactions は API version v1alpha is deprecated. Please use v1 or v1beta. を返し、/v1beta/models/{model}:interact は 404 でした。使えるのは /v1beta/interactions の一本です。
レスポンスの形も変わります。candidates[].content.parts[] ではなく steps[] の配列で、processing_call / processing_result / thought / model_output が時系列で並びます。本文を取り出すには model_output を拾います。
text = "".join(
c.get("text", "")
for s in res.get("steps", [])
if s.get("type") == "model_output"
for c in s.get("content", [])
if c.get("type") == "text"
)
既存の generateContent 用コードをそのまま流用できると考えていたので、ここで一度手が止まりました。移行するなら、エンドポイント・リクエスト形状・レスポンス解析の 3 箇所を書き換える前提で見積もる必要があります。
トークンはどこへ消えたのか
usage を並べると、削れた入力トークンがそのまま消えたわけではないことが分かります。32 分動画の内訳は次のとおりです。
| 項目 | static | agentic |
|---|---|---|
total_input_tokens |
176,755 | 64 |
| うち video | 176,737 | 0 |
total_tool_use_tokens |
0 | 111 |
total_thought_tokens |
824 | 991 |
total_output_tokens |
133 | 170 |
total_tokens |
177,712 | 1,336 |
agentic では video の入力が 0 になり、動画を取りに行った分が total_tool_use_tokens に 111 トークンとして現れます。モデル呼び出しは model_invocation_token_counts を見ると 2 回に分かれていて、1 回目で区間を決め、2 回目で回答を組み立てる流れになっています。
問題は 2 時間動画です。
| 項目 | 32分 agentic | 2時間 agentic |
|---|---|---|
total_input_tokens |
64 | 109 |
total_tool_use_tokens |
111 | 156 |
total_thought_tokens |
991 | 34,512 |
total_tokens |
1,336 | 34,963 |
入力とツール利用はほとんど増えていないのに、thinking トークンが 35 倍になりました。尺が伸びるほど「どこを見るか」の探索が長くなるので、削減した入力の一部が思考側に付け替わっている形です。
そして thinking トークンは出力単価で課金されます。入力 $0.75 に対して出力 $3.75 なので単価は 5 倍です。ここがコスト削減率を押し下げます。
| 動画 | static コスト | agentic コスト | 削減率 |
|---|---|---|---|
| 約3分 | $0.0116 | $0.0046 | 60.2% |
| 約32分 | $0.1362 | $0.0045 | 96.7% |
| 約2時間 | 測定不能 | $0.1301 | — |
3 分の動画では、トークン数こそ 90.2% 減っているのに、コストの削減は 60.2% にとどまりました。static 側の入力が 13,580 トークン($0.0102)しかないところに、agentic 側が 1,222 トークンの出力・思考($0.0046)を積むためです。短い動画ほど「安い入力」を「高い出力」に置き換える取引になり、旨味が薄れます。
筆者が実際に測って一番意外だったのはこの非対称性でした。「最大 88% のトークン削減」という表現は入力側の話であって、請求額の削減率とは別物です。2 時間動画の agentic は $0.1301 で、32 分動画の agentic($0.0045)の 29 倍かかっています。トークン効率の良さがそのまま料金の安さになる、とは限りません。
所要時間は 3 倍から 4 倍に伸びる
| 動画 | static | agentic | 倍率 |
|---|---|---|---|
| 約3分 | 27s | 86s | 3.2 倍 |
| 約32分 | 33s | 134s | 4.1 倍 |
| 約2時間 | 測定不能 | 134s | — |
static は動画の尺が 10 倍以上違っても 27 秒と 33 秒でほぼ変わりませんでした。フレームを一括で入力に載せる方式なので、長さの影響が処理時間に出にくいと考えられます。
agentic は 86 秒から 134 秒で、常に 100 秒前後かかります。同期的にレスポンスを返すユーザー向け機能に組み込むには重い水準です。バッチ処理や非同期のジョブに向いています。
長尺の static はレート制限に当たる
2 時間の keynote を static で処理しようとした結果は、1 回目が 503(currently experiencing high demand)、2 回目が 429(You exceeded your current quota)でした。数値を取れていないので表では「測定不能」としています。
32 分で 176,737 トークンなので、単純に 4 倍すると 70 万トークン前後を 1 リクエストで要求する計算になります。コンテキスト長の上限には収まっても、1 分あたりのトークン数(TPM)の制限に当たりやすい規模です。
長尺動画では、コストや精度の議論に入る前に「そもそも静的処理ではリクエストが通らない」場面が出てきます。agentic が同じ動画を 109 トークンの入力で処理できたことを踏まえると、長尺の扱いやすさという観点では差が明確でした。
回答内容は一致しない
同じプロンプトに対する回答も見ておきます。32 分の keynote に「発表された新機能を 3 つ」と聞いた結果です。
- static: Gemini Live、Veo 3、Agent Mode
- agentic: Google Beam、Google Meet のリアルタイム音声翻訳、Gemini Live のカメラ・画面共有
どちらも I/O 2025 で実際に発表された内容で、事実誤認は見当たりません。ただし選ばれた 3 つは一致しませんでした。「3 つ挙げよ」という指示に対してどの 3 つを選ぶかは、動画のどこを見たかに左右されます。
網羅性が要る用途(発表項目を漏れなく列挙する、特定の時刻の発言を引用する)では、agentic が見ていない区間の情報が落ちる可能性があります。今回の測定では品質を定量評価していないので、精度が上がるか下がるかの判断は保留します。公式が主張する「最大 7% の精度向上」はベンチマーク上の話であり、個別のプロンプトで再現するとは限りません。
使い分けの目安
実測から言えることを整理します。
| 条件 | 向いているモード | 理由 |
|---|---|---|
| 動画が 10 分未満 | static | コスト差が 60% 程度に縮み、レイテンシは 3 倍になる |
| 動画が 30 分以上 | agentic | コスト差が 96% に開く。static はレート制限に当たりやすい |
| 応答速度が要る | static | agentic は 100 秒前後かかる |
| 動画全体の網羅が要る | static | agentic は必要な区間しか見ない |
| 動画から 1 点を探す | agentic | 探索そのものが agentic の得意分野 |
既存の generateContent を使ったコードは、そのままでは agentic にできません。/v1beta/interactions への移行とレスポンス解析の書き換えが必要なので、30 分以上の動画を扱っているかどうかを先に確認してから着手する順序が現実的です。
検証環境
- モデル:
gemini-3.6-flash(gemini-3.8-flashは検証時に 503 が続いたため 3.6 で統一) - エンドポイント:
https://generativelanguage.googleapis.com/v1beta/interactions - 実行日: 2026-09-03(JST)
- 測定は各条件 1 回。所要時間は
date +%sの差分で、ネットワーク往復を含みます
コストは公式料金表からの手計算で、total_tool_use_tokens の課金区分は公式に明記を見つけられなかったため入力単価で概算しています。全体に占める比率が 156 トークン以下なので、区分が変わっても結論は動きません。
関連記事
- Gemini 3のthinking_level4段階を実測、旧Flashは非対応だった
- repomixほか詰め込みCLI4種を実測比較、トークン数は最大4.4倍差
- Gemini APIで検索結果をJSON化する3実装を比較、公式併用は400で不可だった