# Seedanceで画像から動画を作る方法：3モードの選び方と画像の条件

> Seedanceで画像を動画にするときは、目的に合わせて3モードから1つ選びます。API用の画像は各辺300〜6000px・縦横比0.4〜2.5で、比率が違えば中央で切られます。

- URL: https://blog.laozhang.ai/ja/posts/seedance-image-to-video
- Published: 2026-11-03
- Updated: 2026-11-03
- Author: LaoZhang AI Team (https://blog.laozhang.ai/ja/about)
- Topic: AI 動画生成
- Tags: Seedance 2.5, Seedance 2.0, 画像から動画, Dreamina, Seedance API, 参照画像

---
Seedanceで手元の写真やイラストを動画にするには、入口とモードを先に決めます。アプリで済ませるなら、CapCut系のDreaminaで画像をアップロードし、どう動かしたいかを文章で書いて生成するだけです。APIで作るなら、1枚の画像から動き出す「最初のフレーム指定」（`role: "first_frame"`）、終わりの絵まで決める「最初と最後のフレーム指定」（`first_frame`と`last_frame`）、商品やキャラクターの見た目だけを参考にさせる「参照画像」（`reference_image`）の3つから1つを選びます。この3つは1回のリクエストの中で混ぜられません。

APIに送る前に、画像が各辺300〜6000px、縦横比0.4〜2.5、1枚30MB未満に収まっているかを確かめてください。指定した`ratio`が画像の比率と違うと画像は中央で切り取られ、4:3のスマホ写真を16:9で出すと高さの25%が消えます。Seedance 2.5で最初のフレームを使う場合は`ratio`に`"adaptive"`しか指定できず、`duration`を省くと既定値の`-1`でモデルが4〜30秒の長さを自分で選ぶので、`"duration": 5`のように秒数を明記します。

まず数本試すだけなら、無料試用クレジットのあるDreaminaから始められます。決まった比率と秒数で何本も作る場合や、自分のサービスに組み込む場合はAPIを使います。以下の条件と数値は、2026年11月2日時点の火山方舟（Volcengine Ark）の動画生成APIドキュメントに基づきます。BytePlus ModelArkやlaozhang.aiの中継も同じタスク形式です。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

## 3つのモードの選び方：最初のフレーム・最初と最後・参照画像

迷ったら、画像を「動画の1コマ目そのもの」として使いたいかどうかで決めます。1コマ目にしたいなら最初のフレーム指定、終わりの1コマも決めたいなら最初と最後のフレーム指定です。構図は自由でよく、写っている商品や人物の見た目をそろえたいだけなら参照画像を選びます。

| モード | 向いている目的 | 画像の枚数と`role` | 対応モデル | `ratio`の扱い |
| --- | --- | --- | --- | --- |
| 最初のフレーム指定 | 商品写真やイラストをそのまま動かし始める | 1枚、`first_frame`（省略可） | 2.5、2.0系、1.0 pro、1.0 pro fast | 2.5は`adaptive`のみ。2.0系は指定も可 |
| 最初と最後のフレーム指定 | 開始と終了の絵が決まっている転換や変身 | 2枚、`first_frame`と`last_frame`（必須） | 2.5、2.0系、1.0 pro | 同上。比率が違えば最後のフレームが切られる |
| 参照画像 | 見た目をそろえた新しいカットを作る | 2.5は1〜30枚、2.0系は1〜9枚、すべて`reference_image` | 2.5、2.0系 | 指定も`adaptive`も可 |

参照画像モードでも、プロンプトで「画像1を最初のフレームにする」と書けば似た効果は出せます。ただし火山方舟のドキュメントは、最初と最後の絵を指定した画像と厳密に一致させたい場合は最初と最後のフレーム指定を優先するよう案内しています。参照画像モードには参照動画（2.5は最大10本、2.0系は最大3本）と参照音声も加えられますが、2.0系では音声だけを渡すことはできません。

2.0系には標準の`doubao-seedance-2-0-260128`のほか、`-fast-260128`と`-mini-260615`があり、2.5は`doubao-seedance-2-5-260628`です。1.0系は最初と最後のフレーム指定が1.0 proに限られ、参照画像は使えないため、画像から動画を作るなら2.5か2.0系を選ぶのが無難です。

## Dreaminaで画像から動画にする3ステップ

アプリで作るなら、DreaminaのSeedance画像から動画ページでアップロードから保存まで終わります。2026年11月2日時点の公式ツールページに書かれている手順は次の3つです。

1. Dreaminaの「Seedance image to video」ページを開き、新しいプロジェクトを始めます。
2. 画像をアップロードし、どう動かしたいか、どんな雰囲気にしたいかを書きます。カメラの動き、人物や物の動作、スタイルといった短い指示で構いません。
3. 生成してプレビューし、必要なら指示を調整してからダウンロードします。

同じページのFAQには、Seedance 2.0は無料試用クレジットがあり、画像から動画を無料で作れると書かれています。プロンプトや参照で動きのスタイルやカメラワークを指示できるとも説明されています。一方で、1本あたりのクレジット消費量、受け付ける画像の上限、最初と最後のフレームを指定する画面については公式ページに記載がありません。以下で説明する画像の条件やトリミングの仕組みはAPIの仕様で、Dreaminaの画面がそのまま同じとは限りません。日本から使える公式の入口は[Seedance 2.0の使い方：日本の公式ルートとオンライン利用確認](https://blog.laozhang.ai/ja/posts/seedance-2-how-to-use)で確認できます。

## 使える画像か確かめる：300〜6000px・縦横比0.4〜2.5・30MB未満

APIで画像を渡すとき、次の条件を1つでも外れるとリクエストは通りません。2026年11月2日時点の火山方舟ドキュメントの値で、Seedance 2.5と2.0系に共通です。

- 形式はJPEG、PNG、WebP、BMP、TIFF、GIFのいずれか。HEIC/HEIFはSeedance 2.0系以降で使えます。
- 幅と高さはどちらも300〜6000px。
- 縦横比（幅÷高さ）は0.4〜2.5。横長なら5:2、縦長なら2:5より極端な画像は使えません。
- 1枚あたり30MB未満で、リクエスト全体は64MB以下。大きなファイルはBase64ではなく公開URLで渡します。
- Base64で渡すときは`data:image/png;base64,...`の形で、形式名を小文字にします。アップロード済みの素材は`asset://<ASSET_ID>`でも指定できます。
- 実在人物の顔が写った写真は、Seedance 2.5と2.0系にそのままでは渡せません。対処は[Seedance 2.5/2.0「input image may contain a real person」の対処](https://blog.laozhang.ai/ja/posts/seedance-2-api-real-people)を参照してください。

2026年11月2日に、上の条件と料金表をそのまま組み込んだローカルのチェック用スクリプト（モデルは呼び出さず、公開ルールと照合するだけ）で、人物を含まない合成画像9枚を15通りの設定で確かめました。アイコンを想定した256×256pxは短い辺が300px未満で不可、8000×2000pxのパノラマは長い辺が6000pxを超え、縦横比も4.00で不可、3000×1000pxのバナーは縦横比3.00で不可でした。6000×4000pxのBMPは68.7MBで30MBを超え、Base64にすると約91.6MBになるので64MBの上限も超えます。スマホ写真やスクリーンショット、正方形の商品写真は条件内でした。

自分の画像を同じように確かめるなら、Pillowを入れたPythonで次の関数を使えます。条件は上のリストと同じで、`ratio`を指定すると何%切れるかも表示します。HEICはPillowだけでは開けないため、pillow-heifを追加するかJPEGに変換してから確かめてください。

```python
from pathlib import Path
from PIL import Image

FORMATS = {"jpeg", "png", "webp", "bmp", "tiff", "gif"}

def seedance_check(path, ratio="adaptive"):
    p = Path(path)
    with Image.open(p) as im:
        w, h = im.size
        fmt = {"mpo": "jpeg"}.get(im.format.lower(), im.format.lower())  # MPOはJPEGの一種
    notes = []
    if fmt not in FORMATS:
        notes.append(f"NG 形式{fmt}は不可")
    if min(w, h) < 300 or max(w, h) > 6000:
        notes.append(f"NG {w}x{h}px：各辺300〜6000pxの範囲外")
    if not 0.4 <= w / h <= 2.5:
        notes.append(f"NG 縦横比{w / h:.2f}：0.4〜2.5の範囲外")
    if p.stat().st_size >= 30 * 1024 * 1024:
        notes.append("NG 30MB以上：縮小するか圧縮する")
    if ratio != "adaptive":
        a, b = map(int, ratio.split(":"))
        img_r, out_r = w / h, a / b
        keep = min(img_r, out_r) / max(img_r, out_r)
        if keep < 0.99:
            side = "幅" if img_r > out_r else "高さ"
            notes.append(f"注意 {ratio}だと{side}の{1 - keep:.0%}が中央で切れる")
    return notes or ["OK"]

print(seedance_check("photo.jpg", ratio="16:9"))
```

## 画像が切れる理由：ratioが違うと中央でトリミングされる

画像の縦横比と`ratio`が違うと、火山方舟は画像を中央基準で切り取ってから動画にします。切られるのは比率の差の分だけで、どちらの辺が切れるかは画像が出力より横長か縦長かで決まります。端に写った文字やロゴを残したいなら、送る前に自分で出力と同じ比率に切っておくか、`ratio`を`"adaptive"`にします。

2026年11月2日の同じチェックでは、4032×3024pxのスマホ写真（4:3）をSeedance 2.0で`"ratio": "16:9"`にすると、高さの75%しか残らず上下が合わせて25%切れる計算でした。1179×2556pxのスマホのスクリーンショットを`9:16`にした場合は、画像のほうが細長いので高さの18%が切れます。最初と最後のフレームの比率が違うときは最初のフレームが優先され、2048×2048pxの商品写真と1920×1080pxの完成カットを組み合わせると、最後のフレームが1:1に切られます。

![4:3の写真を16:9にすると高さの25%、スクリーンショットを9:16にすると高さの18%が中央基準で切れ、比率の違う最後のフレームは1:1に切られる](https://blog.laozhang.ai/posts/ja/seedance-image-to-video/img/center-crop-ratio.webp)

モデルによって`ratio`の自由度も違います。最初のフレーム指定と最初と最後のフレーム指定では、Seedance 2.5は出力を最初のフレームの比率に合わせるため`"adaptive"`しか受け付けず、`"16:9"`のように指定すると条件違反になります。2.0系は16:9、4:3、1:1、3:4、9:16、21:9から指定するか、`"adaptive"`で最初のフレームに近い比率を選ばせるかを選べます。参照画像モードはどちらのモデルでも指定でき、`"adaptive"`ならプロンプトから比率が決まります。

出力の大きさは`resolution`と比率の組み合わせで決まります。2.5は480p・720p・1080p（既定は720p）、2.0は4Kまで選べ、2.0 fastと2.0 miniは480pと720pだけです。2.5の1080pと2.0の4Kは10bitのH.265/HEVCで出力されるため、再生できないプレーヤーもあります。

| `ratio` | 720pの出力 | 1080pの出力 |
| --- | --- | --- |
| 16:9 | 1280×720 | 1920×1080 |
| 4:3 | 1112×834 | 1664×1248 |
| 1:1 | 960×960 | 1440×1440 |
| 3:4 | 834×1112 | 1248×1664 |
| 9:16 | 720×1280 | 1080×1920 |
| 21:9 | 1470×630 | 2206×946 |

2.5で`"adaptive"`にしたとき、表にない比率の画像がちょうど何pxで出力されるかはドキュメントに載っていません。

## APIのリクエスト例：モード別のcontentとroleの書き方

どのモードも、`content`配列にテキスト1つと画像を並べ、画像ごとに`role`を付けるだけです。違うのは画像の枚数と`role`の値で、エンドポイント、認証、`ratio`や`duration`などのパラメーターは共通です。下の例はlaozhang.aiの中継ドキュメントにある書式に合わせており、火山方舟に直接送る場合は`https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks`に同じ本文を送ります。BytePlus ModelArkを含む提供元ごとのモデルIDは[Seedance 2.5 API実装ガイド：提供元別モデルID、Python、Node.js](https://blog.laozhang.ai/ja/posts/seedance-2-api)で確認できます。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

### 最初のフレーム指定：手元の画像1枚をBase64で送る

手元のファイルをそのまま送るなら、Base64のデータURLにして`image_url.url`に入れます。プロンプトは日本語で構いません。Seedance 2.5と2.0系はどちらも日本語のプロンプトに対応しています。

```python
import base64
import os

import requests

API = "https://api.laozhang.ai/seedance/api/v3/contents/generations/tasks"
KEY = os.environ["LAOZHANG_API_KEY"]  # SeeDance2グループで作ったキー

with open("photo.jpg", "rb") as f:
    data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()

payload = {
    "model": "doubao-seedance-2-5-260628",
    "content": [
        {"type": "text", "text": "カップから湯気がゆっくり立ちのぼり、カメラが少しだけ寄る。人物は登場しない。"},
        {"type": "image_url", "image_url": {"url": data_url}, "role": "first_frame"},
    ],
    "ratio": "adaptive",      # 2.5の最初のフレーム指定はadaptiveのみ
    "duration": 5,            # 省略すると-1になり、4〜30秒をモデルが選ぶ
    "resolution": "720p",
    "generate_audio": False,  # 既定はtrue（音声付き）
    "return_last_frame": True,
}

r = requests.post(API, json=payload, headers={"Authorization": f"Bearer {KEY}"}, timeout=60)
print(r.status_code, r.json())  # 受け付けられると {"id": "cgt-..."} が返る
```

生成は非同期です。返ってきた`id`で`GET https://api.laozhang.ai/seedance/api/v3/contents/generations/tasks/{id}`を定期的に呼び、`status`が`queued`や`running`のあいだは待ち、`succeeded`（laozhang.aiでは`completed`もあり）になったら`content.video_url`から動画を取得します。この結果URLは通常24時間ほどで期限が切れるので、すぐに保存してください。`failed`や`expired`で止まったら`error`の中身を確認します。待機やタイムアウトの切り分けは[Seedance 2.5のエラー・待機列・タイムアウトを切り分ける方法](https://blog.laozhang.ai/ja/posts/seedance-2-not-working)、ポーリングまで含めた完全なコードは前出のAPI実装ガイドにあります。

### 最初と最後のフレーム指定：2枚に役割を付ける

上のコードの`payload`をこの本文に差し替えます。2枚とも`role`が必須で、公開URLで渡す例です。2枚は同じ画像でも構いません。

```json
{
  "model": "doubao-seedance-2-0-260128",
  "content": [
    {"type": "text", "text": "画像1の商品の寄りから、画像2の完成した一杯へなめらかに切り替わる。商品の形と色は変えず、人物は出さない。"},
    {"type": "image_url", "image_url": {"url": "https://example.com/start.jpg"}, "role": "first_frame"},
    {"type": "image_url", "image_url": {"url": "https://example.com/end.jpg"}, "role": "last_frame"}
  ],
  "ratio": "adaptive",
  "duration": 5,
  "resolution": "720p",
  "generate_audio": false
}
```

### 参照画像：見た目をそろえて新しいカットを作る

参照画像では、どの画像を何の参考にするかをプロンプトの中で「画像1」「画像2」と番号で書き分けます。番号は`content`に並べた画像の順番です。

```json
{
  "model": "doubao-seedance-2-0-260128",
  "content": [
    {"type": "text", "text": "画像1のスニーカーを主役に、画像2のような夕方の屋上で、ゆっくり回り込むカメラで見せる。ロゴの形は画像1のまま。"},
    {"type": "image_url", "image_url": {"url": "https://example.com/sneaker.png"}, "role": "reference_image"},
    {"type": "image_url", "image_url": {"url": "https://example.com/rooftop.jpg"}, "role": "reference_image"}
  ],
  "ratio": "16:9",
  "duration": 5,
  "resolution": "720p",
  "generate_audio": false
}
```

`ratio`や`duration`は本文のパラメーターで渡すのが確実です。プロンプトの末尾に`--rt 16:9 --dur 5`のように書く方法もありますが、こちらは検証が緩く、値が間違っていると無視されることがあります。

### laozhang.aiで「no available channels」が返るとき

laozhang.aiでSeedanceを使うには、`SeeDance2`グループで作ったキーが必要です。2026年11月2日に、`default`グループのキーで最初のフレーム指定のリクエスト（100×100pxのPNGをBase64で添付）を送ったところ、HTTP 503で`Current group default has no available channels for model doubao-seedance-2-0-260128 under billing mode [pay-per-request]`が返り、`doubao-seedance-2-5-260628`でも同じでした。100pxは画像の下限300pxを下回っていますが、画像についてのエラーより先にこの応答が返ったので、グループの確認は画像のチェックより前に行われます。このメッセージが出たら画像やパラメーターを直す前に、キーを`SeeDance2`グループで作り直してください。URLに`/seedance`の接頭辞がないと別の失敗になるので、パスも上の例と同じにします。

火山方舟で直接使う場合は、Seedance 2.5と2.0系を開通する条件として、残高200元超、200元以上の節約プラン、残量のあるSeedanceリソースパックのいずれかが必要です。

## 1本あたりの費用：2.5はdurationを指定しないと最長30秒分になる

費用は出力動画の長さと大きさで決まり、画像を何枚入れても増えません。火山方舟が示す目安は、token数 ≒（入力動画の秒数＋出力の秒数）×出力の幅×高さ×フレームレート÷1024で、入力が画像だけなら出力側だけで計算できます。ただしSeedance 2.5は`duration`の既定値が`-1`で、モデルが4〜30秒の中から長さを選び、ドキュメントも長さは課金に関わるので慎重に設定するよう注意しています。

2026年11月2日のチェックでは、1536×2048pxのイラスト（3:4）を2.5の720pで`duration: -1`にした場合、最長の30秒（721フレーム）なら834×1112×721÷1024で約652,989token、laozhang.aiの提示価格（100万tokenあたり$12.00）で約$7.84になりました。5秒（121フレーム）を明記すれば約109,586tokenで約$1.32です。2.0系は4〜15秒の範囲外を受け付けず、20秒を指定した設定はチェックの段階で止まりました。動きの確認だけなら解像度を下げるのも手で、2.5の480p・16:9・5秒は854×480×121÷1024で約48,438token、約$0.58です。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

![Seedance 2.5の720pでdurationを省いて30秒になった場合は約$7.84、5秒を明記すると約$1.32、480p・5秒なら約$0.58になる費用比較](https://blog.laozhang.ai/posts/ja/seedance-image-to-video/img/duration-cost.webp)

laozhang.aiの`SeeDance2`グループの提示価格（2026年10月14日からの価格、2026年11月2日時点）を、動画入力なし・16:9・5秒の1本で並べると次のとおりです。

| モデル | 100万tokenあたり（480p・720p／1080p） | 720p・5秒 | 1080p・5秒 |
| --- | --- | --- | --- |
| Seedance 2.5 | $12.00／$13.20 | 約$1.31 | 約$3.23 |
| Seedance 2.0 | $7.88／$8.74 | 約$0.86 | 約$2.14 |
| Seedance 2.0 fast | $6.34／非対応 | 約$0.69 | 非対応 |
| Seedance 2.0 mini | $3.94／非対応 | 約$0.43 | 非対応 |

もっと安く試すなら、2.0 miniの480pで1:1・5秒（640×640）は約48,400token、約$0.19です。laozhang.aiの利用ログには1つのタスクにつき作成時の事前引き落としと完了時の精算の2行が記録され、その合計がそのタスクの費用になります。BytePlusなど他の経路の秒単価は[Seedance 2.5 API料金：経路別の1秒単価と無料で使えるか](https://blog.laozhang.ai/ja/posts/seedance-2-pricing-free-vs-paid-guide)で比べられます。

## 前の動画の続きを作る：return_last_frameで最後のフレームを引き継ぐ

5秒や10秒の動画をつないで長い1本にしたいときは、`"return_last_frame": true`を付けて生成し、返ってきた最後のフレームを次のタスクの`first_frame`にします。最後のフレームは動画と同じ幅と高さのJPEGで、透かしは入りません。laozhang.aiでは`content.last_frame_url`から取得できます。火山方舟のドキュメントもこの方法を連続した動画の作り方として案内しています。

*注記：[laozhang.ai は当ブログ運営チームの自社サービスです](https://blog.laozhang.ai/ja/about#laozhang)。その料金は中立的な比較ではなく、自社の提示価格です。*

前の動画の最後の1コマから次の動画が始まるので、つなぎ目の絵はそろいます。引き継がれるのは絵だけなので、動きやカメラワークは次のタスクのプロンプトで改めて指定します。なお、Seedance 2.5なら1本で最長30秒まで作れるので、30秒以内に収まるなら分けずに`duration`を長く取るほうが手間は少なく済みます。

## Seedanceの画像から動画でよくある質問

### Seedanceの画像から動画は無料でできますか？

アプリならできます。2026年11月2日時点で、DreaminaのSeedance画像から動画ページはSeedance 2.0に無料試用クレジットがあると案内していますが、何本作れるかは書かれていません。APIは1本ごとにtoken課金で、無料枠の有無と経路ごとの単価は[Seedance 2.5 API料金：経路別の1秒単価と無料で使えるか](https://blog.laozhang.ai/ja/posts/seedance-2-pricing-free-vs-paid-guide)で比べられます。

### 画像をどう動かすか、プロンプトはどう書けばいいですか？

Seedance 2.5と2.0系は日本語のプロンプトに対応しているので、カメラの動き、被写体の動作、変えてはいけないものを日本語で具体的に書けば十分です。秒ごとの指定や参照素材の書き分けは[Seedance 2 プロンプトの書き方：2.5の秒指定、参照素材、絵コンテと修正例](https://blog.laozhang.ai/ja/posts/seedance-2-prompt-guide)に例があります。

### 画像から動画の生成が失敗する、いつまでも終わらないときは？

タスクが`failed`や`expired`で止まった場合も、`queued`のまま進まない場合も、まずタスクIDと状態をそのまま控えます。そのうえで、どこで止まっているかの切り分け方を[Seedance 2.5のエラー・待機列・タイムアウトを切り分ける方法](https://blog.laozhang.ai/ja/posts/seedance-2-not-working)で確認してください。
