Grok Imagineで画像から短い動画を作る手順
静止画の選定、モーションプロンプト、一貫性の確認、利用制限の切り分け、xAI APIのポーリング、失敗処理、動画保存までをまとめた実践ガイドです。
目次

Grok Imagineで気に入った静止画ができても、動画にすると顔が変わる、小物が消える、背景が崩れる、あるいは他人の画面にある動画機能が自分のアカウントでは見つからないことがあります。闇雲に再生成するのではなく、静止画、モーションプロンプト、一貫性、アカウントの利用可否を別々の関門として確認する方が確実です。
ここでは、特定のボタン名に依存しないGrokのWeb/アプリ手順を先に示し、その後にxAI APIで再現可能な完全フローを紹介します。最終的に、保存済みの静止画と短い動画、そして次の再生成で画像・動き・カメラ・アクセスのどこを直すべきか判断する基準が残ります。
まず5ステップで画像から動画まで一度通す
初回は被写体の動作を1つ、カメラ動作を1つに絞ります。複雑な映画的カットを一度で狙うのではなく、全工程がつながることを確認するのが目的です。
- 静止画を生成する。 被写体、服や重要な小物、構図、背景、光を固定し、この段階のプロンプトに長い動作列を詰め込まない。
- 動画化しやすい画像を選ぶ。 顔、手、文字、輪郭、遮蔽を先に確認する。静止画にある破綻は、動くとさらに目立ちやすい。
- モーションプロンプトを別に書く。 次に起きることだけを記述し、変えてはいけない人物特徴と場面要素を列挙する。
- 選んだ画像から動画を開始する。 その画像を開き、自分のアカウントに実際に表示されるアニメーションまたは動画操作を使う。名称はアカウント、バージョン、地域で異なる場合がある。
- 再生成の前にダウンロードする。 動き、被写体の一貫性、カメラ、保存ファイルを確認し、次の版では変数を1つだけ変える。
動きを足す前に静止画で人物と構図を固定する
動画化する元画像は、まず安定している必要があり、派手さはその次です。顔、服、アクセサリー、持ち物、位置関係が明確なら、何を維持すべきか判断しやすくなります。
プロンプトは「被写体と固定特徴 → 構図とカメラ → 背景 → 光とスタイル → アスペクト比」の順で組みます。右へ動かすなら右側に余白を残し、ゆっくり寄るなら最初から顔を画面いっぱいにしないようにします。
静止画プロンプトの型
被写体と変えない特徴;服、アクセサリー、重要な物;ショットサイズ、カメラ高、レンズ感;背景と照明;最終アスペクト比。
例
チャコールグレーのコートを着た若い女性の映画的な腰上ポートレート。肩には鮮やかな黄色い鳥。駅の混雑した人波は背景で柔らかなモーションブラーになる。目線の高さ、50 mmレンズ風、浅い被写界深度。女性と鳥は鮮明。16:9。
候補から選ぶときは、雰囲気だけでなく次の4点を優先します。
- 顔、目、手、重要な物が破綻せず、それぞれの輪郭が分離して読める。
- 動かしたい身体部位が画面端で切れておらず、前景に強く隠されていない。
- 髪型、服の色、アクセサリー、被写体数を言葉で簡単に固定できる。
- 背景に崩れた文字、重複人物、密な交差線がなく、動いたときのドリフト要因が少ない。
元画像の人物同一性や形状がすでに不安定なら、先に静止画を作り直します。動画生成が偶然修正してくれる前提では進めません。
モーションプロンプトには変化だけを書き、別の場面を再設計しない
有効なモーションプロンプトは、被写体動作、カメラ動作、背景動作、固定項目の4部構成です。最初は各カテゴリ1つの明確な動作にすると、顔・服・背景が同時に変わる可能性を減らせます。
数秒の中で始点と終点が見える動作を使います。「カメラへゆっくり振り向いて1回まばたきする」は確認できますが、「映画的な感情を見せる」は確認しにくい指示です。カメラも、寄る、引く、パン、固定のどれか1つにします。
モーションプロンプトの型
数秒で被写体が何をするか;カメラがどう動くか;背景がどう動くか;顔、服、物、色、構図、場面の位置関係の何を変えないか。
例
女性はゆっくりカメラの方へ振り向き、1回まばたきする。黄色い鳥は足を踏み替え、片翼を少し開く。背景の人波は通り過ぎ続ける。カメラはゆっくり寄る。女性の顔、チャコールグレーのコート、鳥の色、被写体数、フレーミング、駅の配置を変えない。
初回から衣装変更、天候変化、爆発、複数人の会話、複雑なカメラワークを同時に要求しません。まず検証可能な1動作を安定させ、要素を1つずつ追加します。
選んだ画像から生成を開始し、静止画と動画をすぐ保存する
GrokのWebやアプリでは、ボタンの表記よりも、選択済み画像から継続しているかが重要です。新しいtext-to-videoを始めていないことを確認します。
最終静止画を開き、自分のアカウントで利用できるアニメーションまたはimage-to-video操作を選び、モーションプロンプトを貼ります。初回は短く低複雑度にします。操作が見えなければ、アプリ版、ログイン中のアカウント、プラン、地域、クールダウン表示を確認し、他人の画面から自分の権限を推測しないでください。
完了したら、静止画と動画をすぐにダウンロードし、2つのプロンプトを同じ記録に残します。ホストされたメディアURLは一時的な場合があり、ローカルファイルがなければ後の版を正確に比較できません。
次の生成に進む前に5項目を確認する
再生できるだけでは採用できる動画とは限りません。毎回同じ順で見ると、原因が元画像、動き、カメラ、アクセスのどこにあるか切り分けられます。
- 開始フレームの一致: 顔、服、鳥、被写体数、背景配置が選んだ静止画に対応している。
- 動作の命中: 指示した動きが、想定した方向、幅、順序で実行されている。
- 被写体の一貫性: 顔の入れ替わり、手足の増減、色変化、アクセサリー消失、被写体の融合がない。
- カメラ制御: 指定した動きだけを行い、予期しないカット、回転、強い揺れがない。
- 保存済み成果物: 最後まで再生でき、ファイルが保存され、元画像とプロンプトを特定できる。
人物同一性または保存に失敗したら、まだ動きを大きくしません。静止画かモーションプロンプトへ戻り、各失敗を特定の工程に結び付けられてから複雑度を上げます。
Grok製品の利用可否、xAI APIの制限、ユーザー事例を分ける
2026-09-28時点で、公式API文書はimage-to-videoの能力とリクエスト仕様を確認できます。ただし、すべてのGrok Web/アプリアカウントに同じ操作、回数、表示名があるとは証明しません。
| 根拠 | 安全に判断できること |
|---|---|
| 自分のGrok画面 | そのアカウントでの操作表示、残り回数、待機表示、ダウンロード経路を確認できる。 |
| xAI公式API文書 | APIのモデル、入力形式、非同期状態、長さ、解像度を確認できるが、Grok UIの権限は示さない。 |
| あるクリエイターのX投稿 | その時点でその人が短い動画を作れたことだけを示し、全員共通の上限や品質、無料枠は示さない。 |
公式のImage-to-Videoガイドでは、公開URL、base64 data URI、Files APIのfile_idを入力にできます。Video Generationガイドではimage-to-videoの長さを1–15秒、出力を480p、720p、1080pとしています。aspect_ratioを省略すると入力画像の比率を使い、別の値を指定すると画像が引き伸ばされます。リクエストはrequest_idを返し、pending、done、failed、expiredを経て、完了時に一時URLを返します。
アプリの回数、待機時間、地域対応は自分のアカウント表示で確認します。APIのレート制限はティアごとに異なり、Grok製品内の生成回数とは別です。連続実行前に現在のAPI料金とコンソールのティアも確認してください。
Frame ZeroのX投稿は、Grok Imagineで静止画を作り、それを4秒の動画にした個人事例です。ワークフローの手掛かりにはなりますが、公式の最大長でも、別のプロンプト・アカウント・画像で同じ結果になる保証でもありません。
再現性が必要なら公式APIで全工程を実行する
次のBash例は、現行の画像生成、image-to-video、非同期動画ポーリングの仕様に沿っています。静止画の生成と保存、動画開始、request_id取得、状態確認、failed/expired処理、MP4保存、10分でのタイムアウトまでを含みます。
課金とアクセスが有効なxAI APIアカウントに加え、curl、jq、python3が必要です。Bash用の例です。キーは非表示でXAI_API_KEYへ読み込むため、スクリプトやコマンド履歴に書き込みません。初回はduration: 8とresolution: "720p"のまま試します。
set -euo pipefail
command -v curl >/dev/null
command -v jq >/dev/null
command -v python3 >/dev/null
read -rs XAI_API_KEY && export XAI_API_KEY
trap 'unset XAI_API_KEY' EXIT
STILL_PROMPT=$(cat <<'PROMPT'
チャコールグレーのコートを着た若い女性の映画的な腰上ポートレート。肩には鮮やかな黄色い鳥。駅の混雑した人波は背景で柔らかなモーションブラーになる。目線の高さ、50 mmレンズ風、浅い被写界深度。女性と鳥は鮮明。
PROMPT
)
MOTION_PROMPT=$(cat <<'PROMPT'
女性はゆっくりカメラの方へ振り向き、1回まばたきする。黄色い鳥は足を踏み替え、片翼を少し開く。背景の人波は通り過ぎ続ける。カメラはゆっくり寄る。女性の顔、チャコールグレーのコート、鳥の色、被写体数、フレーミング、駅の配置を変えない。
PROMPT
)
IMAGE_PAYLOAD=$(jq -n \
--arg prompt "$STILL_PROMPT" \
'{
model: "grok-imagine-image-2.0",
prompt: $prompt,
aspect_ratio: "16:9",
resolution: "1k"
}')
IMAGE_JSON=$(curl --fail-with-body --silent --show-error \
https://api.x.ai/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $XAI_API_KEY" \
-d "$IMAGE_PAYLOAD")
IMAGE_URL=$(jq -r '.data[0].url // empty' <<<"$IMAGE_JSON")
if [ -z "$IMAGE_URL" ]; then
printf '%s\n' "画像レスポンスにURLがありません。" >&2
jq . <<<"$IMAGE_JSON" >&2
exit 1
fi
curl --fail-with-body --location --silent --show-error \
"$IMAGE_URL" -o grok-imagine-still.jpg
VIDEO_PAYLOAD=$(jq -n \
--arg prompt "$MOTION_PROMPT" \
--arg image "$IMAGE_URL" \
'{
model: "grok-imagine-video-1.5",
prompt: $prompt,
image: {url: $image},
duration: 8,
resolution: "720p"
}')
START_JSON=$(curl --fail-with-body --silent --show-error \
https://api.x.ai/v1/videos/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $XAI_API_KEY" \
-d "$VIDEO_PAYLOAD")
REQUEST_ID=$(jq -r '.request_id // empty' <<<"$START_JSON")
if [ -z "$REQUEST_ID" ]; then
printf '%s\n' "動画開始レスポンスにrequest_idがありません。" >&2
jq . <<<"$START_JSON" >&2
exit 1
fi
for _ in $(seq 1 120); do
RESULT=$(curl --fail-with-body --silent --show-error \
"https://api.x.ai/v1/videos/$REQUEST_ID" \
-H "Authorization: Bearer $XAI_API_KEY")
STATUS=$(jq -r '.status // "unknown"' <<<"$RESULT")
case "$STATUS" in
pending)
sleep 5
;;
done)
VIDEO_URL=$(jq -r '.video.url // empty' <<<"$RESULT")
if [ -z "$VIDEO_URL" ]; then
printf '%s\n' "完了レスポンスに動画URLがありません。" >&2
jq . <<<"$RESULT" >&2
exit 1
fi
curl --fail-with-body --location --silent --show-error \
"$VIDEO_URL" -o grok-imagine-output.mp4
printf '%s\n' "grok-imagine-still.jpg と grok-imagine-output.mp4 を保存しました"
exit 0
;;
failed|expired)
printf '動画生成は次の状態で終了しました: %s\n' "$STATUS" >&2
jq . <<<"$RESULT" >&2
exit 1
;;
*)
printf '未定義の状態を受信しました: %s\n' "$STATUS" >&2
jq . <<<"$RESULT" >&2
exit 1
;;
esac
done
printf '%s\n' "10分以内に完了しなかったためポーリングを停止しました。" >&2
exit 1
成功時は終了コード0となり、現在のフォルダーにgrok-imagine-still.jpgとgrok-imagine-output.mp4ができます。HTTPエラーはcurl --fail-with-bodyで停止し、failedまたはexpiredでは完全な結果を表示して終了します。無限待機や、黙って別の課金リクエストを作ることはありません。
このコードは文書化されたフィールドに基づく再現用テンプレートであり、画質ベンチマークではありません。確率的生成なので例と同じ画面を保証しません。バッチ実行前に1リクエストで権限、料金、レート制限、品質、保存動作を確認してください。
全パラメータを変える前に、最も可能性の高い原因を直す
1回の試行で上流の変数を1つだけ変えると、次の結果が原因を示せます。
image-to-video操作がない
最終画像を開いているか、新しいテキスト会話ではないかを確認します。次にアプリ版、ログインアカウント、プラン、地域、待機表示を確認します。他人のボタン名をそのまま探さず、API権限がある場合は公式image-to-video endpointを使えます。
顔が変わる、重要な物が消える
輪郭が明確で遮蔽が少ない元画像へ戻り、動作幅を小さくし、顔、服、色、被写体数、重要な物をプロンプト末尾で固定します。最初のフレームから違う場合、文章を増やすだけでは直りにくいです。
動画がほとんど動かない
抽象語を、始点と終点が見える動作へ変えます。例は「左を見た状態からカメラへ向き、1回まばたきする」です。被写体動作とカメラ動作は各1つにします。
背景が崩れる、カメラが暴れる
背景動作を先に削り、被写体動作だけを残します。カメラは固定か、ゆっくりした寄り1つにします。群衆、文字、柵、交差線はドリフトしやすいため、必要なら元背景を簡略化します。
APIがpendingのまま、failedまたはexpiredになる
一定間隔でポーリングし、数分待っただけで重複リクエストを出しません。failedまたはexpired後は、レスポンス、キーとアカウント、入力URLの到達性を確認してから新しいリクエストを作ります。
完了URLが後で開けない
公式文書では画像と動画のURLは一時的です。doneになったらすぐダウンロードし、ローカルファイル名に版番号を付け、ホストURLを恒久保管先にしません。
2版目は元画像を固定し、変数を1つだけ変える
良い再生成は1つの疑問に答えます。「もう一度」は何も切り分けません。
- 同じ元画像と人物固定リストを保ち、動作幅だけを変えて一貫性を確認する。
- 動きが安定してから、元画像を変えずにカメラを固定からゆっくり寄りへ変える。
- カメラが安定してから長さまたは解像度を変え、処理時間、最終状態、保存結果を記録する。
- 版番号、元画像名、モーションプロンプト、設定、評価を1行にまとめ、戻せる版を残す。
この方法なら、原因が元画像、動き、カメラ、アクセスのどれかを判断できます。2つ目の動作や複雑な場面を足す前に、単純な1本の流れを安定させてください。
根拠と適用範囲
以下は2026-09-28に確認しました。公式ページはAPI機能とフィールドの根拠、X投稿は1人のクリエイター事例としてのみ使用しています。
- xAI Image Generation — モデル、
/v1/images/generations、一時URL、設定。 - xAI Image-to-Video — 入力形式と
grok-imagine-video-1.5の例。 - xAI Video Generation — 非同期フロー、状態、長さ、解像度、一時出力URL。
- xAI Videos REST API Reference —
request_idと結果取得endpoint。 - xAI Release Notes — 2026-07-31の
grok-imagine-video-1.5モダリティ記録。 - Frame ZeroのX投稿 — 個人事例であり、公式上限や一般的な品質結論ではない。