0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【驚きの結果】Runway Gen-4で動画を連鎖生成しても画質が落ちにくい!長尺動画を作る実用的な手法を検証

Last updated at Posted at 2025-09-30

この記事の著者について:フルスタックエンジニア/AI統合開発専門家として、AI動画生成技術の研究開発を行っています。
ポートフォリオサイト:https://snamo.jp/

はじめに

Runway Gen-4 Turboは画像から高品質な動画を生成できる素晴らしいAIモデルですが、最大10秒(または5秒)までしか生成できないという制限があります。

「もっと長い動画を作りたい...」

そんな時、ふと思いつきました。

「動画の最終フレームをキャプチャして、それを次の動画の入力画像として使えば、連鎖的に長い動画が作れるのでは?」

ただし、通常の動画エンコードでは圧縮を繰り返すと品質劣化が蓄積します。懸念していたのは:

  • 🤔 3回も繰り返したら画質がボロボロになるのでは?
  • 🤔 ノイズが増えて見られたものじゃなくなるのでは?

実際に試してみたところ、予想を完全に覆す結果となりました。

TL;DR(結論)

  • Gen-4 Turboで5秒×3回の連鎖生成を実施
  • 品質劣化は全く見られなかった(驚き!)
  • ✅ 画質、色彩、エッジの鮮明さ、全て維持
  • 💰 Google Veoシリーズの1/3〜1/8の価格(コスパ最強!)
  • ⚠️ コストは回数分かかる(5秒×3回 = $0.75)
  • 💡 実用的な手法として十分使える

実装内容

アーキテクチャ

  • フロントエンド: Next.js 15 (App Router)
  • API: Runway API (Gen-4 Turbo)
  • 主要機能:
    • 画像アップロード
    • 動画生成(ポーリング)
    • 最終フレームのPNGキャプチャ ← 今回のキーポイント

主要コード

1. 最終フレームキャプチャ機能

src/app/page.tsx
// 動画の最後のフレームをキャプチャ
function captureLastFrame() {
  const video = document.querySelector("video");
  if (!video) return;

  // 動画を最後まで移動
  video.currentTime = video.duration;
  
  // 少し待ってからキャプチャ(シークが完了するまで)
  video.onseeked = () => {
    const canvas = document.createElement("canvas");
    canvas.width = video.videoWidth;
    canvas.height = video.videoHeight;
    
    const ctx = canvas.getContext("2d");
    if (!ctx) return;
    
    // ビデオの現在のフレームをcanvasに描画
    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
    
    // PNGとしてデータURLを生成
    const imageDataUrl = canvas.toDataURL("image/png");
    setCapturedImage(imageDataUrl);
    
    // 自動ダウンロード
    const link = document.createElement("a");
    link.href = imageDataUrl;
    link.download = `last-frame-${taskId || "capture"}.png`;
    link.click();
  };
}

2. Runway API呼び出し(Image to Video)

