🦔

Veo3 APIとClaude Codeで動画作成

に公開

はじめに

いま各所で流行っているらしい、生成動画AIを使ってMVを作るというのをやってみました。
作成した動画は以下。

https://www.youtube.com/watch?v=QfD18WJH2Pw

クオリティはお察しですが、

  • 作詞作曲したことない
  • イラスト書けない
  • 動画編集したことない

という素人が2時間くらいで作成したので、
もう少しスキルある人だったらそれなりのものができそうな感じです。

使用ツール・環境

AI/クラウドサービス

  • Suno AI - 楽曲生成
  • ChatGPT (GPT-5) - MVプロット作成
  • Gemini 2.5 Flash Image - イラスト生成
  • Google Veo 3 API - 動画生成(Vertex AI)
  • Claude Code - 自動化スクリプト作成、動画生成・編集の実行

開発環境・ツール

  • macOS (Apple Silicon) - 開発環境
  • Node.js 20+ - スクリプト実行環境
  • ffmpeg - 動画編集(Claude Codeが使用)
  • Google Cloud SDK - Vertex AI認証

制作フロー

以下のようなフローで作成しました。
プロット作成以降はもっと自動化できそうな気もする。

1. 楽曲の生成(Suno AI)

最初に適当な楽曲をSunoで作成。
90年代風のシティポップつくって、みたいな感じで生成。
このときに指定したキーワードを元にプロットやイメージ画像も作成する。

2. ビジュアルコンセプトの構築(ChatGPT)

イメージ画像の生成

楽曲のイメージから、主人公の画像を生成。
今回はOpenAIのGPT Image 1を使用。

MVプロットの作成

生成した楽曲のイントロ・Aメロ・Bメロ・サビ・アウトロがどこからどこまでかを確認して、
その情報と曲のイメージをChatGPTに渡してMVの構成を設計してもらう。
例えば↓みたいに楽曲のセクションごとに言葉にしてもらう。

  • Intro (0:00-0:18): 雨上がりの道路、ネオンの反射
  • Verse (0:19-0:32): 高架下を一人で歩く主人公
  • Pre Chorus (0:33-0:48): 横断歩道で信号待ち、赤から青へ
  • Chorus (0:49-1:08): ベイサイドを走り出す開放感
  • Outro (1:09-1:58): 振り返って微笑む、フェードアウト

で、各セクションごとにイメージを作成する。
今回はGPT Image 1で適当に作ったけど、
stable diffusionとかmidjourneyでもっとしっかり作るといい気がする。

3. 動画生成スクリプトの開発(Claude Code)

Claude Codeに依頼して、Veo3 APIを使用する動画生成スクリプトや
編集用スクリプトを作成してもらう。
セットアップもClaude Codeにきいて設定。

veo3-generate.js

テキストプロンプトから動画を生成するメインスクリプト。
VertexaiのSDKつかって処理してます。
(Claude Codeに作らせただけ)

require('dotenv').config();
const { VertexAI } = require('@google-cloud/vertexai');
const fs = require('fs');
const path = require('path');

// 環境変数から設定を読み込み
const PROJECT_ID = process.env.GOOGLE_CLOUD_PROJECT;
const LOCATION = process.env.GOOGLE_CLOUD_LOCATION;

・・・

// Vertex AI クライアントの初期化
const vertexAI = new VertexAI({
  project: PROJECT_ID,
  location: LOCATION,
});

・・・

/**
 * 動画を生成
 */
async function generateVideo(prompt) {
  console.log('Generating video for:', prompt);
  
  // 生成リクエスト
  const request = {
    ・・・
  };

  try {
    const operation = await generativeModel.generateVideoStream(request);
    const [response] = await operation.promise();
    return response;
  } catch (error) {
    throw new Error(`Generation failed: ${error.message}`);
  }
}

async function main() {
  // コマンドライン引数からプロンプトを取得
  const prompt = process.argv[2];
  try {
    // 1. 動画を生成
    const response = await generateVideo(prompt);    
    // 2. レスポンスから動画データを取得
      const videoData = response.candidates[0].content.parts[0].videoMetadata.video;
      // 3. 動画を保存
      saveVideo(videoData, `video_sdk.mp4`);
    } else {
      console.log('⚠️ No video was generated');
    }    
  } catch (error) {
    console.error('❌ Error:', error.message);
    process.exit(1);
  }
}

// 実行
if (require.main === module) {
  main();
}

なお、生成される動画は8秒固定なので、Introだと3つ分の動画を生成する。

普通にプロンプトから動画生成させる版と画像を基に動画を生成させる版を作成した。
SDKだと対応してない処理もあったから、REST API版の作成も必要かも。

video-editor.js

作成した動画を編集するスクリプトもClaude Codeに作成してもらう。
中身はffmpegをラップした動画編集ツール。
できることはカット、結合、音声差し替えだけ。

4. ショット別動画生成

Claude Codeに各ショットの生成を依頼。
さっきプロットもらったので、その情報を渡して各セクションの動画を生成してもらう。
共通情報と各セクション個別の情報を渡して動画を生成してもらう。

5. 動画編集とMV完成

生成された動画素材をClaude Codeに編集してもらう。

  1. カット編集
    各ショットを楽曲のセクションに合わせて適切な長さにカット

  2. シーケンス構築
    セクションごとに動画を結合する。
    時間があわなかったりするとClaude Codeが適当にやってくれる。

  3. 音楽の追加: 最後に楽曲を合成

完成。
コスト的にはVeo3がまだちょっと割高。

まとめ

イメージ画像や各プロット、プロットをベースとなる画像をしっかりつくって
動画生成時に適格な指示を出せばもっとまともなものができそうです。

今回自分の手でやったことは以下です。

  • Sunoでの楽曲作成
  • 画像・プロットの作成をGPTに依頼
  • Claude Codeで動画生成と編集依頼

なので、楽曲生成以外は完全に自動化できそうな気もする。

Discussion