关于 aliyun-vidu-video
为需要生成视频的用户提供调用阿里云 Vidu 模型的技能,支持文本、图像、关键帧和参考素材生成,并通过异步任务获取结果。
主要功能
- 01文本生成视频
- 02单图生成视频
- 03首尾关键帧插值生成
- 04参考素材生成视频
- 05配置分辨率、时长和音轨
适用场景
- 01将文字描述转为视频
- 02让静态图片延展为视频
- 03根据首尾画面生成过渡视频
- 04将参考主体融入指定场景
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ cinience/ alicloud-skills --skill aliyun-vidu-video安装后在 Claude Code 中输入/aliyun-vidu-video确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api_reference.mdsources.mdscripts/generate_vidu_video.py详细介绍
Vidu 视频生成
验证
mkdir -p output/aliyun-vidu-video
python -m py_compile skills/ai/video/aliyun-vidu-video/scripts/generate_vidu_video.py && echo "py_compile_ok" > output/aliyun-vidu-video/validate.txt
通过标准:命令以 0 退出,并生成 output/aliyun-vidu-video/validate.txt。
输出与证据
- 将任务 ID、轮询响应和最终视频 URL 保存到
output/aliyun-vidu-video/。 - 至少保留一份端到端运行日志,以便排查问题。
前置条件
- 在环境中设置
DASHSCOPE_API_KEY(需要北京地域的密钥)。 - 地域:仅限中国大陆(北京)。模型、Endpoint URL 和 API Key 必须属于同一地域。
- 首次使用前,在 Alibaba Cloud Model Studio 控制台中启用 Vidu 模型。
关键模型名称
文本转视频
vidu/viduq3-pro_text2videovidu/viduq3-turbo_text2videovidu/viduq2_text2video
图像转视频(首帧)
vidu/viduq3-pro_img2videovidu/viduq3-turbo_img2videovidu/viduq2-pro_img2videovidu/viduq2-turbo_img2video
关键帧转视频(首帧 + 尾帧)
vidu/viduq3-pro_start-end2videovidu/viduq3-turbo_start-end2videovidu/viduq2-pro_start-end2videovidu/viduq2-turbo_start-end2video
参考图转视频
vidu/viduq2_reference2videovidu/viduq2-pro_reference2video
功能
| 功能 | 说明 | 模型后缀 | 必需输入 |
|---|---|---|---|
| 文本转视频 | 仅根据文本提示词生成视频 | _text2video | prompt |
| 图像转视频 | 根据单张图像和可选提示词生成视频 | _img2video | media[image] |
| 关键帧转视频 | 在首帧和尾帧图像之间插值生成视频 | _start-end2video | media[image x2] + prompt |
| 参考图转视频 | 将参考主体融入提示词描述的场景 | _reference2video | media[image 1-7] + prompt |
API 端点(仅异步)
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis
必需请求头:
Authorization: Bearer $DASHSCOPE_API_KEYContent-Type: application/jsonX-DashScope-Async: enable
统一接口
请求
model(string,必需)——上文列出的模型名称之一input.prompt(string)——最多 5000 个字符,用于描述所需的视频内容- 文本转视频、关键帧和参考图模式必需
- 图像转视频模式可选
input.media(array)——包含type和url字段的媒体对象(文本转视频模式不使用)type:image或videourl:公开 URL(HTTP/HTTPS)
parameters.resolution(string,可选)——540P、720P(默认)或1080Pparameters.size(string,可选)——像素尺寸width*height(例如1280*720)。具体取值取决于分辨率档位。文本转视频和参考图转视频支持指定尺寸。parameters.duration(integer,可选)——视频时长,单位为秒- Q3 模型:[1, 16],默认值为 5
- Q2 模型:[1, 10],默认值为 5
parameters.audio(boolean,可选)——生成音轨(仅限 Q3 模型,默认值为 false)parameters.watermark(boolean,可选)——添加“AI 生成”水印(默认值为 false)parameters.seed(integer,可选)——范围为 [0, 2147483647]
文本转视频各分辨率档位的尺寸
| 分辨率 | 宽高比 | 尺寸(width*height) |
|---|---|---|
| 540P | 16:9 | 960*528 |
| 540P | 9:16 | 528*960 |
| 540P | 1:1 | 720*720 |
| 540P | 4:3 | 816*608 |
| 540P | 3:4 | 608*816 |
| 720P | 16:9 | 1280*720 |
| 720P | 9:16 | 720*1280 |
| 720P | 1:1 | 960*960 |
| 720P | 4:3 | 1104*816 |
| 720P | 3:4 | 816*1104 |
| 1080P | 16:9 | 1920*1080 |
| 1080P | 9:16 | 1080*1920 |
| 1080P | 1:1 | 1440*1440 |
| 1080P | 4:3 | 1674*1238 |
| 1080P | 3:4 | 1238*1674 |
各分辨率档位的尺寸(参考视频生成)
| 分辨率 | 宽高比 | 尺寸(宽*高) |
|---|---|---|
| 540P | 16:9 | 960*540 |
| 540P | 9:16 | 540*960 |
| 540P | 1:1 | 540*540 |
| 540P | 4:3 | 720*540 |
| 540P | 3:4 | 540*720 |
| 720P | 16:9 | 1280*720 |
| 720P | 9:16 | 720*1280 |
| 720P | 1:1 | 720*720 |
| 720P | 4:3 | 960*720 |
| 720P | 3:4 | 720*960 |
| 1080P | 16:9 | 1920*1080 |
| 1080P | 9:16 | 1080*1920 |
| 1080P | 1:1 | 1080*1080 |
| 1080P | 4:3 | 1440*1080 |
| 1080P | 3:4 | 1080*1440 |
媒体输入限制
图像(type=image):
- 格式:JPG、PNG、WEBP
- 宽高比:1:4 至 4:1
- 最大尺寸:50MB
视频(type=video,仅限参考视频生成):
- 格式:mp4、avi、mov
- 分辨率:最低 128x128 像素
- 宽高比:1:4 至 4:1
- 时长:1-5s
- 最大尺寸:50MB
响应(创建任务)
output.task_id(string)——用于轮询,有效期为 24 小时output.task_status(string)——PENDING | RUNNING | SUCCEEDED | FAILED | CANCELED | UNKNOWNrequest_id(string)
响应(任务结果)
output.video_url(string)——生成的视频 URL(MP4、H.264),有效期为 24 小时output.orig_prompt(string)——原始提示词usage.duration(integer)——计费视频时长,单位为秒usage.output_video_duration(integer)——实际输出时长usage.size(string)——输出分辨率usage.fps(integer)——帧率(24)usage.audio(boolean)——是否生成了音频usage.SR(string)——分辨率档位
快速开始(Python + HTTP)
import os
import json
import time
import requests
API_KEY = os.getenv("DASHSCOPE_API_KEY")
BASE_URL = "https://dashscope.aliyuncs.com/api/v1"
def create_vidu_task(req: dict) -> str:
"""Create a Vidu video generation task and return task_id."""
payload = {
"model": req["model"],
"input": {},
"parameters": {
"resolution": req.get("resolution", "720P"),
"duration": req.get("duration", 5),
},
}
if req.get("prompt"):
payload["input"]["prompt"] = req["prompt"]
if req.get("media"):
payload["input"]["media"] = req["media"]
if req.get("size"):
payload["parameters"]["size"] = req["size"]
if req.get("audio") is not None:
payload["parameters"]["audio"] = req["audio"]
if req.get("watermark") is not None:
payload["parameters"]["watermark"] = req["watermark"]
if req.get("seed") is not None:
payload["parameters"]["seed"] = req["seed"]
resp = requests.post(
f"{BASE_URL}/services/aigc/video-generation/video-synthesis",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
},
json=payload,
)
resp.raise_for_status()
data = resp.json()
return data["output"]["task_id"]
def poll_task(task_id: str, interval: int = 15) -> dict:
"""Poll until task completes. Returns final response."""
while True:
resp = requests.get(
f"{BASE_URL}/tasks/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
resp.raise_for_status()
data = resp.json()
status = data["output"]["task_status"]
if status in ("SUCCEEDED", "FAILED", "CANCELED"):
return data
time.sleep(interval)
特定模式示例
# Text-to-video
task_id = create_vidu_task({
"model": "vidu/viduq3-turbo_text2video",
"prompt": "A cat running under moonlight",
"resolution": "540P",
"size": "960*528",
"duration": 5,
})
# Image-to-video (first frame)
task_id = create_vidu_task({
"model": "vidu/viduq3-pro_img2video",
"prompt": "Camera slowly pans upward",
"media": [{"type": "image", "url": "https://example.com/image.jpg"}],
"resolution": "720P",
"duration": 5,
})
# Keyframe-to-video (first + last frame)
task_id = create_vidu_task({
"model": "vidu/viduq3-turbo_start-end2video",
"prompt": "A cat jumps from windowsill to sofa",
"media": [
{"type": "image", "url": "https://example.com/first.png"},
{"type": "image", "url": "https://example.com/last.png"},
],
"resolution": "540P",
"duration": 5,
})
# Reference-to-video
task_id = create_vidu_task({
"model": "vidu/viduq2_reference2video",
"prompt": "Man playing guitar in a cafe",
"media": [
{"type": "image", "url": "https://example.com/ref1.jpg"},
{"type": "image", "url": "https://example.com/ref2.jpg"},
],
"resolution": "720P",
"size": "1280*720",
"duration": 5,
})
错误处理
| 错误 | 可能原因 | 操作 |
|---|---|---|
| 401/403 | 缺少或无效的 DASHSCOPE_API_KEY | 检查环境变量;确保使用北京区域的密钥 |
400 InvalidParameter | 不支持的分辨率/尺寸组合、时长无效或缺少媒体 | 根据尺寸表验证参数 |
| "does not support synchronous calls" | 缺少 X-DashScope-Async: enable 标头 | 添加必需的标头 |
| 429 | 速率限制或配额问题 | 采用退避策略重试 |
| 跨区域错误 | 模型和 API Key 来自不同区域 | 确保所有内容均使用北京区域 |
输出位置
- 默认输出:
output/aliyun-vidu-video/videos/ - 使用
OUTPUT_DIR覆盖基础目录。
反面做法
- 不要使用上文“关键模型名称”中未列出的模型名称。
- 不要同步调用此 API——必须使用异步标头。
- 使用参考视频生成时,不要省略
size——此模式必需此参数。 - 不要在 Q2 模型中传入
audio=true——只有 Q3 模型支持音频生成。 - 视频 URL 会在 24 小时后过期;请立即下载并持久化。
- 图生视频时,恰好提供 1 张图像。关键帧模式下,恰好提供 2 张图像(先首帧,再尾帧)。
- 使用
viduq2_reference2video进行参考视频生成时,仅接受图像(1-7 张)。使用viduq2-pro_reference2video时,接受图像(1-4 张)以及可选的视频(1-2 个)。 - 关键帧模式:首帧与尾帧的像素数之比必须在 0.8 到 1.25 之间。
工作流
- 确认用户意图:文生视频、图生视频、关键帧或参考视频生成。
- 根据功能和质量档位(Q3 pro/turbo 或 Q2)选择适当的模型名称。
- 准备输入:提示词和/或媒体数组,并确保类型正确且 URL 有效、可公开访问。
- 设置分辨率、尺寸和时长参数。
- 创建异步任务并轮询结果(建议间隔 15s)。
- 在 URL 过期前下载并保存生成的视频(24 小时)。
参考资料
- 完整的 HTTP API 详情请参阅
references/api_reference.md。 - 来源链接请参阅
references/sources.md。
评论
支持 Markdown