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?

Kling 3.0入門 — 4K動画生成・6カットストーリーボードをAPIで実装する

0
Last updated at Posted at 2026-03-09

Kling 3.0 — 4K AI動画生成プラットフォーム

はじめに

Kuaishou(快手)が2026年2月5日にリリースした Kling 3.0 は、AI動画生成の実用性を大きく引き上げたアップデートです。4Kネイティブ解像度、1生成で最大6カットのストーリーボード機能、5言語対応の音声統合が一度に使えるようになりました。

公式APIも整備されており、Python から直接呼び出してワークフローに組み込めます。本記事では Kling 3.0 の主要機能と、公式 API を使った実装方法を解説します。

この記事で学べること

  • Kling 3.0 の新機能と技術的特徴
  • 公式 Kling API のセットアップ手順
  • Text-to-Video / Image-to-Video の Python 実装
  • マルチショットストーリーボードの活用法
  • 料金体系と他サービスとの比較

対象読者

  • AI動画生成ツールに興味があるエンジニア
  • Sora・Runway・Seedance などの代替手段を探している方
  • 動画生成を自社プロダクトやワークフローに組み込みたい方

前提条件


TL;DR

  • Kling 3.0 は 4Kネイティブ解像度・15秒・5言語音声統合を実現した最新 AI 動画生成モデル
  • 6カットのマルチショットストーリーボードで短編動画を1回の生成でまとめて作れる
  • Video 3.0 Omni でキャラクターの外見・音声を別シーンへ継承可能
  • 公式 API は https://api.klingai.com で提供。料金は Standard $0.084/秒
  • Python SDK が提供されており、pip install kling-sdk で導入可能

Kling 3.0 の概要

Kling 3.0 モデル構成図

Kling はKuaishouが開発するAI動画・画像生成プラットフォームです。2024年5月のv1.0以降、急速にアップデートを続けており、2026年2月の Kling 3.0 では以下の4モデル体系が導入されました。

モデル 用途 解像度
Video 3.0 テキスト・画像からの動画生成(標準) 最大4K
Video 3.0 Omni キャラクター継承・複数人物対応 最大4K
Image 3.0 テキスト・画像からの静止画生成 最大2K
Image 3.0 Omni 高解像度・高品質な静止画生成 最大4K UHD

バージョン体系も整理されており、Kling O1(2025年12月、統合マルチモーダルモデル)およびKling 2.6(2025年12月、音声・映像の同時生成)が先行して登場しています。

3.0 で新しくなった主なポイント

公式IR(Kuaishou Investor Relations)から確認できる変更点は以下のとおりです。

  1. 4Kネイティブ動画: 最大3840×2160の解像度で出力可能(従来は1080p上限)
  2. マルチショットストーリーボード: 1リクエストで最大6カットを生成し、各ショットのカメラサイズ・アングル・カメラムーブメントを個別指定可能
  3. Video 3.0 Omni: 参照動画をアップロードすることで、キャラクターの外見・音声特性を新しいシーンへ継承。複数キャラクターの独立制御に対応
  4. 5言語ネイティブ音声: 英語・中国語・日本語・韓国語・スペイン語の音声生成に対応
  5. テキスト保持: 動画内の看板・キャプション・ブランドロゴを高精度で維持

API セットアップ

アカウントと APIキーの発行

  1. klingai.com/global/dev の開発者ポータルにアクセス
  2. アカウントを作成してログイン
  3. 「API Keys」セクションから新規キーを発行
  4. APIキーと Secret をコピーして安全に保管

認証方式

Kling API は JWT(JSON Web Token)をベースにした認証を採用しています。APIキー(ak)と Secret(sk)から署名付きトークンを生成してリクエストヘッダーに含めます。

import jwt
import time

def generate_kling_token(api_key: str, api_secret: str) -> str:
    """Kling API用のJWTトークンを生成する"""
    payload = {
        "iss": api_key,
        "exp": int(time.time()) + 1800,  # 30分有効
        "nbf": int(time.time()) - 5,
    }
    return jwt.encode(payload, api_secret, algorithm="HS256")

PyJWTkling-api が必要です。pip install PyJWT kling-api でインストールしてください。

環境変数の設定

export KLING_API_KEY="your_api_key_here"
export KLING_API_SECRET="your_api_secret_here"

Text-to-Video の実装

Kling API Text-to-Video 生成フロー

Kling の動画生成はタスクキュー方式で動作します。リクエスト後にタスクIDを受け取り、完了をポーリングする設計です。

import os
import time
import requests
import jwt

KLING_BASE_URL = "https://api.klingai.com"

def generate_token() -> str:
    api_key = os.environ["KLING_API_KEY"]
    api_secret = os.environ["KLING_API_SECRET"]
    payload = {
        "iss": api_key,
        "exp": int(time.time()) + 1800,
        "nbf": int(time.time()) - 5,
    }
    return jwt.encode(payload, api_secret, algorithm="HS256")


def create_text_to_video(
    prompt: str,
    model: str = "kling-v3",
    duration: int = 5,
    aspect_ratio: str = "16:9",
) -> str:
    """Text-to-Videoタスクを作成してタスクIDを返す"""
    token = generate_token()
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
    }
    payload = {
        "model_name": model,
        "prompt": prompt,
        "duration": duration,        # 秒 (5 or 10)
        "aspect_ratio": aspect_ratio,  # "16:9", "9:16", "1:1"
    }
    response = requests.post(
        f"{KLING_BASE_URL}/v1/videos/text2video",
        headers=headers,
        json=payload,
    )
    response.raise_for_status()
    data = response.json()
    return data["data"]["task_id"]


def wait_for_completion(task_id: str, timeout: int = 300) -> dict:
    """タスクの完了を待機して結果を返す"""
    token = generate_token()
    headers = {"Authorization": f"Bearer {token}"}
    start_time = time.time()

    while time.time() - start_time < timeout:
        response = requests.get(
            f"{KLING_BASE_URL}/v1/videos/text2video/{task_id}",
            headers=headers,
        )
        response.raise_for_status()
        data = response.json()
        status = data["data"]["task_status"]

        if status == "succeed":
            return data["data"]["task_result"]["videos"][0]
        elif status == "failed":
            raise RuntimeError(f"タスク失敗: {data['data'].get('task_status_msg')}")

        print(f"生成中... ステータス: {status}")
        time.sleep(10)

    raise TimeoutError("タイムアウト: 動画生成が完了しませんでした")


# 使用例
if __name__ == "__main__":
    task_id = create_text_to_video(
        prompt="A futuristic cityscape at sunset, flying cars, neon lights reflecting on wet streets",
        model="kling-v3",
        duration=5,
    )
    print(f"タスクID: {task_id}")

    video_info = wait_for_completion(task_id)
    print(f"生成完了: {video_info['url']}")

Image-to-Video の実装

静止画を起点に動画を生成する Image-to-Video も同様の構造で実装できます。画像は URL または Base64 で渡します。

import base64
from pathlib import Path
from typing import Optional


def image_to_base64(image_path: str) -> str:
    """画像ファイルをBase64エンコードする"""
    return base64.b64encode(Path(image_path).read_bytes()).decode("utf-8")


def create_image_to_video(
    image_url: Optional[str] = None,
    image_path: Optional[str] = None,
    prompt: str = "",
    model: str = "kling-v3",
    duration: int = 5,
) -> str:
    """Image-to-Videoタスクを作成してタスクIDを返す"""
    token = generate_token()
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
    }

    # 画像はURLまたはBase64で指定
    if image_url:
        image_data = {"type": "url", "url": image_url}
    elif image_path:
        image_data = {
            "type": "base64",
            "base64": image_to_base64(image_path),
        }
    else:
        raise ValueError("image_url または image_path を指定してください")

    payload = {
        "model_name": model,
        "image": image_data,
        "prompt": prompt,
        "duration": duration,
    }
    response = requests.post(
        f"{KLING_BASE_URL}/v1/videos/image2video",
        headers=headers,
        json=payload,
    )
    response.raise_for_status()
    return response.json()["data"]["task_id"]

マルチショットストーリーボード

Kling 3.0 の目玉機能のひとつが、1リクエストで最大6カットを生成できるマルチショットストーリーボードです。各カットにカメラサイズ(ロング・ミディアム・クローズアップなど)やカメラムーブメント(パン・ズーム・トラッキングなど)を指定できます。

def create_multi_shot_video(shots: list[dict]) -> str:
    """
    マルチショットストーリーボードを生成する

    shots: [
        {
            "prompt": "カットの説明",
            "camera_type": "close_up",      # long / medium / close_up
            "camera_movement": "zoom_in",   # static / pan_left / pan_right / zoom_in / zoom_out
        },
        ...
    ]
    最大6カットまで指定可能
    """
    if len(shots) > 6:
        raise ValueError("ショット数は最大6カットです")

    token = generate_token()
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
    }
    payload = {
        "model_name": "kling-v3",
        "mode": "storyboard",
        "shots": shots,
    }
    response = requests.post(
        f"{KLING_BASE_URL}/v1/videos/text2video",
        headers=headers,
        json=payload,
    )
    response.raise_for_status()
    return response.json()["data"]["task_id"]


