はじめに

こんにちは!
いつもDBひとりでできるもんをご覧いただきありがとうございます。技術チームです!!

動画制作は通常膨大な時間とコストがかかりますが、AIはこの常識を大きく変えようとしています
照明や角度、カメラなどの専門知識はなくても、それなりの良い動画が作れる時代が訪れました。

10月1日OpenAIのSora2というAI動画生成モデルが公開された以降、Sora2で生成されたAI動画が続々とSNSで投稿されました。
約2週間後、GoogleはSora2と対抗するためVeo3.1を公開しました。
Sora2くらい話題になっていないかもしれませんが、このモデルの性能は高く評価されています。

LMArena(※注1)のリーダーボードでは、最もスコアが高いモデルはveo-3.1-fast-audioでした(11月19日現在)。
そこで、veo-3.1-fast-audioの性能を確かめに、今回Pythonで検証を行ってみました。

 

今回の執筆者は以下に登場しています。是非ご覧ください!
Mr.ブースト、会議室に現る! AI画像生成モデルNano Bananaでリアル合成

事前準備

使用したツール

Oracle Cloud Infrastructure(OCI)で作成したインスタンス、下記のセットアップで検証しました。

  • OS: Oracle Linux 9
  • コードエディター:VS Code
  • Python v3.12

Python環境作成

Google Gen AI Python SDKで動画を生成します。
まず、google-genaiというパッケージが必要です。
このパッケージはGemini Developer APIとVertex AIを対応しています。

動かすためにはPython3.10以上が必要です。
また、OCI上でOracle Linux 9のOSで動かしていますが、Pythonバージョンの条件を満たせば、OS関係なく動かせます。(ただし、使用するターミナルの種類によってコードの書き方は少し異なる場合があります)

Pythonバージョン確認(Python 10以上必要)します。ターミナルで下記を入力:

python -V
# 出力:Python 3.12.9

仮想環境(※注2)セットアップ

# パス:/home/[user] 
# フォルダ作成と移動
mkdir genai-test && cd genai-test 

# パス:/home/[user]/genai-test
# 仮想環境作成と実行
python -m venv .venv && source .venv/bin/activate

Google APIキー取得について

Gemini APIを使うため、Google Cloudのアカウント作成が必要です。
無料のお試し期間があり、90日間有効な約45,000円(USD300)の無料クレジット利用できます。
無料クレジットを使うには、連絡先情報とお支払い方法の登録が必要です。

登録が済みましたら、コンソールからAPIとサービスにアクセスし、Gemini APIを有効であることをご確認ください。
また、同じAPIとサービスのページに、認証情報からAPIキーを取得できます。APIキーがない場合、新しく作成できます。
APIキーは不正使用されないように、安全な場所で保管してください。(詳しい手順はGoogleの公式サイトをご参照ください)

python-dotenvでGoogle APIキーをインポート

ソースコードにAPIキーを直接書くと、GitHubなどに誤ってアップロードしたときに流出してしまいます。
.envファイルに保存して.gitignoreで除外すれば、キーが公開されるのを防げます。

また、開発環境、テスト環境、本番環境など、それぞれ異なるAPIキーを使うときに、.envを環境ごとに切り替えることでコードを変更せずに対応できます。
Pythonの場合、python-dotenvを使えばos.getenv('API_KEY')で簡単にAPIキーを読み込めます。キーを変更するときも.envファイルを編集するだけです。

#パス:/home/[user]/genai-test

# dotenvをインストール
pip install python-dotenv
    
# .env作成(あなたのGOOGLE APIキーに置き換えください)
echo "GOOGLE_API_KEY=あなたのGOOGLE APIキー" > .env

コードエディターを使ってtest.pyを作成し、.envのAPIキーをインポート。

# パス:/home/[user]/genai-test
# test.py作成と編集
nano test.py

下記のコードをtest.pyに下記、保存します。

# ファイル:/home/[user]/genai-test/test.py
import os
from dotenv import load_dotenv

