0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini 3.1 Flash Image 入門 — 動画から画像を生成するAPI実装ガイド

0
Last updated at Posted at 2026-06-09

はじめに

2026年5月28日、Google の画像生成モデル Gemini 3.1 Flash Image(コードネーム Nano Banana 2) と Gemini 3 Pro Image(Nano Banana Pro) が一般提供(GA)になりました。GA 化にあわせて Flash Image には新機能 video-to-image 生成(動画を入力として画像を生成する機能)が追加されています。

この記事では、Gemini API で動画から画像を生成する方法を、公式ドキュメントに基づいて解説します。

この記事で学べること

  • Gemini 3.1 Flash Image の位置づけと GA 化のポイント
  • 動画から画像を生成する generateContent の呼び出し方(Python / cURL)
  • 出力解像度・アスペクト比の指定方法
  • 料金体系と Pro Image との使い分け

対象読者

  • Gemini API でマルチモーダル生成を扱いたいエンジニア
  • 動画のサムネイル・ポスター・インフォグラフィックを自動生成したい方

前提環境

  • Python 3.10 以降
  • google-genai SDK(pip install google-genai)
  • Gemini API キー(環境変数 GEMINI_API_KEY)

TL;DR

  • gemini-3.1-flash-image は動画ファイル(アップロード or 公開 YouTube URL)を入力にとり、テキストプロンプトとあわせて画像を生成できる
  • video-to-image は Flash Image 専用 機能で、サムネイル・ポスター・要約インフォグラフィックの自動生成に向く
  • 出力は image_config で aspect_ratio と image_size(512 / 1K / 2K / 4K)を指定できる
  • preview 版(gemini-3.1-flash-image-preview など)は 2026年6月25日に停止予定。GA モデル ID への移行が必要

モデルの位置づけ

GA になった 2 つのネイティブ画像モデルは、用途で住み分けられています。

モデル モデル ID 位置づけ
Gemini 3.1 Flash Image gemini-3.1-flash-image 高効率・大量生成向け。video-to-image 対応
Gemini 3 Pro Image gemini-3-pro-image 高品質重視のフラッグシップ

Flash Image は速度と大量利用に最適化された高効率モデルで、Pro Image は品質を重視するフラッグシップという関係です。video-to-image 生成は gemini-3.1-flash-image でのみ サポートされます1。

preview 版モデル(gemini-3.1-flash-image-preview / gemini-3-pro-image-preview)は 2026年6月25日にシャットダウン予定です。preview を使っている場合は GA のモデル ID に置き換えてください。

video-to-image 生成とは

video-to-image は、動画ファイルをマルチモーダルなコンテキストとして渡し、テキストプロンプトとあわせて 1 枚の画像を生成する機能です。公式ドキュメントでは次のような用途が想定されています。

  • 動画のサムネイル
  • 映画ポスター風のビジュアル
  • 動画内容を要約するインフォグラフィック

動画は次の 2 通りで渡せます。

  1. ローカル動画ファイルを直接アップロード(バイト列)
  2. 公開 YouTube URL を file_data として指定

実装手順

1. クライアントの初期化

from google import genai
from google.genai import types

# GEMINI_API_KEY 環境変数を自動で読み込む
client = genai.Client()

2. ローカル動画から画像を生成する

ローカルの動画ファイルをバイト列として読み込み、プロンプトとあわせて渡します。response_modalities に IMAGE を含めるのがポイントです。

with open("source.mp4", "rb") as f:
    video = f.read()

response = client.models.generate_content(
    model="gemini-3.1-flash-image",
    contents=[
        types.Part.from_bytes(
            data=video,
            mime_type="video/mp4",
        ),
        "この動画の主要なテーマを表現したポスター画像を生成して。",
    ],
    config=types.GenerateContentConfig(
        response_modalities=["TEXT", "IMAGE"],
    ),
)

