模型能力
视频扩展
通过提供源视频和描述后续内容的文本提示来扩展现有视频。结果是一个单一的视频,从输入的最后一帧无缝衔接,并继续生成内容。
您可以将源视频作为公共 URL、base64 编码的数据 URI 或来自 Files API 的 file_id 提供。有关使用 file_id 输入的信息,请参阅 Imagine → Files API Integration。
WARNING
duration 参数仅控制扩展部分的长度,而不是总输出长度。例如,如果您的输入视频为 10 秒,且您将 duration 设置为 5,则返回的视频将为 15 秒长(原始 10 秒 + 扩展 5 秒)。
python
import os
import xai_sdk
client = xai_sdk.Client(api_key=os.getenv("XAI_API_KEY"))
response = client.video.extend(
prompt="The shot pans to an over the shoulder perspective. Calm controlled scene.",
model="grok-imagine-video",
video_url="<VIDEO_URL>",
duration=10,
)
print(response.url)python
import os
import time
import requests
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.environ['XAI_API_KEY']}",
}
response = requests.post(
"https://api.x.ai/v1/videos/extensions",
headers=headers,
json={
"model": "grok-imagine-video",
"prompt": "The shot pans to an over the shoulder perspective. Calm controlled scene.",
"duration": 10,
"video": {"url": "<VIDEO_URL>"},
},
)
request_id = response.json()["request_id"]
while True:
result = requests.get(
f"https://api.x.ai/v1/videos/{request_id}",
headers={"Authorization": headers["Authorization"]},
)
data = result.json()
if data["status"] == "done":
print(data["video"]["url"])
break
elif data["status"] in ("expired", "failed"):
print(f"Request {data['status']}")
break
time.sleep(5)javascript
import { xai } from "@ai-sdk/xai";
import { experimental_generateVideo as generateVideo } from "ai";
const source = await generateVideo({
model: xai.video("grok-imagine-video-1.5"),
prompt: "A cat sitting on a sunlit windowsill, tail gently swishing.",
duration: 5,
aspectRatio: "16:9",
providerOptions: {
xai: {
pollTimeoutMs: 600000,
},
},
});
const sourceUrl = source.providerMetadata?.xai?.videoUrl;
const extended = await generateVideo({
model: xai.video("grok-imagine-video"),
prompt: "The cat turns its head, notices a butterfly, and leaps off.",
duration: 6,
providerOptions: {
xai: {
mode: "extend-video",
videoUrl: sourceUrl,
pollTimeoutMs: 600000,
},
},
});
const extendedVideoUrl = extended.providerMetadata?.xai?.videoUrl;
console.log(extendedVideoUrl);bash
# Start the video extension request
REQUEST_ID=$(curl -s -X POST https://api.x.ai/v1/videos/extensions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $XAI_API_KEY" \
-d '{
"model": "grok-imagine-video",
"prompt": "The shot pans to an over the shoulder perspective. Calm controlled scene.",
"duration": 10,
"video": {"url": "<VIDEO_URL>"}
}' | jq -r '.request_id')
# Poll until the video is ready
while true; do
RESULT=$(curl -s https://api.x.ai/v1/videos/$REQUEST_ID \
-H "Authorization: Bearer $XAI_API_KEY")
STATUS=$(echo "$RESULT" | jq -r '.status')
if [ "$STATUS" = "done" ]; then
echo "$RESULT" | jq -r '.video.url'
break
elif [ "$STATUS" = "failed" ] || [ "$STATUS" = "expired" ]; then
echo "Request $STATUS"; echo "$RESULT" | jq .
break
fi
sleep 5
done视频编辑使用 /v1/videos/edits 端点和 Python SDK 中的 client.video.generate(video_url=...)。在 AI SDK 中,将 providerOptions.xai.mode 设置为 "edit-video" 或 "extend-video",并传递 providerOptions.xai.videoUrl。这两种流程都使用相同的异步轮询模式,AI SDK 在 providerMetadata.xai.videoUrl 中返回 xAI 托管的输出 URL。
相关主题
- 视频生成 — 根据文本提示生成视频
- 视频编辑 — 编辑现有视频
- 图生视频 — 使静态图像动起来
- API 参考 — 完整的端点文档
- Imagine API 着陆页 — Imagine API 实际应用展示