说明:本文在 AI 辅助下生成。参数、价格和代码来自作者所在平台的接入文档与服务端源码,耗时数据来自我们自己的受控测试,核对日期 2026-10-25。
做商品短片、课程片头或剧情类内容时,最常见的麻烦是镜头太短:很多视频模型单条只能出 5 到 10 秒,想要一段 20 秒以上的连贯画面就得多段拼接,人物和道具在接缝处很容易对不上。
Wan 3.0(万相 3.0)是阿里通义推出的全能视频生成模型:一个模型名同时覆盖文生视频、首帧和首尾帧图生视频、多素材「全能参考」以及文档生视频,原生单镜最长 30 秒、30fps,自带同步音轨。本文用 Python 和 curl 演示四种用法、提示词里怎么指代素材、轮询和回调怎么选,以及一批视频的费用怎么在提交前算清楚。
先说利益关系:下文的接口来自我们自己运营的 apimodels.app,示例代码取自它的 Wan 3.0 接入文档。
requests;或者直接用 curl。YOUR_API_KEY 占位。https://api.apimodels.app/v1/video/generations,POST 创建,GET 带 task_id 查询。视频生成是异步的:创建接口立刻返回 data.taskId,视频在后台生成,之后拿这个 ID 去查结果。
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-3.0-video",
"prompt": "A paper airplane gliding over a calm lake at sunrise, camera drifting alongside",
"resolution": "720P",
"ratio": "16:9",
"duration": 5
}'用 Python 创建并轮询,data.state 依次是 pending、processing,最后是 completed 或 failed:
import requests, time
API_KEY = "YOUR_API_KEY"
ENDPOINT = "https://api.apimodels.app/v1/video/generations"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
res = requests.post(ENDPOINT, headers=HEADERS, json={
"model": "wan-3.0-video",
"prompt": "A paper airplane gliding over a calm lake at sunrise",
"resolution": "720P", # 480P / 720P / 1080P
"ratio": "16:9", # adaptive(默认)/ 16:9 / 4:3 / 1:1 / 3:4 / 9:16
"duration": 5, # 2-30 秒;-1 表示让模型自己决定时长
})
task_id = res.json()["data"]["taskId"]
while True:
data = requests.get(f"{ENDPOINT}?task_id={task_id}", headers=HEADERS).json()["data"]
if data["state"] == "completed":
print("video:", data["resultUrls"][0])
break
if data["state"] == "failed":
print("failed:", data["failMsg"])
break
time.sleep(10)几个参数值得单独说:
true,输出带音轨;关掉不降价。true,会自动改写提示词。短提示词效果提升明显,但会多花时间;已经写好详细提示词时可以关掉。同一个模型名,按传入的素材决定用法:
prompt。first_frame_url,可再加 last_frame_url,图片严格作为第一帧和最后一帧。reference_image_urls(最多 10 张)、reference_video_urls(最多 5 段,合计不超过 15 秒)、reference_audio_urls(最多 5 段,合计不超过 15 秒)。file_url 传 PPTX、DOCX、XLSX、PDF、TXT、MD 等文档(50 页、100MB 以内),或 link_url 传一个无需登录的公开网页,两者二选一。文档生视频的请求最简单,把文件地址交给模型,画幅用默认的 adaptive,由模型按素材内容自己挑:
curl -X POST https://api.apimodels.app/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "wan-3.0-video",
"prompt": "A polished product launch film based on this deck",
"file_url": "https://example.com/launch-deck.pptx",
"resolution": "1080P",
"duration": 10
}'这种用法适合把产品发布会的幻灯片、活动方案直接变成一条预告片,省掉先写分镜脚本的步骤。文档本身不额外收费,只按输出秒数计。
首尾帧和参考类素材不能混用。混用时上游会判失败,这个接口在创建阶段就直接拒绝,返回的错误会写明冲突的两组字段:
first_frame / last_frame cannot be combined with reference_image_urls / reference_video_urls / reference_audio_urls / file_url / link_url — pick one input mode全能参考模式下,提示词按顺序指代素材,图、视频、音频各自独立编号。多个角色、道具和场景要在一条镜头里保持一致,靠的就是这种写法。下面是一个示例请求:
# 示例:人物来自参考视频,道具来自参考图
payload = {
"model": "wan-3.0-video",
"prompt": "视频1 里的人拿起 图1 的保温杯,走到 图2 的窗边,镜头缓慢推近,最后停在杯身的标志上",
"reference_video_urls": ["https://example.com/person.mp4"],
"reference_image_urls": ["https://example.com/cup.png", "https://example.com/window.jpg"],
"resolution": "720P",
"duration": 12,
}参考素材也可以直接传 base64 或 data URL,服务端会先转存成可访问的地址再交给模型。图片支持 JPEG、PNG(不支持透明通道)、BMP、WEBP,单边 240 到 8000 像素,单张不超过 20MB。
写长镜头时,建议按时间顺序描述画面和镜头运动:30 秒是一条连续镜头,不是几段拼接,提示词写成「先……然后……最后……」比堆砌形容词更容易得到连贯的结果。公开的《Wan3.0 视频创作者手册》收录了 60 多条带成片的提示词案例,覆盖文生、参考、文档生视频、编辑和延长,可以照着它的结构改写自己的提示词。
标准档出片以分钟计。我们用同一条提示词、同样参数(480P、9:16、5 秒、关音轨)背靠背测过两次:标准档 356 秒返回,mode: "prime" 高速档 58 秒返回。官方口径是两档能力一致,差别只在速度和单价。轮询建议 10 到 15 秒一次。
批量任务更适合用回调:创建时传 callback_url,任务结束后服务端主动 POST 通知,投递失败会重试,最多投递 3 次。回调地址必须公网可达,填内网或本机地址会在创建时被拒绝。注意结果地址在 data.resultJson 这个 JSON 字符串里,要先解析:
# 示例:Flask 接收回调
from flask import Flask, request
import json
app = Flask(__name__)
@app.post("/wan-callback")
def wan_callback():
data = request.get_json()["data"]
if data["state"] == "completed":
urls = json.loads(data["resultJson"])["resultUrls"]
print(data["taskId"], urls[0], "billed", data["credits"])
else:
print(data["taskId"], "failed:", data["failMsg"])
return "ok"回调里的 credits 是这一单的最终实扣金额(美元),失败为 0。事后对账也可以用任务 ID 单独查:
curl https://api.apimodels.app/v1/records/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"成片保存 30 天后自动删除,需要长期使用的要及时转存。
按秒计费,费用等于单价乘以计费秒数:
标准档 standard 480P $0.045/秒 720P $0.09/秒 1080P $0.18/秒
高速档 prime 480P $0.068/秒 720P $0.14/秒 1080P $0.28/秒计费秒数怎么算:
duration: -1 时先按 30 秒冻结额度,出片后按实际秒数结算,差额退回。标准档和高速档怎么选:两档的输入能力、30 秒上限和音轨都一样,高速档贵 51% 到 56%,换来约 6 倍的速度。需要用户在线等结果的交互式工具、反复调提示词的阶段用高速档;夜里跑的批量任务用标准档,多等几分钟不多花钱。
举个例子:100 条 720P、每条 10 秒的商品片,标准档是 100 × 10 × 0.09 = 90 美元,高速档是 140 美元。更省的做法是先用 480P、5 秒出草稿挑方向,100 条草稿 22.5 美元,选中的再用 720P 或 1080P 出终版。
apimodels.app 是一个多模型 API 网关:用一个 API key、一个 OpenAI 兼容端点调用图像、视频、语音和语言模型。Wan 3.0 和平台上的 Seedance、Kling、Veo 走同一个视频端点,换模型只改 model 字段。
稳定性方面,以下几点都能在服务端代码里对应到具体实现:
价格方面就是上面那张表:按秒计费,失败不扣费,每一单的实扣都能用任务 ID 查到。
不适合的情况也说清楚:需要原始码率母带的项目,超过 50MB 的成片会被压缩,不适合;已经开通了阿里云官方账号、只用万相一个模型、习惯按人民币结算的团队,直接调官方接口更省事;需要秒级响应的交互场景,标准档要几分钟,高速档也要接近一分钟,都不合适。
failMsg 提示时长超限:带参考视频时,输入视频总长加输出时长不能超过 30 秒。callback_url 公网可达,创建时如果被拒绝,错误里会说明是内网或本机地址。resolution,或者显式传了 1080P。你在用 Wan 3.0 做长镜头时,提示词按什么结构写效果最好?欢迎在评论区交流。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。