关于 aliyun-wan-videoedit
使用阿里云 `wan2.7-videoedit` 模型编辑视频的技能。支持风格迁移和按指令编辑,并通过异步任务提交与获取结果。
主要功能
- 01转换视频视觉风格
- 02根据文本指令编辑内容
- 03添加最多三张参考图
- 04设置输出分辨率和画面比例
- 05提交并轮询异步任务
适用场景
- 01将素材转换为动漫或黏土风格
- 02按文本指令修改片段
- 03使用参考图引导编辑
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ cinience/ alicloud-skills --skill aliyun-wan-videoedit安装后在 Claude Code 中输入/aliyun-wan-videoedit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api_reference.mdsources.mdscripts/edit_video.py详细介绍
Wan 2.7 视频编辑
验证
mkdir -p output/aliyun-wan-videoedit
python -m py_compile skills/ai/video/aliyun-wan-videoedit/scripts/edit_video.py && echo "py_compile_ok" > output/aliyun-wan-videoedit/validate.txt
通过标准:命令退出码为 0,且生成 output/aliyun-wan-videoedit/validate.txt。
输出与证据
- 将任务 ID、轮询响应和最终视频 URL 保存到
output/aliyun-wan-videoedit/。 - 至少保留一份端到端运行日志,以便排查问题。
前置条件
- 安装 SDK(建议在 venv 中安装):
python3 -m venv .venv
. .venv/bin/activate
python -m pip install dashscope
- 在环境中设置
DASHSCOPE_API_KEY,或将dashscope_api_key添加到~/.alibabacloud/credentials。
关键模型名称
wan2.7-videoedit— 支持风格迁移和基于指令的视频编辑
功能
| 功能 | 描述 | 所需媒体 |
|---|---|---|
| 风格迁移 | 将视频转换为不同的视觉风格(黏土、动漫等) | 仅需 video |
| 指令编辑 | 使用文本指令和可选的参考图像编辑视频内容 | video + 可选的 reference_image(最多 3 张) |
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
新加坡端点:将 dashscope.aliyuncs.com 替换为 dashscope-intl.aliyuncs.com。
规范化接口
请求
prompt(字符串,可选)— 最多 5000 个字符,用于描述所需的编辑效果negative_prompt(字符串,可选)— 最多 500 个字符media(数组,必需)— 包含type和url字段的媒体对象:type:video(必需,恰好 1 个)|reference_image(可选,最多 3 个)url:公开 URL(HTTP/HTTPS)或 OSS 临时 URL
resolution(字符串,可选)—720P或1080P(默认值:1080P)ratio(字符串,可选)— 输出宽高比:16:9、9:16、1:1、4:3、3:4。若省略,则沿用输入视频的宽高比。duration(整数,可选)— 将输入视频截断至此时长(秒),范围为 [2, 10]。默认值为0(使用输入视频时长)。audio_setting(字符串,可选)—auto(默认,由 AI 决定)或origin(保留原始音频)prompt_extend(布尔值,可选)— AI 提示词改写(默认值:true)watermark(布尔值,可选)— 添加“AI generated”水印(默认值:false)seed(整数,可选)— 范围为 [0, 2147483647]
媒体输入限制
视频(type=video):
- 格式:mp4、mov
- 时长:2-10s
- 分辨率:每边 [240, 4096] 像素
- 宽高比:1:8 至 8:1
- 最大尺寸:100MB
参考图像(type=reference_image):
- 格式:JPEG、JPG、PNG(不支持透明)、BMP、WEBP
- 分辨率:每边 [240, 8000] 像素
- 宽高比:1:8 至 8:1
- 最大尺寸:20MB
- 最多 3 张参考图像
分辨率输出表
| 分辨率 | 宽高比 | 输出(W*H) |
|---|---|---|
| 720P | 16:9 | 1280*720 |
| 720P | 9:16 | 720*1280 |
| 720P | 1:1 | 960*960 |
| 720P | 4:3 | 1104*832 |
| 720P | 3:4 | 832*1104 |
| 1080P | 16:9 | 1920*1080 |
| 1080P | 9:16 | 1080*1920 |
| 1080P | 1:1 | 1440*1440 |
| 1080P | 4:3 | 1648*1248 |
| 1080P | 3:4 | 1248*1648 |
响应(创建任务)
output.task_id(字符串)— 用于轮询,有效期为 24 小时output.task_status(字符串)— PENDING | RUNNING | SUCCEEDED | FAILED | CANCELEDrequest_id(字符串)
响应(任务结果)
output.video_url(字符串)— 编辑后的视频 URLusage.video_count(整数)usage.video_duration(整数)— 时长(秒)
快速开始(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_videoedit_task(req: dict) -> str:
"""Create a video editing task and return task_id."""
payload = {
"model": "wan2.7-videoedit",
"input": {
"prompt": req.get("prompt", ""),
"media": req["media"],
},
"parameters": {
"resolution": req.get("resolution", "1080P"),
"prompt_extend": req.get("prompt_extend", True),
"watermark": req.get("watermark", False),
},
}
if req.get("negative_prompt"):
payload["input"]["negative_prompt"] = req["negative_prompt"]
if req.get("ratio"):
payload["parameters"]["ratio"] = req["ratio"]
if req.get("duration"):
payload["parameters"]["duration"] = req["duration"]
if req.get("audio_setting"):
payload["parameters"]["audio_setting"] = req["audio_setting"]
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)
使用示例
# Style transfer — convert to clay style
media = [{"type": "video", "url": "https://example.com/input.mp4"}]
task_id = create_videoedit_task({
"prompt": "将整个画面转换为黏土风格",
"media": media,
"resolution": "720P",
})
# Instruction editing with reference image
media = [
{"type": "video", "url": "https://example.com/input.mp4"},
{"type": "reference_image", "url": "https://example.com/hat.jpg"},
]
task_id = create_videoedit_task({
"prompt": "为人物换上酷闪的衣服,再戴参考图里的帽子",
"media": media,
"audio_setting": "origin",
})
错误处理
| 错误 | 可能原因 | 处理方法 |
|---|---|---|
| 401/403 | 缺少或无效的 DASHSCOPE_API_KEY | 检查环境变量或凭据文件 |
400 InvalidParameter | 分辨率无效、缺少视频、参考图像过多 | 验证参数 |
| "does not support synchronous calls" | 缺少 X-DashScope-Async: enable 请求头 | 添加必需的请求头 |
| 429 | 速率限制或配额不足 | 退避后重试 |
输出位置
- 默认输出:
output/aliyun-wan-videoedit/videos/ - 使用
OUTPUT_DIR覆盖基础目录。
反模式
- 请勿使用
wan2.7-videoedit以外的模型名称。 - 请勿同步调用此 API——必须使用异步请求头。
- 视频最多只能传入 1 个,参考图像最多只能传入 3 张。
- 视频 URL 会在 24 小时后过期;请立即下载并持久化保存。
- 请勿使用此 API 生成视频——请改用
aliyun-wan-i2v。
工作流
- 确认用户意图:风格迁移或基于指令的编辑。
- 准备媒体数组,其中必须包含视频,参考图像为可选项。
- 创建异步任务并轮询结果。
- 在 URL 过期前下载并保存编辑后的视频。
参考资料
- 完整的 HTTP API 详情请参阅
references/api_reference.md。 - 源链接请参阅
references/sources.md。
评论
支持 Markdown