GEMINI LABEN
MODEL — Gemini 3.5 Flashが一般提供開始。3.1 Proをほぼ全ベンチで上回りつつ4倍高速に動作しますAGENTS — Managed AgentsがGemini APIでパブリックプレビュー。Googleホストの隔離Linuxサンドボックスで自律エージェントを動かせますSEARCH — File Searchがマルチモーダル検索に対応。gemini-embedding-2で画像をネイティブに埋め込み・検索できますAPI — Batch APIや長時間処理向けにイベント駆動Webhooksが追加され、ポーリングを置き換えられますSTUDIO — Google AI Studioが自然言語からAndroidアプリを生成。Nano Bananaで画像も自動生成しますMIGRATION — Gemini CLIは6/18でEOL。Agentic 2.0 CLIへの移行が必要です(画像プレビュー2種は6/25停止)MODEL — Gemini 3.5 Flashが一般提供開始。3.1 Proをほぼ全ベンチで上回りつつ4倍高速に動作しますAGENTS — Managed AgentsがGemini APIでパブリックプレビュー。Googleホストの隔離Linuxサンドボックスで自律エージェントを動かせますSEARCH — File Searchがマルチモーダル検索に対応。gemini-embedding-2で画像をネイティブに埋め込み・検索できますAPI — Batch APIや長時間処理向けにイベント駆動Webhooksが追加され、ポーリングを置き換えられますSTUDIO — Google AI Studioが自然言語からAndroidアプリを生成。Nano Bananaで画像も自動生成しますMIGRATION — Gemini CLIは6/18でEOL。Agentic 2.0 CLIへの移行が必要です(画像プレビュー2種は6/25停止)
記事一覧/API / SDK
API / SDK/2026-06-23上級

Nano Banana 2 に動画を渡してサムネイルを1枚生成する — gemini-3.1-flash-image の動画→画像を実装したメモ

GA になった gemini-3.1-flash-image(Nano Banana 2)に動画ファイルを文脈として渡し、サムネイルを1枚生成する実装手順です。フレーム抽出との違い、preview からの移行差分、1枚あたりのコストと所要時間の実測までまとめました。

gemini86gemini-api246nano-banana2image-generation6multimodal23

プレミアム記事

動画のサムネイルを手で切り出す作業が、地味に時間を奪っていました。個人開発で複数のアプリ紹介動画や短い解説クリップを回していると、1本ごとに「見栄えのする1フレーム」を探してトリミングし、文字を載せる下地を作る——この前段だけで1本あたり10分近く溶けます。10本あれば、それだけで午後が終わります。

6月22日に gemini-3.1-flash-image(通称 Nano Banana 2)が GA になり、動画ファイルそのものをマルチモーダルの文脈として渡して、サムネイル・ポスター・インフォグラフィックを生成できるようになりました。フレームを1枚選んで渡すのではなく、動画を丸ごと文脈として読ませて「この動画を象徴する静止画を作って」と頼める、という点が今までと違います。私自身、半信半疑で手元のクリップで試したところ、思った以上に「動画の主題」を拾った1枚が返ってきたので、実装の手順と、運用に乗せるうえで引っかかった点を残しておきます。

「フレームを選ぶ」から「動画を文脈として渡す」への変化

これまで動画からサムネイルを作る場合、自分か ffmpeg が代表フレームを1枚選び、その静止画を画像理解モデルに渡す、という二段構えが普通でした。問題は「代表フレームを選ぶ」工程が機械的になりがちなことです。動きの山場や、文字が出る瞬間といった「人間が見て良いと感じる瞬間」は、明るさやシャープネスのスコアだけでは拾えません。

gemini-3.1-flash-image の動画入力は、ここを一段飛ばします。動画を文脈として渡すと、モデルは時間方向の流れを踏まえたうえで「象徴的な1枚」を生成します。既存のフレームをそのまま返すのではなく、新しく描き起こす点に注意してください。つまり出力は「動画の中の実在フレーム」ではなく「動画の主題を表す生成画像」です。実写の正確な再現が要件なら ffmpeg のフレーム抽出が向きますが、SNS のサムネイルやポスターのように「雰囲気が伝わる1枚」が欲しい用途では、生成側が圧倒的に速いというのが触ってみた実感です。

