HiAPI
ブログ

使用ガイド

Ray 3.2 画像から動画:静止画像を縦型ショート動画クリップに変える

手持ちの製品画像と人物ポートレートを 9:16 の動画クリップにする方法、さらに検証済みの end_image_url シームレスループのコツ

Nov 1, 2026
Ray 3.2 画像から動画:静止画像を縦型ショート動画クリップに変える

TL;DR

  • これは何か:hiapi の非同期タスク API 上の ray-3.2/image-to-video を使って、手持ちの静止画像(製品写真やポートレートなど)を縦型ショート動画クリップに変換する、再現可能なワークフローです。
  • すべてを決める重要な事実:ray-3.2 i2v には aspect_ratio も duration フィールドもありません。クリップの形状は入力画像から決まり、長さは常に約5秒です。9:16 の縦型を得るには、9:16 の静止画像を入力してください。コツはここに尽きます。
  • 以前のチュートリアルからの新変化:スキーマはオプションの end_image_url(最終フレーム)を受け付けるようになりました。同じ画像を最初のフレームと最後のフレームの両方に指定すると、開始点で終わるクリップが得られ、これがシームレスループに必要なものです。
  • 検証:以下の各クリップは、本記事のために1回のファンアウトバッチ処理で生成されました。540p クリップ3本、各 $0.2145(合計 $0.6435)、サーバー側の所要時間は各 41~58 秒。3本とも 540×960、24fps、5.04秒、無音の MP4 が返されました。

多くのショート動画チームはアイデアに困っていません。手元には製品画像、広告用静止画、クリエイターのポートレートが山ほどあるのに、動かすことはしないのです。画像から動画がこの問題を解決します。あなたの映像がアンカーとして保たれ、モデルが動きを加えます。本ガイドでは Ray 3.2 を使ったこの作業をエンドツーエンドで扱います。静止画像の準備、モーションプロンプトの作成、バッチ処理、ループのコツ、そして編集時に修正すべき点です。

画像から動画か、テキストから動画か:どちらが必要か?

Ray 3.2 には hiapi 上で2つの独立したエンドポイントがあり、異なるショート動画タスクに適しています:

  • 画像から動画(本ページ):すでに映像があります。モデルはあなたの製品、あなたのモデル、あなたのライティングを保持し、動きだけを加えなければなりません。製品画像のショーケース、カタログから Reels へ、クリエイターの静止画、そしてブランドの正確さが新奇さより優先されるあらゆるクリップに適しています。
  • テキストから動画:アイデアはあるが素材がない場合。モデルがショット全体を構成します。これがあなたのケースなら、Ray 3.2 テキストから動画ショート動画ワークフローで、プロンプトのみからコンセプトをバッチ生成する方法を扱っています。

この2つのワークフローは確かに異なります。テキストから動画では、aspect_ratio: "9:16" を渡すことで縦型フレームを選択します。画像から動画ではそのフィールドは存在しないため、構図は API 呼び出し前に、静止画像を準備する段階で決まります。

リクエスト:3つの必須または常用フィールドと、1つの新しいオプションフィールド

2026-11-01 にライブ API に対してスキーマをフィールドごとに確認しました。スキーマは閉じているため、未知のキーは 400 を返します:

フィールド 必須 値 説明
prompt はい テキスト シーンではなく動きを記述します。シーンはすでに画像の中にあります
image_url はい 公開 URL 最初のフレーム。出力のアスペクト比を決定します
resolution いいえ 540p、720p、1080p 料金が発生する唯一の要素(下記参照)
end_image_url いいえ 公開 URL オプションの最終フレーム。当社の操作ガイド執筆以降に追加されました

duration と aspect_ratio は依然として直接拒否されます(additional properties 'duration' not allowed)。推測されそうな他の最終フレーム名、たとえば last_frame_url、tail_image_url、end_frame_url も同様に拒否されます。フィールドは end_image_url のみです。

単一の縦型クリップ:

curl -s https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ray-3.2/image-to-video",
    "input": {
      "prompt": "Slow cinematic push-in toward the serum bottle, a single water droplet slides down the amber glass...",
      "image_url": "https://your-cdn.example.com/serum-9x16.jpg",
      "resolution": "540p"
    }
  }'

data.taskId が返ります。GET /v1/tasks/{taskId} を data.status が success(または fail)になるまでポーリングし、その後すぐに output[0].url をダウンロードしてください。これは expireAt 付きの一時リンクです。操作ガイドには完全な Python の送信/ポーリング/ダウンロードスクリプトとエラーペイロードがあり、クイックスタートではキーとタスク API の基本を扱っています。

料金:解像度が唯一のレバー

ray-3.2/image-to-video のリアルタイム価格(執筆時点の hiapi 料金より。常にそこで再確認してください):