# .envを読み込む
load_dotenv()

# APIキーを取得
api_key = os.environ.get("GOOGLE_API_KEY")
print(api_key)

test.pyを実行して、.envに書いたAPIキーが出力すればOkです。

# パス:/home/[user]/genai-test
python test.py
# 出力:あなたのGOOGLE APIキー

動画生成用画像をgemini-2.5-flash-image(Nano Banana)で生成

思い通りの動画を文書で表現するのは限界があります。
スケッチや画像を参照させ、生成された動画の精度を上げられます。

Veo3.1のドキュメントによりますと、動画の最初と最後のフレームを指定することはできます。
今回は、イラスト1枚からPR動画を作りたいので、まずイラストをリアル世界にあるようなキャラに生成し、それを使用して動画の最初と最後のフレームを作ります。
用意されたイラストは下記のMr.ブーストです。

mr-boost

 

上記の画像ファイルをプロジェクトフォルダにいれた後、必要なPythonパッケージをインストールします。

# パス:/home/[user]/genai-test
# Google Gen AI Python SDKインストール
pip install google-genai

# 画像操作用パッケージPillow
pip install pillow

新しいPythonファイル(eg. image.py)を作成し、下記のようにGoogle Gen AI Python SDKで画像生成します。

# ファイル:/home/[user]/genai-test/image.py

import os
from dotenv import load_dotenv
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

# .envファイルから環境変数を読み込む
load_dotenv()

# Google APIキーを取得
api_key = os.environ.get("GOOGLE_API_KEY")
# print(api_key)

# Google Genai クライアントを初期化
client = genai.Client(api_key=api_key)

# プロンプト(生成する画像の説明)
prompt = "白い背景で、画像のキャラはリアル世界に存在するようなロボットが立っています。"

# Mr.ブーストの入力画像を開く
image = Image.open("mr-boost.png")

# 画像を生成するためのリクエストを送信
response = client.models.generate_content(
    model="gemini-2.5-flash-image",
    contents=[prompt, image], # プロンプトと入力画像指定
    config=types.GenerateContentConfig(
        image_config=types.ImageConfig(aspect_ratio="16:9") #アスペ比指定
    ),
)

# レスポンスの各パーツを処理
for part in response.candidates[0].content.parts:
    # テキストの場合は出力
    if part.text is not None:
        print(part.text)
    # 画像データ保存
    elif part.inline_data is not None:
        # バイトデータから画像オブジェクトを作成
        gen_img = Image.open(BytesIO(part.inline_data.data))
        # 生成された画像をファイルに保存
        gen_img.save("generated_image.png")

上記のコードを実行したら、無事に下記の画像が生成されました。

Mr.ブーストを3D化

 

同じやり方で、次は動画用の最初と最後のフレームを生成します。

Mr.ブースト動画最初のフレーム

Mr.ブースト動画最後のフレーム

動画の生成

それでは、必要な資材は揃いましたので、動画の生成ステップに進みます。
動画生成用のPythonスクリプト作成します(eg.video.py)。Google Gen AI Python SDK ドキュメントにそれぞれのAPIの仕様は書かれていますが、モデルによって使えないパラメータもあります。
特に最新モデルについて、正確のパラメータ設定はVeo 3.1ドキュメントサイトのほうでご確認ください(英文)。

プロンプトについて、短く書くとモデルに自由度を与えることはでき、長く細かいものより良い効果を得られる場合があります。

また、モデルに入力するプロンプトはネガティブな表現は避けるべきです。
動画生成モデルに限らず、AIモデルは除外処理は不得意分野であり、例えば「月のない夜空」などで入力すると逆に月が出現するような現象が発生します。

そのため、多くのモデルにネガティブ用のパラメータを用意されております。
Veo 3.1の場合、動画に欲しくない要素はnegative_promptのパラメータで指定できます。
プロンプトに関するブログもありますが、ドキュメントの説明のほうが情報量が多く、参考になります。

