Gemini 2.5 Pro/Flashにおけるマルチモーダルトークン(画像のトークン数、動画のトークン数など)計算ガイド
こんにちは!
本日は、Gemini 2.5 ProおよびGemini 2.5 Flashを使用する際、料金計算やコンテキストウィンドウの管理において、トークン数の正確な把握は非常に重要です。本記事では、画像、動画、音声といったマルチモーダルコンテンツのトークン計算方法について詳しく解説します。
基本概念:トークンとは
Gemini 2.5シリーズにおいて、1トークンは約4文字に相当し、100トークンは約60-80語(英語)に相当します。すべての入力と出力はトークン単位で処理され、課金もトークン数に基づいて行われます。
Gemini 2.5シリーズのモデルと料金
利用可能なモデル
- Gemini 2.5 Pro: 高度な推論能力を持つフラグシップモデル
- Gemini 2.5 Flash: コスト効率に優れた高速モデル
- Gemini 2.5 Flash Image: 画像生成専用モデル
コンテキストウィンドウ
両モデルとも1,000,000トークンの大規模なコンテキストウィンドウを提供します。
料金体系(プレビュー段階)
| モデル | 入力料金 | 出力料金 |
|---|---|---|
| Gemini 2.5 Pro | $4/100万トークン | $20/100万トークン |
| Gemini 2.5 Flash | $0.30/100万トークン | $2.50/100万トークン |
| Gemini 2.5 Flash Image | - | 1画像あたり1290トークン(約$0.039) |
画像のトークン計算
動的タイリングシステム
Gemini 2.5シリーズでは、画像サイズに応じた動的なタイリングシステムを採用しています。
小さい画像(384ピクセル以下)
- 両方の寸法が384ピクセル以下の画像:258トークン固定
大きい画像(384ピクセル超)
- 768×768ピクセルのタイルに分割
- 各タイル:258トークン
- 総トークン数 = タイル数 × 258
実装例
from google import genai
client = genai.Client()
prompt = "この画像について説明してください"
# 画像ファイルをアップロード
image_file = client.files.upload(file="sample_image.jpg")
# トークン数をカウント
token_count = client.models.count_tokens(
model="gemini-2.5-flash",
contents=[prompt, image_file]
)
print(f"総トークン数: {token_count}")
# 例: 小さい画像の場合 → total_tokens: 263(テキスト5 + 画像258)
タイル数の計算方法
def calculate_image_tokens(width, height):
if width <= 384 and height <= 384:
return 258
else:
tiles_width = (width + 767) // 768
tiles_height = (height + 767) // 768
return tiles_width * tiles_height * 258
重要なポイント
- File APIでアップロードした画像とインラインデータとして提供した画像で、トークン数は同じ
- 画像の解像度に応じてトークン数が変動するため、事前の確認が重要
動画のトークン計算
固定レート方式
動画は時間ベースの固定レートでトークン化されます。
レート:1秒あたり263トークン
計算例
import time
from google import genai
client = genai.Client()
prompt = "この動画の内容を要約してください"
# 動画ファイルをアップロード
video_file = client.files.upload(file="sample_video.mp4")
# 動画処理の完了を待つ
while video_file.state.name != "ACTIVE":
print("動画を処理中...")
time.sleep(5)
video_file = client.files.get(name=video_file.name)
# トークン数をカウント
token_count = client.models.count_tokens(
model="gemini-2.5-flash",
contents=[prompt, video_file]
)
print(f"総トークン数: {token_count}")
動画長とトークン数の関係
| 動画の長さ | トークン数 |
|---|---|
| 1秒 | 263 |
| 10秒 | 2,630 |
| 1分 | 15,780 |
| 5分 | 78,900 |
音声のトークン計算
固定レート方式
音声も時間ベースの固定レートでトークン化されます。
レート:1秒あたり32トークン
音声長とトークン数の関係
| 音声の長さ | トークン数 |
|---|---|
| 1秒 | 32 |
| 10秒 | 320 |
| 1分 | 1,920 |
| 5分 | 9,600 |
実践的な使用例:使用メタデータの活用
generate_contentを呼び出した後、usage_metadataから詳細なトークン情報を取得できます。
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=[prompt, media_file]
)
# 詳細なトークン情報を取得
metadata = response.usage_metadata
print(f"入力トークン: {metadata.prompt_token_count}")
print(f"出力トークン: {metadata.candidates_token_count}")
print(f"総トークン数: {metadata.total_token_count}")
# キャッシュトークンの取得(利用可能な場合)
if hasattr(metadata, 'cached_content_token_count'):
print(f"キャッシュトークン: {metadata.cached_content_token_count}")
# 思考トークンの取得(思考モデルを使用している場合のみ)
if hasattr(metadata, 'thoughts_token_count'):
print(f"思考トークン: {metadata.thoughts_token_count}")
コスト最適化のベストプラクティス
1. 事前のトークン数確認
# generate_contentを呼ぶ前にトークン数を確認
estimated_tokens = client.models.count_tokens(
model="gemini-2.5-flash",
contents=contents
)
if estimated_tokens > threshold:
# コンテンツを調整または警告を表示
pass
2. 画像の最適化
- 不必要に大きい画像は避ける(タイル数が増えるため)
- 384ピクセル以下の画像は258トークン固定なので、小さいサムネイルで十分な場合は活用
3. 動画・音声の長さ管理
- 動画:必要な部分のみを切り出して使用
- 音声:動画より効率的(同じ1秒で32トークン vs 263トークン)
4. コンテキストキャッシング
Gemini 2.5シリーズでは、コンテキストキャッシングを活用することでトークン使用量を削減できます。キャッシュされたトークンは通常の半額で課金されます。
5. モデルの使い分け
- 複雑なタスク:Gemini 2.5 Pro
- 高速処理が必要な場合:Gemini 2.5 Flash
- コスト重視:Gemini 2.5 Flash(Proの約1/7の入力コスト)
まとめ
Gemini 2.5 Pro/Flashのマルチモーダルトークン計算は以下のルールに従います。
- 画像: 384px以下は258トークン、それ以上はタイル数×258トークン
- 動画: 1秒あたり263トークン
- 音声: 1秒あたり32トークン
- コンテキストウィンドウ: 両モデルとも100万トークン
これらの計算方法を理解することで、APIの使用コストを予測し、コンテキストウィンドウを効率的に管理できます。特に大規模なマルチモーダルアプリケーションを開発する際は、事前のトークン数確認とコンテンツの最適化が重要です。
参考リンク
より詳細な情報については、Gemini API公式ドキュメントをご参照ください。