解像度 1本あたりの価格
540p $0.2145
720p $0.429
1080p $1.7145

クリップの長さは固定で、アスペクト比は画像から決まるため、縦型に追加料金を払うことはなく、「より長いクリップ」オプションで自己アップグレードすることもできません。1080p クリップ1本の費用は 540p クリップ8本分に相当します。したがってショート動画のパターンは、クリップ課金のあらゆる動画モデルと同じです:540p でモーションテストを実行し、勝ち残ったプロンプト+静止画像だけを 720p または 1080p で再レンダリングして公開版にします。2つのエンドポイント全体の Ray 3.2 のコスト全体像については、Ray 3.2 API 料金内訳をご覧ください。

ステップ1:9:16 の静止画像を準備する(縦型はここから来る)

モデルはあなたのショットを再構図できないため、静止画像は送信前に正しく準備する必要があります:

  • 9:16 にします。当社は 720×1280 の静止画像を使用しました。540p では 540×960 で返され、ネイティブ縦型なので後でトリミングする必要はありません。横型の製品画像は横型クリップになるため、先に 9:16 にトリミングまたは拡張してください。
  • 動きのための余白を残します。カメラモーションはフレームにズームインします。当社のセラム静止画像にはボトルの上に広い空白の背景があり、プッシュインはこの空間を活用し、キャップを切り落としませんでした。
  • フックを映像自体に置きます。クリップの最初のフレームはあなたの画像なので、スクロールを止める要素(製品、顔、ライティング)はすでに静止画像に含まれていなければなりません。

本記事の2枚の静止画像は、gpt-image-2 でネイティブ 9:16 画像として生成されました。実際の使用では、ご自身の製品画像やポートレートを入れることになります:

ステップ2:シーンではなく動きをプロンプトする

画像はすでにショットに何があるかを語っています。プロンプトはどのように動くかだけを説明すればよいのです。このバッチで効果的だった3つのポイント:

  1. カメラモーションを1つ指定する(プッシュイン、ゆるやかなドリフト、固定カメラ)。そして何が静止しているべきかを述べます。
  2. 被写体に1~2の物理的な動きを与える。たとえば水滴が滑り落ちる、光が掃く、髪が風になびくなど。これが5秒のクリップを、Ken Burns のパンのように見せず、生き生きとさせる理由です。
  3. 素材タイプに合った動きを選ぶ。製品にはゆっくりとした制御された光の変化が必要です。人物はより大きく温かい動きに耐えられます。

製品クリップ(上のカバークリップ)。プロンプト:

Slow cinematic push-in toward the serum bottle, a single water droplet slides
down the amber glass, a band of warm light sweeps across the bottle from left
to right and makes the gold cap glint, the background stays dark and still,
premium skincare commercial

プッシュインと光の掃引はうまく機能し、ボトルの形状と金色のキャップは保たれました。正直な注意点:光が掃引すると、ドロッパーの黒いゴム球がより明るく金属的な色に変わりました。実際の SKU では、これはブランドチームが指摘するような細部のドリフトです。公開前に製品の細部をフレームごとに確認し、特定の部品が継続的にドリフトする場合は、より弱い光の掃引指示を試すか、動きを背景に留めてください。

ポートレート / クリエイターの静止画像。プロンプト:

The wind lifts her curls, she turns her head slightly toward the camera and
her half-smile widens into a warm smile, the golden-hour backlight flickers
through her hair, the camera holds steady with a very gentle drift, natural
lifestyle feel

顔、セーター、ゴールデンアワーの光は一貫しており、頭の動きと微笑みも決まりました。しかし Ray 3.2 のカメラモーションは「ごく穏やかなドリフト」が示唆するよりも大きめでした。最後のフレームでは、彼女はフレームの反対側に移動し、背後のスカイラインも動いていました。人物ショットでは、モデルがモーションプロンプトを緩く解釈することを予想してください。フレームを固定する必要がある場合は、下のループプロンプトで行ったように明確に指定してください。

ステップ3:end_image_url でループのコツ

ループはショート動画フィードでよく機能します。シームレスに再開できるクリップは繰り返し再生され、字幕や製品注釈の背景としても使えます。Ray 3.2 のオプションの end_image_url がこれを容易にします:同じ静止画像を最初のフレームと最後のフレームの両方に指定すると、モデルは開始点に戻らなければなりません。

{
  "model": "ray-3.2/image-to-video",
  "input": {
    "prompt": "Seamless loop: the warm light slowly brightens and dims across the serum bottle, water droplets glisten, a faint wisp of mist drifts past the stone and fades out, the camera stays locked off, the bottle does not move",
    "image_url": "https://your-cdn.example.com/serum-9x16.jpg",
    "end_image_url": "https://your-cdn.example.com/serum-9x16.jpg",
    "resolution": "540p"
  }
}