この使い分けは、以前 Gemini 3.2 Flash の Image Output で壁紙の色違いを量産した実装メモ で触れた「実写の改変は避け、生成は生成として割り切る」という線引きとも地続きです。

最小構成:動画を渡して1枚を生成する

まずは動かして感触をつかむのが早いです。Files API で動画をアップロードし、その参照を画像生成リクエストの文脈に含めるだけです。

動画をアップロードする

# pip install google-genai
from google import genai
 
client = genai.Client(api_key="YOUR_GEMINI_API_KEY")
 
# 動画を Files API にアップロード(数十秒のクリップを想定)
video = client.files.upload(file="intro_clip.mp4")
 
# アップロード直後は state=PROCESSING のことがあるので ACTIVE を待つ
import time
while video.state.name == "PROCESSING":
    time.sleep(2)
    video = client.files.get(name=video.name)
 
if video.state.name != "ACTIVE":
    raise RuntimeError(f"upload failed: {video.state.name}")
 
print("uploaded:", video.name)  # files/xxxxxxxx

ここで PROCESSING を待たずに次へ進むと、生成リクエスト側で「ファイルがまだ使えない」というエラーになります。最初にここで詰まったので、ACTIVE になるまで待つループは省かないでください。

動画を文脈に画像を生成する

from google.genai import types
 
resp = client.models.generate_content(
    model="gemini-3.1-flash-image",  # GA 版。preview サフィックスは付けない
    contents=[
        video,  # 動画そのものを文脈として渡す
        (
            "この動画を象徴する1枚のサムネイル画像を生成してください。"
            "縦横比は16:9。中央に主題の被写体を据え、"
            "上部に短いテキストを載せられる余白を残してください。"
            "実写の写し取りではなく、雰囲気が伝わる構図で。"
        ),
    ],
    config=types.GenerateContentConfig(
        response_modalities=["IMAGE"],
    ),
)

生成画像を保存する

saved = 0
for part in resp.candidates[0].content.parts:
    if getattr(part, "inline_data", None) and part.inline_data.data:
        with open(f"thumb_{saved}.png", "wb") as f:
            f.write(part.inline_data.data)
        saved += 1
 
print(f"saved {saved} image(s)")  # 期待値: saved 1 image(s)

ポイントは3つです。第一に、モデル名は GA 版の gemini-3.1-flash-image を使い、-preview を付けないこと。第二に、response_modalitiesIMAGE を含めること(テキストだけ返ってきて画像が空、という時はここの設定漏れがほとんどです)。第三に、プロンプトで「余白」「縦横比」「実写の写し取りはしない」を明示することです。後段で文字を載せるなら、上部の余白を頼んでおくと作業が楽になります。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
動画からサムネイルを毎回手作業で切り出していた人が、動画を渡すだけで1枚生成するコードを今日手に入れられる
preview モデルに依存していたパイプラインを、GA 版 gemini-3.1-flash-image へ壊さずに移すための具体的な差分が分かる
1枚あたりのコストと所要時間の目安をつかみ、自分の動画本数で月額がいくらになるか試算できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API / SDK2026-05-25
gemini-2.5-flash-image で参照画像が反映されない・別物が生成される時の原因と対処
gemini-2.5-flash-image(Nano Banana)で参照画像を渡したのに別物が生成される、編集指示が無視されるといった症状の切り分け手順をまとめました。parts の順序・response_modalities・画像サイズ・chat session ごとの落とし穴を、動くコードと一緒に整理しています。
API / SDK2026-05-18
Gemini Vision で壁紙アプリの自動カテゴリ分類を実装した話
個人開発の壁紙アプリで Gemini Vision API を使い、画像の自動カテゴリ分類を実装した実体験です。精度改善のプロセスと、公式ドキュメントには載っていない落とし穴、GPT-4o Vision とのコスト比較までまとめました。
API / SDK2026-05-16
Gemini Vision で壁紙アプリのカテゴリ自動分類を試した — 精度と落とし穴の実記録
壁紙アプリ(累計5,000万DL超)の運営者が Gemini Vision を使って画像カテゴリ自動分類を実装。精度67%→87%への改善プロセスと、個人開発者が実運用で感じた限界を具体的に紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →