使用ガイド
Kling 3.0 テキスト to ビデオ:ネイティブ音声付きのショート動画クリップ
ほとんどの「テキスト to ビデオ」デモは、無音のクリップで終わってしまいます。hiapi 上の kling-3.0/text-to-video はそうではありません——生成プロセスの中でネイティブでリップシンクされた音声を直接レンダリングし、さらに最大 4K をサポートする唯一の Kling 3.0 ティアです。ショート動画コンテンツ(Reels、TikTok、Shorts)にとって、この組み合わせ——縦向き構図、リアルな環境音、別途 TTS/ナレーション工程が不要——はポストプロダクションの工程を丸ごと省いてくれます。
本記事では実際のワークフローを順にたどります。まず /v1/tasks API で単一クリップを生成し、次に非同期コードでバッチクリップに拡張し、最後に予算を立てる際に基準となる価格ティアを確認します。
kling-3.0/text-to-video は turbo ティアより何が増えるのか
hiapi は 2 つの Kling 3.0 ビデオシリーズを並行して提供しています:kling-3.0-turbo/text-to-video と、本記事で紹介する素の kling-3.0/text-to-video です。turbo ティアはより高速で、上限は 1080p、そして常に音声が付属し、オン/オフを切り替えるスイッチはありません。素のティアは速度の一部と引き換えに次を得ます:
- ネイティブ同期音声——リクエスト上の
soundブール値です。trueの場合、hiapi.ai は映像の動きに合わせた音声や環境音をレンダリングし、後付けのBGMを貼り付けるわけではありません。 - 4K 上限——
resolutionは720p、1080p、4Kを受け付け、turbo は 1080p が上限です。 - 同じ長さの範囲——どちらも
3〜15秒で、これはショート動画プラットフォームが評価する長さの範囲そのものです。
無音の背景ループが必要なら、このティアを使い sound をオフにしてください:720p で $0.10/秒で、Turbo の $0.13/秒より安価です。クリップが誰かがカメラに向かって話しているように聞こえる必要がある場合——ほとんどのショート動画コンテンツがそうですが——このティアなら 1 回のリクエストでそれが実現します。
単一クリップを生成する
このモデルは hiapi の非同期 /v1/tasks エンドポイントにあります。タスクを送信し、完了状態をポーリングし、出力 URL を取得します(URL は期限切れになるため、すぐにダウンロードしてください)。
import os
import time
import requests
API_BASE = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
def create_clip(prompt: str, duration: int, resolution: str, aspect_ratio: str, sound: bool) -> str:
body = {
"model": "kling-3.0/text-to-video",
"input": {
"prompt": prompt,
"duration": duration,
"resolution": resolution,
"aspect_ratio": aspect_ratio,
"sound": sound,
},
}
resp = requests.post(API_BASE, headers=HEADERS, json=body, timeout=30)
resp.raise_for_status()
return resp.json()["data"]["taskId"]
def wait_for_clip(task_id: str, poll_every: int = 5, timeout: int = 600) -> str:
deadline = time.time() + timeout
while time.time() < deadline:
resp = requests.get(f"{API_BASE}/{task_id}", headers=HEADERS, timeout=30)
resp.raise_for_status()
data = resp.json()["data"]
if data["status"] == "success":
return data["output"][0]["url"]
if data["status"] == "fail":
raise RuntimeError(data.get("error"))
time.sleep(poll_every)
raise TimeoutError(f"task {task_id} did not finish in {timeout}s")
task_id = create_clip(
prompt="縦向き 9:16 のショート動画クリップ:クリエイターがスマートフォンで簡単な"
"商品レビュー風の撮影を行っている、エネルギッシュな手の動き、"
"自然な室内照明、カメラに向かって気軽に話す構図、リアルな"
"動きと唇の動き、動作に同期した環境ルームトーンと発話音声",
duration=6,
resolution="720p",
aspect_ratio="9:16",
sound=True,
)
video_url = wait_for_clip(task_id)
これが下のクリップの背後にある正確なプロンプトと設定です——縦向き、6 秒、720p、音声オン($0.86)。
プロンプト:「縦向き 9:16 のショート動画クリップ:クリエイターがスマートフォンで簡単な商品レビュー風の撮影を行っている、エネルギッシュな手の動き、自然な室内照明、カメラに向かって気軽に話す構図、リアルな動きと唇の動き、動作に同期した環境ルームトーンと発話音声」
バッチに拡張する:逐次ループではなく非同期コードを使う
単一クリップなら 1 回のリクエストです。1 週間分のショート動画コンテンツなら 10 本か 20 本です。for ループで各タスクを 1 つずつポーリングするのは動きますが、本来なら並行できる待ち時間を直列化してしまいます——API は並行送信を喜んで受け付けます。asyncio と aiohttp に切り替えて一気に送り出しましょう:
import asyncio
import os
import aiohttp
API_BASE = "https://api.hiapi.ai/v1/tasks"
TOKEN = os.environ["HIAPI_API_KEY"]
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
async def create_task(session, prompt, duration=6, resolution="1080p",
aspect_ratio="9:16", sound=True):
body = {
"model": "kling-3.0/text-to-video",
"input": {"prompt": prompt, "duration": duration, "resolution": resolution,
"aspect_ratio": aspect_ratio, "sound": sound},
}
async with session.post(API_BASE, json=body) as resp:
resp.raise_for_status()
data = await resp.json()
return data["data"]["taskId"]
async def poll_task(session, task_id, poll_every=5, timeout=600):
loop = asyncio.get_event_loop()
deadline = loop.time() + timeout
while loop.time() < deadline:
async with session.get(f"{API_BASE}/{task_id}") as resp:
resp.raise_for_status()
data = (await resp.json())["data"]
if data["status"] == "success":
return data["output"][0]["url"]
if data["status"] == "fail":
raise RuntimeError(data.get("error"))
await asyncio.sleep(poll_every)
raise TimeoutError(f"task {task_id} timed out")
async def produce_batch(prompts: list[str]) -> list[str]:
async with aiohttp.ClientSession(headers=HEADERS) as session:
task_ids = await asyncio.gather(*(create_task(session, p) for p in prompts))
return await asyncio.gather(*(poll_task(session, tid) for tid in task_ids))
prompts = [
"縦向き 9:16 のクリップ:クリエイターがカメラの前で荷物を開封、興奮した反応、"
"柔らかな窓からの光、唇の動きに同期した発話",
"縦向き 9:16 のクリップ:クリエイターが街路を歩きながらカメラに向かって話す、"
"Bロール風の構図、街の環境音",
"縦向き 9:16 のクリップ:クリエイターがスキンケアのルーティンをクローズアップで実演、落ち着いた"
"ナレーション音声、自然な浴室の照明",
]
urls = asyncio.run(produce_batch(prompts))
各タスクはサーバー側で独立して動作するため、3 つのクリップの実時間は 1 つのクリップの 3 倍ではなく、ほぼ 1 つ分で済みます。さらに大きなバッチでは、asyncio.Semaphore で並行数を制限し、自身のレート制限を溢れさせないようにしてください。
料金はいくらか
kling-3.0/text-to-video の価格は単一の固定レートではなく、解像度と sound スイッチによってティア分けされています——turbo ティアの固定の秒単価を流用しないでください。この 2 つのルートは別々に価格設定されています:
720p、音声なし:$0.10/秒720p+sound:true:$0.143/秒1080p、音声なし:$0.129/秒1080p+sound:true:$0.193/秒4K:$0.479/秒
音声付き 1080p の 6 秒クリップはおよそ $1.16、上述の音声付き 720p クリップは $0.86 です。同じ設定で 10 クリップのバッチはおよそ $11.60——大規模な実行をキューに入れる前に、ご自身の 価格ダッシュボード と照らし合わせて確認する価値があります。各フィールド(解像度、長さ、音声)がそれぞれ独立して合計価格に影響するからです。他の Kling ティアと比較する場合は、Kling 3.0 価格ページ の完全な内訳をご覧ください。
ショート動画制作の注意点
「音声をオンにする」以外にも、リテンション率に実際に影響する点がいくつかあります:
durationは 6〜10 秒に保つ。 モデルは最長 15 秒をサポートしますが、ほとんどのショート動画のフックは最初の数秒で視聴者を引きつけるか失うかが決まります——よりコンパクトなクリップは、よりコンパクトなプロンプトを書くことを強制します。- 音声はプロンプトに書き込むこと、当然視しないこと。 プロンプト本文中の「動作に同期した発話音声」や「街の環境ノイズ」といった記述が、
sound:trueが実際に何をレンダリングするかを導きます——音声の手がかりがないプロンプトは、不自然に静かなクリップを返す可能性があります。 aspect_ratio: "9:16"をエンドツーエンドで使う。 16:9 で生成してからクロップしないでください。縦向きを直接指定すると、モデルは縦向き構図向けに異なるカメラワーク(手の位置、頭上の余白、背景の奥行き)を組み立てます。- 同じフックのバリエーションをバッチ生成する、無関係なクリップを並べるのではなく。非同期生成により、1 つのフックコンセプトに対して 3〜4 通りの言い回しのバリエーションを試して最良版を選ぶのが安価になります。アイデアごとに 1 つのプロンプトを送るだけではなく。
よくある質問
kling-3.0/text-to-video は 9:16 をネイティブにサポートしますか、それとも 16:9 のレンダリング結果をクロップする必要がありますか?
ネイティブにサポートします——aspect_ratio はリクエストで直接 9:16 を受け付け、モデルは最初から縦向き構図で撮影します。
音声は実際のセリフ/環境音ですか、それとも汎用の背景音楽トラックですか? シーンに応じて生成されます。プロンプトが誰かが話していることを記述していれば、音声は唇の動きに同期します。環境音(部屋、街など)はプロンプトで記述されたシーンに従います。ストック音楽のベッドではありません。
ショート動画用途では、これは kling-3.0-turbo とどう違いますか?
Turbo はより高速で、上限は 1080p です。sound フィールドはありませんが、クリップには常に音声が付属します。高速な B ロールが必要で、その内蔵音声で十分な場合は turbo を使ってください。無音の出力が必要な場合、あるいはクリップが特定の内容(特にカメラに向かって話す内容)のように聞こえる必要がある場合は、このティアを使ってください。
1 週間分のクリップを 1 つずつ順番に待たずに生成できますか? できます——すべての作成タスクリクエストを並行送信し(上記の非同期バッチの例を参照)、それらも並行してポーリングします。API は一度に 1 つずつしか送信できないわけではありません。
出力 URL をすぐにダウンロードしないとどうなりますか?
出力 URL には時間制限(expireAt)があります。タスクが success を報告したら、すぐにバイトをダウンロードして自身で保存してください——ホットリンク URL を永続的な場所に置かないでください。
完全なフィールドリファレンスとリアルタイム価格は kling-3.0/text-to-video モデルページ をご覧ください。