チュートリアル
Seedance 2.5 画像から動画生成 API:最初のフレーム、最初と最後のフレーム、参照画像の渡し方
1枚の画像を動かす、または最初と最後の2フレームを渡してモデルに過程を補完させる。curl、Python、料金表はすべてここに。
TL;DR
seedance-2.5/image-to-videoは1枚の画像を動かすことができ、最初のフレームと最後のフレームを同時に渡してモデルに中間の過程を補完させることもできます。1本4〜30秒で、音声も自動生成されます。モデルページを開く とオンラインで生成でき、新規ユーザー登録で200クレジットが付与されます。- テキストから動画生成と同じ価格:720p は毎秒 $0.204、1080p は毎秒 $0.516。4秒の 720p は $0.816。
- 2つの使い方は二者択一:最初のフレーム / 最初と最後のフレーム、または参照画像 + 参照音声で、混在はできません。
まず実際の効果を見てみましょう:最初と最後のフレーム
「空の植木鉢」を最初のフレーム、「バジルでいっぱいの植木鉢」を最後のフレームとして渡し、プロンプトには中間の変化だけを書きます:


Time-lapse growth of a basil seedling sprouting and unfurling leaves inside the terracotta pot, smooth continuous motion, soft morning light staying consistent, camera locked off, no cuts
このプロンプトで生成 →(最初のフレームと最後のフレームをアップロード、4秒、720p)
seedance-2.5/image-to-video、最初のフレーム + 最後のフレーム、720p、4秒、音声あり、$0.816。
最初と最後の2枚の画像で構図、光線、小道具の位置を一致させ、動画で表現したいもの(ここでは植物)だけを変えると、中間の遷移が滑らかになります。プロンプトに "soft morning light staying consistent" と入れたのは、モデルが光線までタイムラプスにしてしまわないようにするためです。
curl:最初のフレームのみ使用
最も一般的な使い方:製品画像やイラスト1枚に「次にどう動くか」を一言添える:
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5/image-to-video",
"input": {
"prompt": "湯気の立つコーヒーカップにカメラがゆっくり寄っていく、湯気が朝の光の中で渦を巻いて立ち上る、軽い手持ちの揺れ",
"first_frame_url": "https://your-cdn.example.com/coffee-cup.jpg",
"duration": 5,
"resolution": "720p"
}
}'
taskId が返ります:
{"code": 200, "data": {"taskId": "tk-hiapi-..."}, "message": "success"}
結果を確認:
curl https://api.hiapi.ai/v1/tasks/tk-hiapi-... \
-H "Authorization: Bearer $HIAPI_KEY"
status が success になったら、output[0].url から動画をダウンロードします。
最初と最後のフレーム:さらに last_frame_url を追加
{
"model": "seedance-2.5/image-to-video",
"input": {
"prompt": "同じ机の昼から夜へのタイムラプス:日光がだんだん暗くなり、デスクランプが暖かい光で点灯し、窓の外の街明かりが一つずつ灯っていく、カメラは固定",
"first_frame_url": "https://your-cdn.example.com/desk-day.jpg",
"last_frame_url": "https://your-cdn.example.com/desk-night.jpg",
"duration": 4,
"resolution": "720p"
}
}
last_frame_urlはfirst_frame_urlと一緒に使います。- 最後のフレームと最初のフレームのアスペクト比が異なる場合、最後のフレームは中央でクロップされるため、両方とも同じ比率で画像を生成するのがおすすめです。
- 画面の縦横比は最初のフレームに従い、
aspect_ratioはadaptiveの1つの値のみなので、渡す必要はありません。
Python:送信、ポーリング、ダウンロード
# pip install requests;先に export HIAPI_KEY=あなたのKey
import os, time, uuid, requests
KEY = os.environ["HIAPI_KEY"]
H = {"Authorization": f"Bearer {KEY}"}
def generate(prompt, model="seedance-2.5/image-to-video", timeout_s=900, **params):
body = {"model": model, "input": {"prompt": prompt, **params}}
# 同じタスクを再送信するときは同じ Idempotency-Key を付け、二重課金を避ける
headers = {**H, "Idempotency-Key": str(uuid.uuid4())}
r = requests.post("https://api.hiapi.ai/v1/tasks", json=body, headers=headers, timeout=30)
r.raise_for_status()
res = r.json()
if res.get("code") != 200:
raise RuntimeError(res)
task_id = res["data"]["taskId"]
deadline = time.time() + timeout_s
while time.time() < deadline:
d = requests.get(f"https://api.hiapi.ai/v1/tasks/{task_id}", headers=H, timeout=30).json()["data"]
if d["status"] == "success":
return d["output"][0]["url"]
if d["status"] == "fail":
raise RuntimeError(d)
time.sleep(10)
raise TimeoutError(task_id)
url = generate(
"Time-lapse growth of a basil seedling sprouting and unfurling leaves, camera locked off, no cuts",
first_frame_url="https://your-cdn.example.com/seedling-start.jpg",
last_frame_url="https://your-cdn.example.com/seedling-grown.jpg",
duration=4, resolution="720p",
)
with open("clip.mp4", "wb") as f:
f.write(requests.get(url).content)
もう一つの使い方:参照画像 + 参照音声
ある画像を最初のフレームとして固定したくない、人物の外見や製品の外観、画風をモデルに「参照」させたい場合は、reference_image_urls(最大30枚)に切り替え、さらに reference_audio_urls(最大10本)で音声スタイルを参照できます:
{
"model": "seedance-2.5/image-to-video",
"input": {
"prompt": "参照画像の女の子が同じ青いバックパックを背負って、雨の街角を歩いていく、カメラは追従",
"reference_image_urls": [
"https://your-cdn.example.com/girl.jpg",
"https://your-cdn.example.com/backpack.jpg"
],
"duration": 5,
"resolution": "720p"
}
}
注意:参照画像、参照音声は同時に first_frame_url / last_frame_url と一緒には渡せません。二者択一です。
パラメータ一覧
| パラメータ | 値 | 説明 |
|---|---|---|
prompt |
文字列、必須 | 動作、カメラ、音声を書き、画像全体を再描写する必要はない |
first_frame_url |
画像 URL | 最初のフレーム |
last_frame_url |
画像 URL | 最後のフレーム、最初のフレームと組み合わせて使用 |
reference_image_urls |
最大30枚 | 最初と最後のフレームと同時には使用不可 |
reference_audio_urls |
最大10本 | 最初と最後のフレームと同時には使用不可 |
duration |
4〜30の整数、デフォルト 5 | 単位は秒 |
resolution |
720p / 1080p、デフォルト 720p |
|
generate_audio |
デフォルト true |
音声と映像を一緒に生成 |
output_format |
mp4 / mov |
費用を計算してみましょう
| 長さ | 720p($0.204/秒) | 1080p($0.516/秒) |
|---|---|---|
| 4秒 | $0.816 | $2.064 |
| 5秒 | $1.02 | $2.58 |
| 10秒 | $2.04 | $5.16 |
| 15秒 | $3.06 | $7.74 |
最初と最後のフレームと最初のフレームのみは同価格で、費用は解像度と秒数だけで決まります。より詳しい計算は Seedance 2.5 API 価格 をご覧ください。
公開前の注意点
- 画像アドレスは公開アクセス可能であること:HTTP(S) アドレスまたは data URL のどちらでも可。内部ネットワークのアドレスはモデルから取得できません。
- ポーリングの代わりにコールバックを使用:リクエストのトップレベルに
"callback": {"url": "https://あなたのドメイン/hiapi/callback"}を追加し、taskIdで重複排除します。 - 速やかに転送保存:
output[0].urlは一時リンクなので、取得後すぐに自分のストレージに保存してください。 - リトライには冪等キーを付ける:リクエストヘッダーに
Idempotency-Keyを追加すると、同じキーでのリトライはタスクを1回だけ作成します。 - 失敗時は自動返金:成功した生成動画のみ課金されます。
よくある質問
最初と最後のフレームの間で「ディゾルブ」が起きたら?
2枚の画像の差が大きすぎると、中間の1〜2秒が2枚の画像のディゾルブのように見えやすくなります。2枚の画像の構図と小道具を一致させ、被写体だけを変え、さらにプロンプトに "camera locked off, no cuts" と書いてください。
最後のフレームだけを渡せますか?
いいえ、最後のフレームは最初のフレームと一緒に使う必要があります。
縦向きを指定できますか?
画面の縦横比は最初のフレームに従うため、縦向きにしたい場合は縦向きの最初のフレーム画像をアップロードしてください。
最初のフレームと参照画像の違いは?
最初のフレームはそのまま動画の最初のフレームになります。参照画像はモデルに外観やスタイルを参照させるだけで、画面は再構図できます。
プロンプトだけで画像がない場合は Seedance 2.5 テキストから動画生成 API をご覧ください。最初のフレームの書き方をもっと知りたい場合は Seedance 2.5 ユーザーガイド をご覧いただくか、直接モデルページで画像を1枚アップロードして試す ことができます。
関連記事
すべての記事を見る →-
チュートリアル
HiAPI API で hailuo-2.3-fast/image-to-video を呼び出す方法:curl と Python の実践
高速・低コストな画像から動画へのティアにおける最初の実行可能なリクエスト — モデル ID から MP4 のダウンロードまで
-
チュートリアル
HiAPI APIでhailuo-2.3/text-to-videoを呼び出す方法:curl、Python、実行可能なリクエスト例
-
チュートリアル
HiAPI で Kandinsky 6.0 Pro のテキストto動画を使用する:curl と Python チュートリアル
リクエスト優先の実践デモ:プロンプトから動画クリップへの呼び出しを構築し、リクエストを送信し、完了状態をポーリングし、結果をダウンロードする