GCS(gs://)上の動画を参照する場合は types.Part.from_uri(file_uri="gs://...", mime_type="video/mp4") を使います。HTTP(S) や YouTube などの URL は、後述の types.FileData(file_uri=...) で渡します。

バイト列を直接渡すインラインデータは、リクエスト全体で 20MB 未満が目安です。サイズの大きい動画は Files API でアップロードしてから参照してください。

3. 公開 YouTube URL から生成する

YouTube URL を入力にする場合は file_data で URL を指定し、video_metadata でサンプリングフレームレート(fps)を調整できます。

response = client.models.generate_content(
    model="gemini-3.1-flash-image",
    contents=[
        types.Part(
            file_data=types.FileData(
                file_uri="https://www.youtube.com/watch?v=..."
            ),
            video_metadata=types.VideoMetadata(fps=0.5),
        ),
        "この動画の内容を要約したインフォグラフィックを生成して。",
    ],
    config=types.GenerateContentConfig(
        response_modalities=["TEXT", "IMAGE"],
    ),
)

fps=0.5 は 2 秒に 1 フレームをサンプリングする設定です。長い動画では fps を小さくすることで処理対象フレームを抑えられます。

4. 生成画像の取り出し

レスポンスのパートを走査し、画像データ(inline data)をファイルに書き出します。

for part in response.parts:
    if part.inline_data is not None:
        with open("output.png", "wb") as f:
            f.write(part.inline_data.data)
    elif part.text is not None:
        print(part.text)

5. cURL での呼び出し

REST で呼ぶ場合は次のようになります。

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1/models/gemini-3.1-flash-image:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "parts": [
        {
          "file_data": { "file_uri": "https://www.youtube.com/watch?v=..." },
          "video_metadata": { "fps": 0.5 }
        },
        { "text": "この動画のテーマを表現したポスターを生成して。" }
      ]
    }],
    "generationConfig": { "responseModalities": ["TEXT", "IMAGE"] }
  }'

出力解像度・アスペクト比の指定

出力画像のサイズや比率は image_config で制御します。

config=types.GenerateContentConfig(
    response_modalities=["TEXT", "IMAGE"],
    image_config=types.ImageConfig(
        aspect_ratio="16:9",
        image_size="2K",
        output_mime_type="image/png",
    ),
)
パラメータ 指定可能な値(抜粋)
image_size 512, 1K, 2K, 4K(K は大文字)
aspect_ratio 1:1, 3:2, 2:3, 4:3, 3:4, 4:5, 5:4, 9:16, 16:9, 21:9 ほか

image_size の「K」は 大文字 で指定する必要があります(1k ではなく 1K)。

サムネイルは 16:9、縦長のポスターは 9:16 や 2:3 のように、用途に合わせて比率を選びます。

料金

Gemini API の画像出力はトークン単位で課金されます。Standard ティアの料金は次のとおりです2。

右の 3 列は 1 画像あたりの目安です。

モデル 入力(per 1M) 出力(per 1M tokens) 1K 2K 4K
Gemini 3.1 Flash Image $0.50(text/image) $60.00(images) 約 $0.067 約 $0.101 約 $0.151
Gemini 3 Pro Image $2.00(text/image) $120.00(images) 約 $0.134 約 $0.134 約 $0.24

Flash Image は Batch API を使うと出力が半額($30.00/1M tokens、1K 画像あたり約 $0.034)になります。大量生成では Batch、品質最優先では Pro Image という使い分けが基本です。

注意点

  • video-to-image は Flash Image 専用 です。Pro Image では利用できません。
  • preview 版モデルは 2026年6月25日に停止予定のため、GA のモデル ID(gemini-3.1-flash-image / gemini-3-pro-image)へ移行してください。
  • YouTube URL を入力にする場合は、対象が公開動画である必要があります。
  • 長尺動画では video_metadata.fps を小さくして、処理対象のフレーム数とトークン消費を抑えるのが有効です。

まとめ

  • Gemini 3.1 Flash Image は 2026年5月28日に GA となり、動画を入力に画像を生成する video-to-image に対応した
  • 動画はローカルアップロード・リモート URI・公開 YouTube URL のいずれでも渡せる
  • 出力は image_config で解像度(512〜4K)とアスペクト比を制御できる
  • 大量生成は Flash Image(+Batch)、品質重視は Pro Image という住み分けが基本

動画コンテンツからサムネイルやポスターを自動生成するワークフローは、メディア運用や SNS 投稿の効率化に直結します。まずは小さな動画とシンプルなプロンプトで生成結果を確かめてみるのがよいでしょう。

参考リンク

  1. Release notes | Gemini API(2026-05-28 のエントリ) ↩

  2. Gemini API Pricing(2026年6月時点) ↩

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?