目視ではなく測定しました。各クリップの最初と最後のフレームを抽出し、SSIM で比較しました(1.0 は完全一致):

クリップ end_image_url 先頭フレーム対末尾フレームの SSIM
ループ(同じ静止画像を最終フレームに) はい 0.958
製品プッシュイン いいえ 0.654
ポートレート いいえ 0.410

最終フレームを固定すると、クリップは開始位置とほぼ同じ場所で終わり、エディターやプラットフォームの自動再生で単純に繰り返しても目立つジャンプはありません。固定しない場合、クリップは新しい位置で終わり、カットには問題ありませんがループには不向きです。覚えておくべき2点:

  • ループの動きは周期的に保ちます。光が明るくなって暗くなる、霧が漂って消える、固定カメラは問題ありません。プッシュインは5秒で説得力をもって「戻る」ことはできません。
  • テストしたのは同画像ループのみです。異なる最終フレームを渡すこと(例:最初のフレームは閉じた箱、最終フレームは開いた箱)はこのフィールドの設計目的ですが、当社はそれらの結果をここで検証していないため、広告キャンペーンを構築する前にテストしてください。

ステップ4:バッチ処理:まずファンアウト、次に収集

タスク API は非同期なので、一度に1つのクリップをレンダリングしないでください。すべての静止画像+プロンプトのペアを送信し、taskId を受け取った瞬間にディスクに保存してからポーリングします:

for each (still, prompt) pair:
    taskId = POST /v1/tasks  (model=ray-3.2/image-to-video, input={...})
    persist taskId immediately        # the task is billed at submit

for each saved taskId:
    poll GET /v1/tasks/{taskId} until status in ("success", "fail")
    on success: download output[0].url now (it expires)

当社の3クリップのバッチは連続して送信され、サーバー側の所要時間はそれぞれ 44秒(製品)、41秒(ループ)、58秒(ポートレート)でした。並列で実行されるため、バッチ全体は最も遅いクリップとほぼ同じ時間で完了し、8秒のポーリング間隔を含めても実時間で1分強でした。ネットワークの揺らぎでポーリングが失敗した場合は、同じ id で再試行してください。再送信すると2つ目のクリップが作成され、課金されます。

ステップ5:エディターで仕上げる

API が返すのは生の素材であり、完成した投稿ではありません:

  • 音声はありません。3つのクリップはすべて H.264 ビデオストリームのみで、音声トラックはありません。エディターで人気のサウンド、ナレーション、字幕を追加してください。
  • 5秒は1ビートです。3~4つのクリップを積み重ね(例:製品プッシュイン → 字幕背景としてのループ → クリエイターのリアクション)、ビートに合わせてハードカットしながら15~20秒のバージョンに編集します。
  • 勝者だけをアップスケールします。選んだ静止画像+プロンプトを 720p または 1080p で再実行して最終書き出しにします。バッチ全体を高解像度でレンダリングしないでください。

FAQ

ray-3.2 画像から動画で 9:16 の縦型クリップを得るには?9:16 の入力画像を提供してください。aspect_ratio パラメータはなく、出力は入力の形状に従います。720×1280 の静止画像は 540p で 540×960 のクリップとして返されます。

クリップを5秒より長くできますか?このエンドポイントではできません。duration フィールドは存在せず、送信すると 400 が返ります。当社が生成した各クリップはすべて5.04秒(24fps で121フレーム)でした。編集でクリップを積み重ねて長いバージョンにしてください。

Ray 3.2 i2v は最終フレームをサポートしていますか?はい。オプションの end_image_url フィールドで最終フレームを設定します。同じ画像を image_url に渡すと、ループ再生可能なクリップが得られます(当社のテストでは、先頭フレーム対末尾フレームの SSIM は 0.958)。

音声は生成されますか?いいえ、出力 MP4 は無音です。

製品は完全にそのまま保たれますか?当社のテストでは、形状、色、全体的な構図はよく保たれましたが、強い光の動きで小さな部品がドリフトする可能性があります(当社のドロッパー球は色が変わりました)。公開前に製品の細部を確認してください。

1バッチの費用はいくらですか?解像度とクリップ数のみに基づきます:540p は $0.2145、720p は $0.429、1080p は $1.7145。当社の3クリップのテストバッチは $0.6435 でした。

静止画像を動かし始めましょう

Ray 3.2 画像から動画は非同期タスク API で利用可能になりました。ray-3.2/image-to-video モデルページを開いて現在のパラメータと料金を確認し、手持ちの 9:16 静止画像を3枚用意して 540p で実行してください。1ドル未満でテストバッチが得られます。同じタスクでモデルを比較していますか?Kling 3.0 が画像から動画のショート動画をどう扱うかをご覧ください。

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

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

APIドキュメントを読む