src/app/api/generate/image-to-video/route.ts
export async function POST(request: Request) {
  const apiKey = process.env.RUNWAY_API_KEY;
  const form = await request.formData();

  const image = form.get("image");
  const duration = Number(form.get("duration") || "5");
  const ratio = form.get("resolution") || "1280:720";
  const prompt = form.get("prompt") || "";

  // 画像をBase64に変換
  const arrayBuffer = await (image as Blob).arrayBuffer();
  const base64 = Buffer.from(arrayBuffer).toString("base64");
  const dataUrl = `data:image/png;base64,${base64}`;

  const payload = {
    model: "gen4_turbo",
    promptImage: dataUrl,
    ratio,
    duration,
    ...(prompt ? { promptText: prompt } : {}),
  };

  const resp = await fetch("https://api.dev.runwayml.com/v1/image_to_video", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${apiKey}`,
      "Content-Type": "application/json",
      "X-Runway-Version": "2024-11-06",
    },
    body: JSON.stringify(payload),
  });

  const data = await resp.json();
  return Response.json({ taskId: data.id });
}

3. UI(動画プレビューとキャプチャボタン)

src/app/page.tsx
{videoUrl && (
  <div className="mt-6">
    <video src={videoUrl} controls className="w-full" crossOrigin="anonymous" />
    <div className="mt-3 flex gap-3 flex-wrap">
      <a href={videoUrl} download className="text-blue-600 underline text-sm">
        動画をダウンロード
      </a>
      <button 
        onClick={captureLastFrame}
        className="bg-green-600 text-white px-4 py-1.5 rounded text-sm hover:bg-green-700"
      >
        📸 最後のフレームをPNG保存
      </button>
    </div>
    {capturedImage && (
      <div className="mt-4 p-3 bg-green-50 border border-green-200 rounded">
        <p className="text-sm font-semibold text-green-700 mb-2">
          最後のフレームをキャプチャしました:
        </p>
        <img src={capturedImage} alt="最後のフレーム" className="w-full border rounded" />
      </div>
    )}
  </div>
)}

セットアップ方法

# 環境変数の設定
echo "RUNWAY_API_KEY=your_api_key_here" > .env.local

# 依存関係のインストール
npm install

# 開発サーバー起動
npm run dev

実験:5秒×3回の連鎖生成

実験手順

  1. 1回目: 初期画像(キャラクターのイラスト)→ 5秒動画生成
  2. 最終フレームキャプチャ: 1回目の動画の最後のフレームをPNG保存
  3. 2回目: キャプチャした画像 → 5秒動画生成
  4. 最終フレームキャプチャ: 2回目の動画の最後のフレームをPNG保存
  5. 3回目: キャプチャした画像 → 5秒動画生成
  6. 結合: 3本の動画を動画編集ソフトで結合(計15秒)

使用設定

  • モデル: Gen-4 Turbo
  • 時間: 5秒 × 3回
  • 解像度: 1280:720
  • プロンプト: あり(各回で調整)
  • 総コスト: 5秒 × 3回 × $0.01 × 25 = $0.75

結果:品質劣化は全く見られなかった!

実際の動画(5秒×3回 = 15秒)

▶️ 完成した動画を見る (heart.mp4)

キャラクターの登場 → 光の柱の出現 → ハート形のエフェクト

動画をクリックすると、ブラウザで再生またはダウンロードできます。
動きが滑らかで品質劣化は全く見られません!

各段階のフレーム比較

以下は、1回目、2回目、3回目の動画からそれぞれ抽出したフレームです:

1回目の動画から
frame1.png

キャラクターと夜景の描写が非常に鮮明

2回目の動画から
frame2.png

光の柱が追加され、背景のディテールも保持

3回目の動画から
frame3.png

ハート形のエフェクト、グラデーションも美しく描写

品質分析

各項目を詳しく確認しました:

項目 評価 詳細
画質の鮮明さ ⭐⭐⭐⭐⭐ キャラクターの髪の毛の細かいディテールまで保持
色彩の豊かさ ⭐⭐⭐⭐⭐ 青い夜空のグラデーション、月の白、光の青、全て鮮やか
エッジの鮮明さ ⭐⭐⭐⭐⭐ 輪郭がシャープ、ぼやけやにじみなし
ノイズ ⭐⭐⭐⭐⭐ ブロックノイズ、圧縮アーティファクトなし
背景のディテール ⭐⭐⭐⭐⭐ 建物の窓、星、雪のパーティクルも鮮明
光のエフェクト ⭐⭐⭐⭐⭐ グローエフェクト、グラデーションに破綻なし

結論: 3回の連鎖でも品質劣化は全く見られませんでした!

なぜ品質が落ちないのか?(考察)

従来の動画エンコードでは、繰り返すごとに品質が劣化していきます。しかし、今回の手法では劣化が見られませんでした。その理由を考察します:

1. PNG保存が鍵

動画1(MP4) → 最終フレーム → PNG保存(可逆圧縮)→ 動画2の入力
  • MP4からPNGへの変換時点で非圧縮または可逆圧縮
  • 次の生成時には高品質な静止画として入力
  • 動画→動画の変換(トランスコード)ではないため、劣化の蓄積が起きない

2. 各生成が独立している

  • 従来の動画エンコード: 前のフレームの情報を参照(差分圧縮)
  • AI生成: 毎回静止画から新規に生成
  • エラーや劣化が蓄積しない構造

3. Runwayの高品質なエンコード

  • Gen-4 Turboでも非常に高品質
  • 十分なビットレート
  • 最新のエンコード技術

4. AIのノイズ除去能力?

  • AI生成時に入力画像のノイズを自動的にクリーンアップしている可能性
  • 劣化するどころか、むしろ改善されている可能性も?

コストと実用性

コスト計算

Gen-4 Turboの料金体系:

  • 5秒: $0.01 × 25 credits = $0.25
  • 10秒: $0.01 × 50 credits = $0.50

今回の実験(5秒×3回):

  • $0.25 × 3 = $0.75

参考:10秒動画を3本繋げた場合(30秒):

  • $0.50 × 3 = $1.50

💡 他のAI動画生成モデルとのコスパ比較

Runway Gen-4 Turbo vs Google Gemini Veo シリーズ

モデル 価格(10秒動画) 1秒あたり コスト比較
Runway Gen-4 Turbo $0.50 $0.05/秒 基準
Google Veo 3 Fast $1.50 $0.15/秒 Runwayの3倍
Google Veo 3 $4.00 $0.40/秒 Runwayの8倍
Google Veo 2 $3.50 $0.35/秒 Runwayの7倍

Runway Gen-4 Turboの圧倒的な優位性:

  • 🎯 コストパフォーマンスが圧倒的(Veo 3 Fastの1/3、Veo 3の1/8の価格!)
  • ✅ APIがシンプルで実装しやすい
  • ✅ 生成速度が速い
  • ✅ 品質も十分高い(今回の実験で証明)
  • ✅ 短時間動画なら最もコスト効率が良い

コスト計算例(30秒動画の場合):

  • Runway Gen-4 Turbo(10秒×3): $1.50
  • Veo 3 Fast(30秒): $4.50(3倍)
  • Veo 3(30秒): $12.00(8倍)

結論: AI動画生成でコストを重視するなら、Runway Gen-4 Turboが圧倒的に最適な選択肢です!

⚠️ 注意: 価格は2025年9月時点の情報です。最新の価格は各サービスの公式サイトをご確認ください。

実用性の評価

✅ この手法が有効なケース

  1. ストーリー性のある動画を作りたい

    • 各生成でプロンプトを変えて展開を変えられる
    • 例: キャラクター登場 → 何かが起こる → クライマックス
  2. 長めのループ動画を作りたい

    • 15秒〜30秒のループ動画
  3. プロトタイプ作成

    • アニメーションの試作
    • MVのイメージボード

⚠️ 注意すべき点

  1. コストは回数分かかる

    • 単純に動画を繋げたいだけなら、動画編集ソフトで結合する方が経済的
  2. 手動操作が必要

    • 自動化も可能だが、実装が必要
  3. より多くの回数での検証は今後の課題

    • 10回、20回と増やした場合の品質は未検証
    • どこかで劣化が始まる可能性はある

より良い代替手段との比較

動画編集ソフトで結合する場合

メリット:

  • コストがかからない
  • 高速
  • 品質劣化なし

デメリット:

  • 既存の動画を繋げるだけ
  • 途中で展開を変えられない

今回の連鎖生成手法

メリット:

  • 途中でストーリーを変えられる(プロンプト変更)
  • AIが自然な繋がりを生成
  • 創造的な表現が可能

デメリット:

  • コストがかかる
  • 生成時間がかかる

利用規約について

Runway APIの利用規約の確認

この手法は以下の点で適切です:

  • ✅ 各API呼び出しに正当に料金を支払っている
  • ✅ APIを正規の方法で使用
  • ✅ 「制限回避」ではなく「APIの組み合わせ活用」
  • ✅ 生成されたコンテンツの商用利用も可能

⚠️ 重要:必須のクレジット表記

Runway APIを使用したアプリには必ず以下の表記が必要です:

  • 「Powered by Runway」の表記
  • runwayml.comへのリンク(クリック可能)
  • ✅ エンドユーザーへの利用規約の適用

今回のデモアプリには、この要件に従ってクレジット表記を実装しています。

公式ドキュメント: Runway API利用規約

今後の展望・検証したいこと

  1. より多くの回数での連鎖

    • 10回、20回でも品質は保たれるか?
    • 劣化が始まる閾値はどこか?
  2. 異なる解像度での検証

    • 高解像度の方が劣化しにくい?
    • 低解像度では劣化が目立つ?
  3. 動きの激しいシーンでの検証

    • アクションシーンでも品質は保たれるか?
  4. 自動化スクリプトの作成

    • 複数回の生成を自動化
    • 自動結合機能

まとめ

実験結果のまとめ

  • 🎉 Gen-4 Turboで3回の連鎖生成を行っても品質劣化なし
  • 🎉 予想を完全に覆す結果
  • 🎉 実用的な手法として十分使える
  • ⚠️ コスト面での検討は必要

この手法の意義

  1. 技術的な発見

    • AI生成動画の品質の高さを実証
    • 「劣化する」という先入観を覆した
  2. 創造的な可能性

    • 長尺動画の新しい作り方
    • ストーリーテリングの新しい手法
  3. APIの賢い使い方

    • 制限内で創造的に活用
    • コストパフォーマンスを考えた運用

最後に

この実験を通じて、AIによる動画生成技術の成熟度の高さを実感しました。

「10秒制限」という制約も、工夫次第で乗り越えられることが分かりました。

皆さんもぜひ試してみてください!

参考リンク

GitHubリポジトリ

完全なコードはこちら:

https://github.com/nobu-suzuki345/runway-video-chaining-demo


👤 著者について

SNAMO - フルスタックエンジニア / AI統合開発専門家

Google AI・ChatGPT・Claude統合システムの設計・開発を専門としています。企業のDX推進やAI技術導入のコンサルティングも行っています。

🌐 ポートフォリオサイト

https://snamo.jp/

最新のプロジェクト実績や技術記事を公開しています。

💬 ご質問・ご相談について

この記事や関連技術について、ご質問やご相談がございましたら、お気軽にお問い合わせください。

  • 無料相談受付中: 企業向けAI導入・技術コンサルティング
  • 専門分野:
    • Runway API等のAI動画生成技術
    • Google AI・ChatGPT・Claude統合開発
    • Next.js/React フルスタック開発
    • レリバンスエンジニアリング

お気軽にご連絡ください!


質問やコメントもお待ちしています 💬

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?