# 使用例: 3カットの短編動画
task_id = create_multi_shot_video([
    {
        "prompt": "A chef prepares ingredients in a bright modern kitchen",
        "camera_type": "medium",
        "camera_movement": "static",
    },
    {
        "prompt": "Close-up of colorful vegetables being chopped on a wooden board",
        "camera_type": "close_up",
        "camera_movement": "zoom_in",
    },
    {
        "prompt": "The finished dish plated beautifully on a white plate",
        "camera_type": "close_up",
        "camera_movement": "pan_right",
    },
])

Video 3.0 Omni: キャラクター継承

Video 3.0 Omni は参照動画からキャラクターの外見・声質・表情パターンを抽出し、新しいシーンに適用する機能です。複数のキャラクターを独立して追跡・制御できます。

def create_omni_video(
    reference_video_url: str,
    prompt: str,
    duration: int = 5,
) -> str:
    """Video 3.0 Omni でキャラクター継承動画を生成する"""
    token = generate_token()
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json",
    }
    payload = {
        "model_name": "kling-v3-omni",
        "prompt": prompt,
        "reference_video": {"url": reference_video_url},
        "duration": duration,
    }
    response = requests.post(
        f"{KLING_BASE_URL}/v1/videos/text2video",
        headers=headers,
        json=payload,
    )
    response.raise_for_status()
    return response.json()["data"]["task_id"]

料金体系

公式料金表(klingai.com/global/dev/pricing)で確認できる主な料金は以下のとおりです。

AI動画生成サービス料金比較

モデル プラン 料金
kling-v3 Standard $0.084/秒
kling-v3 Pro $0.112/秒
kling-v3-omni Standard $0.084/秒
kling-v3-omni Pro $0.112/秒
kling-video-o1 Standard $0.084/秒
kling-video-o1 Pro $0.112/秒
kling-v2-6 Standard(5秒) $0.21
kling-v2-6 Pro(10秒) $1.68
kling-image-o1 - $0.028

Pro プランでビデオ入力(Image-to-Video 等)を使用する場合は $0.168/秒 が適用されます。最新の料金は公式料金ページで確認してください。

試算例: kling-v3 Standard で5秒動画を生成した場合、$0.084 × 5 = $0.42(約63円)。


他サービスとの比較

主要 AI 動画生成サービスとの比較をまとめました(各社公開情報をもとに整理)。

観点 Kling 3.0 Sora 2 Runway Gen-4 Veo 3.1 Seedance 2.0
最大解像度 4K 1080p 1080p 4K 非公開
動画長 15秒 非公開 16秒 非公開 非公開
音声生成 5言語対応 非対応 非対応 対応 対応
マルチショット 最大6カット 非対応 非対応 非対応 非対応
API提供 あり あり あり 限定的 非公開
強み コスト・量産・音声統合 物理シミュレーション 創作的編集 シネマ品質 マルチモーダル

Kling 3.0 は最高品質の映像リアリティでは Veo 3.1 や Sora 2 に劣る場面もありますが、コストパフォーマンス・大量生成・音声統合・APIへの組み込みやすさで優位性があります。


注意点

4K生成時の処理時間
4K解像度はファイルサイズが大きいため、処理時間が長くなります。プロダクション用途では非同期処理とウェブフックの活用を検討してください。

マルチショットの制約
各カットの長さはシステムが自動決定します(ユーザー側からは指定不可)。カット間のシーン一貫性は高いものの、キャラクターの外見が変わる場合は Video 3.0 Omni の使用が有効です。

音声生成の言語設定
プロンプト内の言語が自動判定されますが、明示的に audio_language パラメータで指定することが推奨されています。日本語は ja-JP を指定します。

APIキーの管理
APIキーと Secret は環境変数または Secret Manager で管理し、コードにハードコードしないでください。


まとめ

  • Kling 3.0 は4Kネイティブ解像度・15秒・5言語音声統合を実現した AI 動画生成モデル
  • マルチショットストーリーボードで1リクエストから最大6カットの短編動画を生成可能
  • Video 3.0 Omni でキャラクター継承・複数人物制御に対応
  • 公式 API (https://api.klingai.com) が整備されており、Python で容易に統合可能
  • 料金は Standard $0.084/秒で、コストパフォーマンスを重視する用途に適している

マルチショット機能と音声統合は Kling の差別化ポイントです。動画生成を量産したい場面や、音声付き動画を自動化したいワークフローで積極的に活用できます。

参考リンク

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?