テキストから動画 vs 画像から動画:5つのAPIモードを解説
ほとんどの動画モデルは、プロンプト以外の入力も受け付けます。画像から始める、最初と最後のフレームを固定する、キャラクターや商品の参照画像を渡す、既存のクリップから作るといったことができます。このガイドでは、各モードの内容、使いどころ、呼び出し方を説明します。
5つのモードの概要
どのモードも同じエンドポイント POST /v1/generations を使います。変わるのは、プロンプトとともに送信する入力です。
| モード | 送信するもの | 向いている用途 |
|---|---|---|
| テキストから動画 | a prompt | アイデアの検討、Bロール、画像がないシーン |
| 画像から動画 | image_url としての開始フレームとプロンプト | 商品ショット、アートワーク、静止画を、見た目を正確に保ったままアニメーション化 |
| 最初と最後のフレーム | image_url end_image_url、およびプロンプト | トランジション、見せ場の演出、決まった画像で終わらせたいショット |
| 参照画像 | image_urls としての複数の画像とプロンプト | 複数のショットにわたり、キャラクター、商品、場所の一貫性を保つ |
| 動画から動画 | 元のクリップとプロンプト | 手元の映像のスタイル変更や作り直し |
すべてのモデルがすべてのモードに対応しているわけではありません。下の対応表で主要なモデルを確認でき、各モデルのタスクはモデルページに掲載されています。
テキストから動画
テキストから動画は最もシンプルなモードです。ショットを説明すると、顔やセットから色、フレーミングまで、あとはモデルがすべて決めます。この自由度は、アイデアを探るときや、Bロール、状況説明のショット、抽象的な背景など、汎用的な映像が必要なときに役立ちます。
動画に特定のものを映す必要がある場合には向きません。自社の商品、ロゴ、特定の人物、ブランドガイドに合わせるべきレイアウトなどです。これらの細部は生成のたびに新たに作られるため、同じプロンプトから作った2つのクリップは一致しません。
よいテキストのプロンプトには、被写体、アクション、設定、カメラ、光、そしてモデルが音声を生成する場合は音が含まれます。Seedance 2.0ガイドには、プロンプトのコツがさらに載っています。
画像から動画
画像から動画では、あなたの画像が最初のフレームになります。商品、顔、構図、色など、その中のすべてが開始時に固定され、プロンプトでは、その後に起こることだけを説明すれば済みます。商品写真、イラスト、キービジュアルのアニメーション化や、見た目を正確にしたいショットに向いたモードです。
よくあるワークフローは、まずNano Banana ProやGPT Image 2などの画像モデルで静止画を作り、仕上がりを整えてから、アニメーション化する方法です。静止画のほうが、動画より安く、速く試行を重ねられます。
Seedance 2.0の画像から動画のリクエスト例です。音声付き5秒・720pのクリップで、料金は$0.75です。アスペクト比 adaptive は、フレームを画像の形に合わせます。
export REVANA_API_KEY="sr_live_..."
# 1. Submit the job (returns 202 with the generation id)
curl https://api.revana.si/v1/generations \
-H "Authorization: Bearer $REVANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"input": {
"prompt": "The coffee in the cup starts to steam, and a hand reaches in from the right and lifts the cup off the table. Morning light, quiet cafe ambience.",
"image_url": "https://example.com/coffee.jpg",
"resolution": "720p",
"duration": 5,
"aspect_ratio": "adaptive",
"audio": true
},
"max_cost_usd": 2
}'
# 2. Poll with the id from step 1 until status is "succeeded" or "failed"
curl https://api.revana.si/v1/generations/gen_01JBX7Q2M4 \
-H "Authorization: Bearer $REVANA_API_KEY"import os
import time
import requests
API = "https://api.revana.si/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}
resp = requests.post(f"{API}/generations", headers=HEADERS, json={
"model": "seedance-2.0",
"input": {
"prompt": "The coffee in the cup starts to steam, and a hand reaches in from the right and lifts the cup off the table. Morning light, quiet cafe ambience.",
"image_url": "https://example.com/coffee.jpg",
"resolution": "720p",
"duration": 5,
"aspect_ratio": "adaptive",
"audio": True,
},
"max_cost_usd": 2,
})
resp.raise_for_status()
job = resp.json()
while job["status"] in ("queued", "running"):
time.sleep(5)
job = requests.get(f"{API}/generations/{job['id']}", headers=HEADERS).json()
if job["status"] == "succeeded":
print(job["output"]["urls"], job["cost_usd"])
else:
print("Failed:", job["error"])// Node 18 or later. Save as generate.mjs and run: node generate.mjs
const API = "https://api.revana.si/v1";
const headers = {
Authorization: `Bearer ${process.env.REVANA_API_KEY}`,
"Content-Type": "application/json",
};
const res = await fetch(`${API}/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "seedance-2.0",
input: {
prompt: "The coffee in the cup starts to steam, and a hand reaches in from the right and lifts the cup off the table. Morning light, quiet cafe ambience.",
image_url: "https://example.com/coffee.jpg",
resolution: "720p",
duration: 5,
aspect_ratio: "adaptive",
audio: true,
},
max_cost_usd: 2,
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
let job = await res.json();
while (job.status === "queued" || job.status === "running") {
await new Promise((r) => setTimeout(r, 5000));
job = await (await fetch(`${API}/generations/${job.id}`, { headers })).json();
}
if (job.status === "succeeded") console.log(job.output.urls, job.cost_usd);
else console.error("Failed:", job.error);画像ではなく、動きを説明してください。画像はモデルがすでに見ています。「白いコーヒーカップが木のテーブルにある」と言い直すより、「湯気が立ちのぼり、カップが持ち上げられる」のほうがうまくいきます。
最初と最後のフレーム
end_image_url を追加すると、モデルが、選んだ2枚の画像の間の動きを生成します。終わりが固定されるため、このモードは、シーン間のトランジション、ビフォーアフターのショット、商品の見せ場の演出、次のクリップにきれいにつながるクリップに向いています。ループにするには、両端に同じ画像を試してください。
2つのフレームは、1つのショットの妥当な始まりと終わりであるべきです。同じシーン、フレーミング、光にします。違いが大きすぎると、モデルは数秒で大きな変化を作り出さなければならず、結果が予測しにくくなります。この音声なし5秒・1080pのKling 3.0のクリップは$0.60です。
{
"model": "kling-3.0",
"input": {
"prompt": "Time-lapse: the empty plot fills with a small wooden cabin as the camera holds still, clouds racing overhead",
"image_url": "https://example.com/plot-empty.jpg",
"end_image_url": "https://example.com/plot-cabin.jpg",
"resolution": "1080p",
"duration": 5,
"audio": false
},
"max_cost_usd": 1
}Seedance 2.5、Seedance 2.0、Seedance 2.0 Mini、Veo 3.1、Veo 3.1 Fast、Veo 3.1 Lite、Kling 3.0、Kling 3.0 Omni、Wan 3.0、Grok Imagine Video 1.5が、カタログで最初と最後のフレームに対応しています。Hailuo 2.3は開始フレームを受け付けますが、終了フレームは受け付けません。
参照画像
参照画像はフレームではありません。モデルは、それを使って人物、商品、場所の見た目を学習し、プロンプトで説明した新しいショットの中に配置します。このため、参照画像は一貫性のためのモードです。10個のショットにわたって同じキャラクターを、または異なる設定で同じ商品を登場させられます。
画像を image_urls として送信し、プロンプトでは、それぞれを位置で指定します。たとえば「1枚目の画像の女性が、2枚目の画像のバッグを持つ」のように書きます。上限はモデルによって異なり、Seedance 2.5は最大30枚、Wan 3.0は最大10枚、Seedance 2.0は最大9枚、Seedance 2.0 Miniは最大9枚、Veo 3.1 Fastは最大3枚、Veo 3.1 Liteは最大3枚です。Seedanceモデルでは、1回のリクエストでフレームと参照のどちらか一方を送信してください。
この音声付き8秒・720pのVeo 3.1 Fastのリクエストは$0.80です。
{
"model": "veo-3.1-fast",
"input": {
"prompt": "The man from the first image walks into the bakery from the second image, picks up a loaf and smiles at the camera. Bell over the door, quiet chatter.",
"image_urls": [
"https://example.com/man.jpg",
"https://example.com/bakery.jpg"
],
"resolution": "720p",
"duration": 8,
"aspect_ratio": "16:9",
"audio": true
},
"max_cost_usd": 1.5
}動画から動画
動画から動画は、すでに手元にあるクリップから始めます。元のクリップが動きとタイミングを導き、プロンプトでは、新しいスタイル、新しい設定、異なる細部など、何を変えるかを説明します。実写映像のスタイル変更、以前の生成結果の作り直し、パフォーマンスはそのままに見た目を変える場合に向いています。
このガイドのモデルのうち、Seedance 2.5、Kling 3.0 Omni、Wan 3.0が動画から動画に対応しており、Kling 3.0 Motion Controlも元の動画から生成します。元のクリップの入力はモデルによって異なるため、開発に取りかかる前にモデルのページを確認してください。
動画入力のあるジョブは、モデルによって料金の設定が異なります。Seedance 2.5では、課金される秒数が出力に入力クリップを加えたものになり、より低い動画入力ありのレートが適用されます。10秒の元動画から作る10秒・720pのクリップは$3.00で、プロンプトから作る同じクリップは$2.50です。Kling 3.0 Omniは、動画入力のあるジョブに独自のレートを設定しており、720pで1秒あたり$0.13です。
どのモデルがどのモードに対応しているか
2026年10月時点のRevanaのカタログより:
| モデル | テキスト | 画像 | 最初と最後 | 参照 | 動画 |
|---|---|---|---|---|---|
| Seedance 2.5 | yes | yes | yes | yes | yes |
| Seedance 2.0 | yes | yes | yes | yes | no |
| Seedance 2.0 Mini | yes | yes | yes | yes | no |
| Veo 3.1 | yes | yes | yes | no | no |
| Veo 3.1 Fast | yes | yes | yes | yes | no |
| Veo 3.1 Lite | yes | yes | yes | yes | no |
| Kling 3.0 | yes | yes | yes | no | no |
| Kling 3.0 Omni | yes | yes | yes | yes | yes |
| Wan 3.0 | yes | yes | yes | yes | yes |
| Hailuo 2.3 | yes | yes | no | no | no |
| Grok Imagine Video 1.5 | yes | yes | yes | yes | no |
モードによって料金は変わりますか?
ほとんど変わりません。動画モデルは、出力の秒数、解像度、モデルによっては音声に応じて課金されます。5秒・720pのSeedance 2.0のクリップは、プロンプトから始めても画像から始めても$0.75で、終了フレームや参照画像を追加してもカタログの料金は変わりません。例外は、上で説明した動画入力です。
各ジョブの料金は、送信時にプリペイドの残高から確保され、ジョブが成功した場合にのみ課金されます。すべてのレートは料金ページに掲載しています。
モードの選び方
- まだ素材がない:テキストから動画から始めるか、画像モデルで静止画を作ってアニメーション化します。
- 見た目を正確にしたい:承認済みのフレームからの画像から動画。
- 終わり方が重要:最初と最後のフレーム。
- 多くのショットで同じキャラクターや商品:参照画像。
- すでに映像がある:動画から動画。
モデルが対応していないフィールドや値は、課金の前に 422 で拒否されるため、モードを間違えても料金はかかりません。フィールドの完全なリファレンスはドキュメントをご覧ください。
試してみませんか?APIキーを取得して、最初のリクエストを送信しましょう。
よくある質問
テキストから動画と画像から動画の違いは何ですか?
テキストから動画はプロンプトだけから生成するため、ショットのあらゆる要素をモデルが作り出します。画像から動画は、あなたの画像を最初のフレームとして使うため、見た目が固定され、プロンプトでは動きだけを説明します。
画像から動画は、テキストから動画より高いですか?
カタログの料金では、そうではありません。動画モデルは、出力の秒数、解像度、モデルによっては音声に応じて課金されます。5秒・720pのSeedance 2.0のクリップは、2026年10月時点でどちらでも$0.75です。
最初と最後のフレームとは何ですか?
開始画像を image_url として、終了画像を end_image_url として送信すると、モデルがその間の動きを生成します。トランジション、見せ場の演出、ループに便利です。
参照画像は何枚送れますか?
モデルによって異なります。Seedance 2.5は最大30枚、Wan 3.0は最大10枚、Seedance 2.0は最大9枚、Seedance 2.0 Miniは最大9枚、Veo 3.1 Fastは最大3枚、Veo 3.1 Liteは最大3枚です。
開始フレームと参照画像を組み合わせられますか?
Seedanceモデルでは組み合わせられません。1回のリクエストでは、フレームと参照のどちらか一方を送信してください。
動画から動画に対応しているモデルはどれですか?
主要なモデルでは、Seedance 2.5、Kling 3.0 Omni、Wan 3.0が動画から動画に対応しており、Kling 3.0 Motion Controlも同様です。すべてのモデルのタスクは、モデルページに掲載されています。