HiAPI
ブログ

チュートリアル

Seedance 2.5 画像から動画生成 API:最初のフレーム、最初と最後のフレーム、参照画像の渡し方

1枚の画像を動かす、または最初と最後の2フレームを渡してモデルに過程を補完させる。curl、Python、料金表はすべてここに。

Oct 15, 2026
Seedance 2.5 画像から動画生成 API:最初のフレーム、最初と最後のフレーム、参照画像の渡し方

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枚アップロードして試す ことができます。

永続的なAIアーティファクトで開発を始める

APIキーを取得して、タスクベースの1つのAPIで画像・動画・音声モデルを呼び出せます。

APIドキュメントを読む