今回やろうとしている、最初と最後のフレームを指定して動画を生成することはインタポレーションといいまして、このモードでは動画の長さは設定値は8秒のみです(通常設定可能値:4, 6, 8秒)。
他にreference_imagesで、最大3枚までの参照画像を送ることは可能ですが、上位モデルのVeo 3.1のみ使用可能で、Veo 3.1 Fastは使用できません。

# ファイル:/home/[user]/genai-test/video.py
import os
import time
from dotenv import load_dotenv
from google import genai
from google.genai import types


load_dotenv()
api_key = os.environ.get("GOOGLE_API_KEY")
client = genai.Client(api_key=api_key)

# 動画の最初と最後のフレームとなる画像を読み込む
first_frame = types.Image.from_file(location="first.png")
last_frame = types.Image.from_file(location="last.png")

# 動画生成リクエストを送信
operation = client.models.generate_videos(
    model="veo-3.1-fast-generate-preview",
    prompt="ロボットがパソコンでネットサーフィンしてからカメラに向き、「AIメディアブースト」と言って親指を立てるいいねのジェスチャーをする。",
    image=first_frame, # 開始フレームを指定
    config=types.GenerateVideosConfig(duration_seconds=8, last_frame=last_frame), # 動画の長さと終了フレームを設定
)

# 10秒毎に動画生成のステータスチェック
while not operation.done:
    print("動画生成中...")
    time.sleep(10)
    operation = client.operations.get(operation)

# 生成された動画データを取得
video = operation.response.generated_videos[0]

# 動画ファイルをダウンロード
client.files.download(file=video.video)

# 動画をローカルファイルとして保存
video.video.save("veo3_1.mp4")
print("動画を保存しました。ファイル名:veo3_1.mp4")

  # パス:/home/[user]/genai-test
  # video.pyを実行
  python video.py
  """
  出力:
  動画生成中...
  動画生成中...
  動画生成中...
  動画生成中...
  動画生成中...
  動画を保存しました。ファイル名:veo3_1.mp4
  """

生成できました!Veo-3.1-fastモデルに約1分間で8秒の動画が生成されました。

APIの利用料は0.15USD/1秒で、費用は約190円でした。
上位モデルのveo-3.1は0.4USD/1秒なので、それで生成された場合は約500円です。
API仕様書によりますと、動画の生成が失敗した場合費用はかからないらしいです。

プロンプトにセリフの声に指示はなく、女性声になってしまいました…

検証ですし、今回はこれで良しとしましょう。

まとめ

Veo 3.1の検証を行いましたが、いかがでしょうか。
今回の検証では、動画の最初と最後のフレームを指定してAI動画生成モデルにインタポレーションしてもらいました。

生成された動画8秒でしたが、ドキュメントによりますと最大148秒まで延長可能です。
また、複数の148秒の動画を動画編集ソフトで繋いでいけば長い動画も作れます!
最後までお読みいただき、ありがとうございました!

注釈

※注1) LMArenaはカリフォルニア大学バークレー校(略称UC Berkeley)発のAI評価プラットフォームです。ユーザーが2つの匿名モデルに同じプロンプトを入力し、より良い回答を投票する方式で、大規模言語モデルを採点します。
月間100万人の訪問者で、AI業界では広く参照されています。

※注2)
Pythonの仮想環境は、プロジェクトごとに独立したパッケージ環境を作るために必要です。
異なるプロジェクトで異なるバージョンのライブラリが必要な場合、仮想環境がないとバージョン競合が起こります。仮想環境を使うことで、システム全体に影響を与えず、各プロジェクトを独立して管理でき、requirements.txtやpyproject.tomlなどで環境を再現することも簡単になります。
AIのノウハウを活用したチャットボットを手軽に導入!


AIチャットボット導入を相談

顧客満足度も業務効率も両立できます

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早8年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!
最新技術情報や資格情報をチェックしたいアナタ!毎日遊びに来てください。きっとお役に立てます。