通义万相-图生视频API参考

通义万相-图生视频模型根据首帧图像和文本提示词,生成时长为5秒的无声视频。同时支持特效模板,可添加“魔法悬浮”、“气球膨胀”等效果,适用于创意视频制作、娱乐特效展示等场景。

快速入口:通义万相官网在线体验 新手HTTP调用入门指南

说明

通义万相官网的功能与API支持的能力可能存在差异,具体以API文档中列出的能力为准。如有新增功能,API文档会及时更新,敬请关注。

模型概览

模型效果示意

模型功能

输入示例

输出视频(5秒无声视频)

图生视频

输入提示词:一只猫在草地上奔跑

image

将图片作为视频的第一帧,再根据提示词生成视频

图生视频

(使用视频特效)

输入提示词:无需提示词

image

使用魔法悬浮特效(template设置为“flying”)

模型简介

图生视频模型是一款通用视频生成模型,支持基于首帧图像和文本生成无声视频,并提供 Prompt 智能改写视频水印等功能。

模型名称

模型简介

输出视频格式

wan2.2-i2v-flash 推荐

万相2.2极速版

极致生成速度,指令理解与运镜控制更准,画面元素保持一致,稳定性与成功率全面提升

分辨率档位:480P、720P

帧率:30fps

时长:5

wan2.2-i2v-plus 推荐

万相2.2专业版

指令理解更准,运镜可控,画面元素保持一致,稳定性与成功率全面提升,生成内容更丰富

分辨率档位:480P、1080P

帧率:30fps

时长:5

wanx2.1-i2v-plus

万相2.1专业版

复杂运动,物理规律还原,画面细腻

分辨率档位:720P

帧率:30fps

时长:5

wanx2.1-i2v-turbo

万相2.1极速版

复杂运动,物理规律还原,速度快

分辨率档位:480P、720P

帧率:30fps

时长:3、4、5

说明
  • 模型切换:最新万相2.2模型名称前缀为wan,往期模型为wanx。切换时请仔细核对,以免调用失败。

  • 模型耗时:万相2.2模型耗时约1~2分钟(往期模型通常 >2 分钟),推荐切换到最新模型。具体耗时受限于排队任务数量和服务执行情况,请在获取结果时耐心等待。

  • 视频特效模板:不同模型支持不同的特效模板。在调用前,请务必查阅视频特效列表,以免调用失败。

  • 模型计费:请参见计费与限流

前提条件

图生视频API支持通过HTTPDashScope SDK进行调用。

在调用前,您需要开通模型服务并获取API Key,再配置API Key到环境变量

如需通过SDK进行调用,请安装DashScope SDK。目前,该SDK已支持PythonJava。

HTTP调用

视频生成模型处理时间较长,为了避免请求超时,HTTP调用仅支持异步获取模型结果。您需要发起两个请求:

  1. 创建任务获取任务ID:首先发起创建任务请求,该请求会返回任务ID(task_id)。

  2. 根据任务ID查询结果:使用上一步获得的任务ID,查询任务状态及结果。任务成功执行时将返回视频URL,有效期24小时。

说明

创建任务后,该任务将被加入到排队队列,等待调度执行。后续需要调用“根据任务ID查询结果接口”获取任务状态及结果。

步骤1:创建任务获取任务ID

POST https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis

说明
  • 创建任务后,系统将立即返回一个 task_id。请步骤2中使用该 task_id 查询任务结果,有效期24小时。

  • 新手指引请参见HTTP调用入门指南

请求参数

图生视频

基于首帧图像和prompt生成视频。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.2-i2v-plus",
    "input": {
        "prompt": "一只猫在草地上奔跑",
        "img_url": "https://cdn.translate.alibaba.com/r/wanx-demo-1.png"
    },
    "parameters": {
        "resolution": "1080P",
        "prompt_extend": true
    }
}'

图生视频(Base64)

由于Base64编码后的字符串较长,请下载img_base64,并将文本内容全部复制到img_url参数中。

数据格式请参见传值方式

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.2-i2v-plus",
    "input": {
        "prompt": "一只猫在草地上奔跑",
        "img_url": "data:image/png;base64,GDU7MtCZzEbTbmRZ......"
    },
    "parameters": {
        "resolution": "1080P",
        "prompt_extend": true
    }
}'

图生视频(使用视频特效)

使用视频特效时,prompt字段无效,无需填写。

不同模型支持不同的特效模板。在调用前,请务必查阅视频特效列表,以免调用失败。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wanx2.1-i2v-turbo",
    "input": {
        "prompt": "",
        "img_url": "https://cdn.translate.alibaba.com/r/wanx-demo-1.png",
        "template": "flying"
    },
    "parameters": {
        "resolution": "720P"
    }
}'

图生视频(使用反向提示词)

基于首帧图像和prompt生成视频。同时,通过 negative_prompt 指定生成的视频避免出现“花朵”元素。

curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wanx2.1-i2v-turbo",
    "input": {
        "prompt": "一只猫在草地上奔跑",
        "negative_prompt": "花朵",
        "img_url": "https://cdn.translate.alibaba.com/r/wanx-demo-1.png"
    },
    "parameters": {
        "resolution": "720P",
        "prompt_extend": true
    }
}'
请求头(Headers)

Content-Type string (必选)

请求内容类型。此参数必须设置为application/json

Authorization string(必选)

请求身份认证。接口使用阿里云百炼API-Key进行身份认证。示例值:Bearer sk-xxxx。

X-DashScope-Async string (必选)

异步处理配置参数。HTTP请求只支持异步,必须设置为enable

请求体(Request Body)

model string (必选)

模型名称。示例值:wan2.2-i2v-plus。

input object (必选)

输入的基本信息,如提示词等。

属性

prompt string (可选)

文本提示词。支持中英文,长度不超过800个字符,每个汉字/字母占一个字符,超过部分会自动截断。

当使用视频特效参数(即template不为空)时,prompt参数无效,无需填写。

提示词技巧详见文生视频/图生视频Prompt指南

示例值:一只小猫在草地上奔跑。

negative_prompt string (可选)

反向提示词,用来描述不希望在视频画面中看到的内容,可以对视频画面进行限制。

支持中英文,长度不超过500个字符,超过部分会自动截断。

示例值:低分辨率、错误、最差质量、低质量、残缺、多余的手指、比例不良等。

img_url string (必选)

首帧图像的URL或 Base64 编码数据。

图像限制:

  • 图像格式:JPEG、JPG、PNG(不支持透明通道)、BMP、WEBP。

  • 图像分辨率:图像的宽度和高度范围为[360, 2000],单位为像素。

  • 文件大小:不超过10MB。

输入图像说明:

  1. 使用公网可访问URL

    • 支持 HTTP 或 HTTPS 协议。您也可在此获取临时公网URL

    • 示例值:https://cdn.translate.alibaba.com/r/wanx-demo-1.png

  2. 传入 Base64 编码图像后的字符串

    • 数据格式:data:{MIME_type};base64,{base64_data}

    • 示例值:data:image/png;base64,GDU7MtCZzEbTbmRZ......

    • 示例中的编码字符串不完整,仅做演示,更多内容请参见传值方式

template string (可选)

指定视频特效模板的名称。若未填写,则表示不使用任何视频特效。

当前支持的模板:squish(解压捏捏)、flying(魔法悬浮)、carousel(时光木马)等。

不同模型支持不同的特效模板。在调用前,请务必查阅视频特效列表,避免因模板不兼容而导致调用失败。

示例值:flying。

parameters object (可选)

视频处理参数,如指定输出视频的分辨率、视频时长等。

属性

resolution string (可选)

生成视频的分辨率档位。不同模型支持的分辨档位如下:

  • wan2.2-i2v-plus:可选值:480P、1080P。默认值为1080P

  • wan2.2-i2v-flash:可选值:480P、720P。默认值为720P

  • wanx2.1-i2v-plus:可选值:720P。默认值为720P

  • wanx2.1-i2v-turbo:可选值:480P、720P。默认值为720P

示例值:1080P。

说明:分辨率档位对生成视频的分辨率的影响

模型会尽量保持输出视频与输入图像的宽高比一致,在宽高比不变的基础上,将视频总像素调整到所选档位附近。

  • 480P:视频分辨率通常指 640×480(约 31万像素),视频宽高比为4:3。

  • 720P:视频分辨率通常指 1280×720(约 92万像素),视频宽高比为16:9。

  • 1080P:视频分辨率通常指 1920×1080(约 207万像素),视频宽高比为16:9。

示例:若输入图像的宽高比例为 4:5,且选择 480P 档位,则输出视频的宽高比会保持4:5,分辨率调整为接近 31万像素。例如,输出视频的分辨率为 480×600,总像素 28.8万(此数据仅做参考,以实际输出为准)。

duration integer (可选)

生成视频的时长,默认值为5,单位为秒。

  • wan2.2-i2v-plus:目前固定为5秒,且不支持修改。

  • wan2.2-i2v-flash:目前固定为5秒,且不支持修改。

  • wanx2.1-i2v-plus:目前固定为5秒,且不支持修改。

  • wanx2.1-i2v-turbo:可选值为3、45。

示例值:5。

prompt_extend bool (可选)

是否开启prompt智能改写。开启后使用大模型对输入prompt进行智能改写。对于较短的prompt生成效果提升明显,但会增加耗时。

  • true:默认值,开启智能改写。

  • false:不开启智能改写。

示例值:true。

seed integer (可选)

随机数种子,用于控制模型生成内容的随机性。取值范围为[0, 2147483647]

如果不提供,则算法自动生成一个随机数作为种子。如果希望生成内容保持相对稳定,可以使用相同的seed参数值。

示例值:12345。

watermark bool (可选)

是否添加水印标识,水印位于图片右下角,文案为“AI生成”。

  • false:默认值,不添加水印。

  • true:添加水印。

响应参数

成功响应

{
    "output": {
        "task_status": "PENDING",
        "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
    },
    "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
}

异常响应

模型调用失败,请参见错误信息进行解决。

{
    "code":"InvalidApiKey",
    "message":"Invalid API-key provided.",
    "request_id":"fb53c4ec-1c12-4fc4-a580-xxxxxx"
}

output object

任务输出信息。

属性

task_id string

任务ID。

task_status string

任务状态。

枚举值

  • PENDING:任务排队中

  • RUNNING:任务处理中

  • SUCCEEDED:任务执行成功

  • FAILED:任务执行失败

  • CANCELED:任务取消成功

  • UNKNOWN:任务不存在或状态未知

request_id string

请求唯一标识。可用于请求明细溯源和问题排查。

code string

请求失败的错误码。请求成功时不会返回此参数,详情请参见错误信息

message string

请求失败的详细信息。请求成功时不会返回此参数,详情请参见错误信息

步骤2:根据任务ID查询结果

GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}

说明
  • 万相2.2模型耗时约1~2分钟(往期模型通常 >2 分钟)。建议采用轮询机制,并设置合理的查询间隔(如 15 秒)来获取结果。

  • task_id 查询有效期为24小时,超时后将无法查询结果,系统将返回任务状态为UNKNOWN

  • 任务成功后返回的 video_url有效期为24小时,请及时下载并保存视频。

  • 此查询接口的默认QPS20。如需更高频次的查询或事件通知,请配置异步任务回调

  • 如需批量查询或取消任务,请参见管理异步任务

请求参数

查询任务结果

您需要将86ecf553-d340-4e21-xxxxxxxxx替换为真实的task_id。

curl -X GET https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
请求头(Headers)

Authorization string(必选)

请求身份认证。接口使用阿里云百炼API-Key进行身份认证。示例值:Bearer sk-xxxx。

URL路径参数(Path parameters)

task_id string(必选)

任务ID。

响应参数

任务执行成功

任务数据(如任务状态、视频URL等)仅保留24小时,超时后会被自动清除。请您务必及时保存生成的视频。

{
    "request_id": "4c87e22d-dfaf-95bb-aadc-xxxxxx",
    "output": {
        "task_id": "436310e6-5404-42ef-b875-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-07-27 21:05:15.212",
        "scheduled_time": "2025-07-27 21:05:15.232",
        "end_time": "2025-07-27 21:07:58.027",
        "video_url": "https://dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com/1d/xxx.mp4?Expires=xxxxxx",
        "orig_prompt": "一只猫在草地上奔跑",
        "actual_prompt": "一只白猫在草地上奔跑,尾巴高高扬起,步伐轻快。"
    },
    "usage": {
        "duration": 5,
        "video_count": 1,
        "SR": 1080
    }
}

任务执行失败

如果因为某种原因导致任务执行失败,任务状态将被设置为FAILED,并通过codemessage字段明确指示错误原因。请参见错误信息进行解决。

{
    "request_id": "e5d70b02-ebd3-98ce-9fe8-759d7d7b107d",
    "output": {
        "task_id": "86ecf553-d340-4e21-af6e-a0c6a421c010",
        "task_status": "FAILED",
        "code": "InvalidParameter",
        "message": "The size is not match xxxxxx"
    }
}

output object

任务输出信息。

属性

task_id string

任务ID。

task_status string

任务状态。

枚举值

  • PENDING:任务排队中

  • RUNNING:任务处理中

  • SUCCEEDED:任务执行成功

  • FAILED:任务执行失败

  • CANCELED:任务取消成功

  • UNKNOWN:任务不存在或状态未知

submit_time string

任务提交时间。

scheduled_time string

任务执行时间。

end_time string

任务完成时间。

video_url string

视频URL。可通过此URL下载视频。

orig_prompt string

原始的输入prompt。

actual_prompt string

开启prompt智能改写后实际使用的prompt。当不开启prompt智能改写时,该字段不会返回。

code string

请求失败的错误码。请求成功时不会返回此参数,详情请参见错误信息

message string

请求失败的详细信息。请求成功时不会返回此参数,详情请参见错误信息

usage object

输出信息统计。只对成功的结果计数。

属性

video_duration integer

生成视频的时长,单位秒。

video_count integer

生成视频的数量。

video_ratio string

生成视频的比例。当前仅当2.1模型返回该值,枚举值为standard。

SR integer

生成视频的画幅尺寸。当前仅当2.2模型返回该值,枚举值为1080、480。

request_id string

请求唯一标识。可用于请求明细溯源和问题排查。

DashScope SDK调用

请先确认已安装最新版DashScope SDK,否则可能导致运行报错。

DashScope SDK目前已支持PythonJava。

SDKHTTP接口的参数名基本一致,参数结构根据不同语言的SDK封装而定。参数说明可参考HTTP调用

由于视频模型处理时间较长,底层服务采用异步方式提供。SDK在上层进行了封装,支持同步、异步两种调用方式。

Python SDK调用

使用Python SDK处理图像文件时,支持以下三种方式输入图像。请根据您的场景选择其中一种即可。

  1. 公网 URL:公网可访问的图像 URL(HTTP/HTTPS)。您可在此获取临时公网URL

  2. Base64编码:传入Base64编码文件后的字符串,格式为data:{MIME_type};base64,{base64_data}

  3. 本地文件路径:支持传入文件的绝对路径和相对路径。请参考下表,传入正确的文件路径。

系统

传入的文件路径

示例(绝对路径)

示例(相对路径)

LinuxmacOS系统

file://{文件的绝对路径或相对路径}

file:///home/images/test.png

file://./images/test.png

Windows系统

file://D:/images/test.png

file://./images/test.png

示例代码

说明

在调用代码前,请确保已安装 DashScope Python SDK,同时推荐您升级至最新版本:pip install -U dashscope,详见安装SDK

同步调用

本示例展示同步调用方式,并支持三种图像输入方式:公网URL、Base64编码、本地文件路径。

请求示例
import base64
import os
from http import HTTPStatus
from dashscope import VideoSynthesis
import mimetypes

"""
环境要求:
    dashscope python SDK >= 1.23.8
安装/升级SDK:
    pip install -U dashscope
"""

# --- 准备工作:确保 API Key 已设置 ---
api_key = os.getenv("DASHSCOPE_API_KEY")

# --- 辅助函数:用于 Base64 编码 ---
# 格式为 data:{MIME_type};base64,{base64_data}
def encode_file(file_path):
    mime_type, _ = mimetypes.guess_type(file_path)
    if not mime_type or not mime_type.startswith("image/"):
        raise ValueError("不支持或无法识别的图像格式")
    with open(file_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    return f"data:{mime_type};base64,{encoded_string}"

"""
图像输入方式说明:
以下提供了三种图片输入方式,三选一即可

1. 使用公网URL - 适合已有公开可访问的图片
2. 使用本地文件 - 适合本地开发测试
3. 使用Base64编码 - 适合私有图片或需要加密传输的场景
"""

# 【方式一】使用公网可访问的图片URL
# 示例:使用一个公开的图片URL
img_url = "https://cdn.translate.alibaba.com/r/wanx-demo-1.png"

# 【方式二】使用本地文件(支持绝对路径和相对路径)
# 格式要求:file:// + 文件路径
# 示例(绝对路径):
# img_url = "file://" + "/path/to/your/img.png"    # Linux/macOS
# img_url = "file://" + "C:/path/to/your/img.png"  # Windows
# 示例(相对路径):
# img_url = "file://" + "./img.png"                # 相对当前执行文件的路径

# 【方式三】使用Base64编码的图片
# img_url = encode_file("./img.png")

def sample_call_i2v():
    # 同步调用,直接返回结果
    print('please wait...')
    rsp = VideoSynthesis.call(api_key=api_key,
                              model='wan2.2-i2v-plus',
                              prompt='一只猫在草地上奔跑',
                              resolution="1080P",
                              img_url=img_url)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print("video_url:", rsp.output.video_url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


if __name__ == '__main__':
    sample_call_i2v()
响应示例
video_url 有效期24小时,请及时下载视频。
{
    "status_code": 200,
    "request_id": "a77bde74-d20a-97cb-8384-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "66ca2804-1e64-468f-b554-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com/xxx.mp4?xxxxxx",
        "submit_time": "2025-07-27 21:15:19.582",
        "scheduled_time": "2025-07-27 21:15:19.613",
        "end_time": "2025-07-27 21:18:00.047",
        "orig_prompt": "一只猫在草地上奔跑",
        "actual_prompt": "一只白猫在草地上奔跑,尾巴高高扬起,步伐轻快。"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 0,
        "video_ratio": "",
        "duration": 5,
        "SR": 1080
    }
}

异步调用

本示例仅展示异步调用方式。

请求示例
import os
from http import HTTPStatus
from dashscope import VideoSynthesis

"""
环境要求:
    dashscope python SDK >= 1.23.1
安装/升级SDK:
    pip install -U dashscope
"""

# 从环境变量中获取 DashScope API Key(即阿里云百炼平台 API key)
api_key = os.getenv("DASHSCOPE_API_KEY")

# 使用公网可访问的图片URL
img_url = "https://cdn.translate.alibaba.com/r/wanx-demo-1.png"


def sample_async_call_i2v():
    # 异步调用,返回一个task_id
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model='wan2.2-i2v-plus',
                                    prompt='一只猫在草地上奔跑',
                                    resolution="1080P",
                                    img_url=img_url)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print("task_id: %s" % rsp.output.task_id)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

    # 获取异步任务信息
    status = VideoSynthesis.fetch(rsp)
    if status.status_code == HTTPStatus.OK:
        print(status.output.task_status)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (status.status_code, status.code, status.message))

    # 等待异步任务结束
    rsp = VideoSynthesis.wait(rsp)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.video_url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


if __name__ == '__main__':
    sample_async_call_i2v()
响应示例

1、创建任务的响应示例

{
    "status_code": 200,
    "request_id": "6dc3bf6c-be18-9268-9c27-xxxxxx",
    "code": "",
    "message": "",
    "output": {
        "task_id": "686391d9-7ecf-4290-a8e9-xxxxxx",
        "task_status": "PENDING",
        "video_url": ""
    },
    "usage": null
}

2、查询任务结果的响应示例

video_url 有效期24小时,请及时下载视频。
{
    "status_code": 200,
    "request_id": "a77bde74-d20a-97cb-8384-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "66ca2804-1e64-468f-b554-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com/xxx.mp4?xxxxxx",
        "submit_time": "2025-07-27 21:15:19.582",
        "scheduled_time": "2025-07-27 21:15:19.613",
        "end_time": "2025-07-27 21:18:00.047",
        "orig_prompt": "一只猫在草地上奔跑",
        "actual_prompt": "一只白猫在草地上奔跑,尾巴高高扬起,步伐轻快。"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 0,
        "video_ratio": "",
        "duration": 5,
        "SR": 1080
    }
}

Java SDK调用

使用Java SDK处理图像文件时,支持以下三种方式输入图像。请根据您的场景选择其中一种即可。

  1. 公网 URL:公网可访问的图像 URL(HTTP/HTTPS)。您可在此获取临时公网URL

  2. Base 64编码:传入Base64编码文件后的字符串,格式为data:{MIME_type};base64,{base64_data}

  3. 本地文件路径:仅支持传入文件的绝对路径。请参考下表,传入正确的文件路径。

系统

传入的文件路径

示例

LinuxmacOS系统

file://{文件的绝对路径}

file:///home/images/test.png

Windows系统

file:///{文件的绝对路径}

file:///D:/images/test.png

示例代码

说明

在调用代码前,请确保已安装 DashScope Java SDK。推荐您升级至最新版本,详见安装SDK

同步调用

本示例展示同步调用方式,并支持三种图像输入方式:公网URL、Base64编码、本地文件路径。

请求示例
// Copyright (c) Alibaba, Inc. and its affiliates.

import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;

/**
 * 环境要求
 *      dashscope java SDK >= 2.20.9
 * 更新maven依赖:
 *      https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
 */
 
public class Image2Video {

     // 从环境变量中获取 DashScope API Key(即阿里云百炼平台 API key)
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");
    
    /**
     * 图像输入方式说明:三选一即可
     *
     * 1. 使用公网URL - 适合已有公开可访问的图片
     * 2. 使用本地文件 - 适合本地开发测试
     * 3. 使用Base64编码 - 适合私有图片或需要加密传输的场景
     */

    //【方式一】公网URL
    static String imgUrl = "https://cdn.translate.alibaba.com/r/wanx-demo-1.png";

    //【方式二】本地文件路径(file://+绝对路径)
    // static String imgUrl = "file://" + "/your/path/to/img.png";    // Linux/macOS
    // static String imgUrl = "file://" + "C:/your/path/to/img.png";  // Windows

    //【方式三】Base64编码
    // static String imgUrl = Image2Video.encodeFile("/your/path/to/img.png");

    public static void image2video() throws ApiException, NoApiKeyException, InputRequiredException {
        // 设置parameters参数
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);

        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-i2v-plus")
                        .prompt("一只猫在草地上奔跑")
                        .imgUrl(imgUrl)
                        .parameters(parameters)
                        .resolution("1080P")
                        .build();
        System.out.println("please wait...");
        VideoSynthesisResult result = vs.call(param);
        System.out.println(JsonUtils.toJson(result));
    }
    
     /**
     * 将文件编码为Base64字符串
     * @param filePath 文件路径
     * @return Base64字符串,格式为 data:{MIME_type};base64,{base64_data}
     */
    public static String encodeFile(String filePath) {
        Path path = Paths.get(filePath);
        if (!Files.exists(path)) {
            throw new IllegalArgumentException("文件不存在: " + filePath);
        }
        // 检测MIME类型
        String mimeType = null;
        try {
            mimeType = Files.probeContentType(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("无法检测文件类型: " + filePath);
        }
        if (mimeType == null || !mimeType.startsWith("image/")) {
            throw new IllegalArgumentException("不支持或无法识别的图像格式");
        }
        // 读取文件内容并编码
        byte[] fileBytes = null;
        try{
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("无法读取文件内容: " + filePath);
        }
    
        String encodedString = Base64.getEncoder().encodeToString(fileBytes);
        return "data:" + mimeType + ";base64," + encodedString;
    }
    

    public static void main(String[] args) {
        try {
            image2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
响应示例
video_url 有效期24小时,请及时下载视频。
{
    "request_id": "3171aa20-c479-9dc2-ae55-xxxxxx",
    "output": {
        "task_id": "8b61b356-45ad-45f3-9be2-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?xxxxxx"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

异步调用

本示例仅展示异步调用方式。

请求示例
// Copyright (c) Alibaba, Inc. and its affiliates.

import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesis;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisListResult;
import com.alibaba.dashscope.aigc.imagesynthesis.ImageSynthesisResult;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.task.AsyncTaskListParam;
import com.alibaba.dashscope.utils.JsonUtils;

import java.util.HashMap;
import java.util.Map;

/**
 * 环境要求
 *      dashscope java SDK >= 2.20.1
 * 更新maven依赖:
 *      https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
 */

public class Image2Video {

    // 从环境变量中获取 DashScope API Key(即阿里云百炼平台 API key)
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    static String imgUrl = "https://cdn.translate.alibaba.com/r/wanx-demo-1.png";

    public static void image2video() throws ApiException, NoApiKeyException, InputRequiredException {
        // 设置parameters参数
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);

        VideoSynthesis vs = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-i2v-plus")
                        .prompt("一只猫在草地上奔跑")
                        .imgUrl(imgUrl)
                        .parameters(parameters)
                        .resolution("1080P")
                        .build();
        // 异步调用
        VideoSynthesisResult task = vs.asyncCall(param);
        System.out.println(JsonUtils.toJson(task));
        System.out.println("please wait...");

        //获取结果
        VideoSynthesisResult result = vs.wait(task, apiKey);
        System.out.println(JsonUtils.toJson(result));
    }

    // 获取任务列表
    public static void listTask() throws ApiException, NoApiKeyException {
        ImageSynthesis is = new ImageSynthesis();
        AsyncTaskListParam param = AsyncTaskListParam.builder().build();
        ImageSynthesisListResult result = is.list(param);
        System.out.println(result);
    }

    // 获取单个任务结果
    public void fetchTask(String taskId) throws ApiException, NoApiKeyException {
        ImageSynthesis is = new ImageSynthesis();
        // 如果已设置 DASHSCOPE_API_KEY 为环境变量,apiKey 可为空。
        ImageSynthesisResult result = is.fetch(taskId, null);
        System.out.println(result.getOutput());
        System.out.println(result.getUsage());
    }

    public static void main(String[] args) {
        try {
            image2video();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
响应示例

1、创建任务的响应示例

{
    "request_id": "5dbf9dc5-4f4c-9605-85ea-xxxxxxxx",
    "output": {
        "task_id": "7277e20e-aa01-4709-xxxxxxxx",
        "task_status": "PENDING"
    }
}

2、查询任务结果的响应示例

video_url 有效期24小时,请及时下载视频。
{
    "request_id": "3d740fc4-a968-9c36-b0e7-xxxxxxxx",
    "output": {
        "task_id": "34dcf4b0-ed84-441e-91cb-xxxxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com/xxx.mp4?xxxxxx"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

错误码

如果模型调用失败并返回报错信息,请参见错误信息进行解决。

API还有特定状态码,具体如下所示。

HTTP状态码

接口错误码(code)

接口错误信息(message)

含义说明

400

InvalidParameter

InvalidParameter

请求参数不合法。

400

IPInfringementSuspect

Input data is suspected of being involved in IP infringement.

输入数据(如提示词或图像)涉嫌知识产权侵权。请检查输入,确保不包含引发侵权风险的内容。

400

DataInspectionFailed

Input data may contain inappropriate content.

输入数据(如提示词或图像)可能包含敏感内容。请修改输入后重试。

500

InternalError

InternalError

服务异常。请先尝试重试,排除偶发情况。

计费与限流

  • 计费方式按成功生成的视频时长计费,按秒计费。模型调用失败或处理错误不产生任何费用。

  • 付费顺序:优先消耗免费额度。额度用尽后,自动转为按量付费

  • 共享额度:阿里云主账号与其下的RAM子账号共享同一个免费额度、限流。

  • 付费方式:由阿里云主账号统一付费。RAM子账号不能独立计量计费,必须由所属的主账号付费。如果您需要查询账单信息,请前往阿里云控制台账单概览

  • 充值途径:您可以在阿里云控制台费用与成本页面进行充值。

  • 模型调用情况:您可以前往阿里云百炼的模型观测查看模型调用量及调用次数。

模型名称

计费单价

限流(主账号与RAM子账号共用)

免费额度(查看)

有效期:阿里云百炼开通后180天内

任务下发接口QPS限制

同时处理中任务数量

wan2.2-i2v-flash

480P:0.10元/秒

720P:0.20元/秒

2

2

50

wan2.2-i2v-plus

480P:0.14元/秒

1080P:0.70元/秒

2

2

50

wanx2.1-i2v-turbo

480P:0.24元/秒

720P:0.24元/秒

2

2

200

wanx2.1-i2v-plus

720P:0.70元/秒

2

2

200

计费示例

模型名称

分辨率档位

计费单价(元/秒)

视频时长(秒)

视频价格(元/个)

wan2.2-i2v-flash

480P

0.10

5

0.5

720P

0.20

5

1.0

wan2.2-i2v-plus

480P

0.14

5

0.7

1080P

0.70

5

3.5

wanx2.1-i2v-turbo

480P

0.24

5

1.2

720P

0.24

5

wanx2.1-i2v-plus

720P

0.70

5

3.5

输入图像说明

传值方式

图生视频API的输入图像指的是首帧图像。输入图像支持多种字符串格式,不同调用方式的支持情况如下表所示。

调用方式

HTTP

Python SDK

Java SDK

输入图像方式

  • 公网URL

  • Base 64编码

  • 公网URL

  • Base 64编码

  • 本地文件路径

  • 公网URL

  • Base 64编码

  • 本地文件路径

方式一:使用公网URL

  • 提供一个公网可访问的图像地址,支持 HTTP 或 HTTPS 协议。请在此获取临时公网URL

  • 示例值:https://xxxx/img.png

方式二:使用Base 64编码

将本地图片文件转换为 Base64 格式的字符串,并根据data:{MIME_type};base64,{base64_data}格式拼接成完整的字符串。

  • 转换代码请参见示例代码

  • {MIME_type}:图像的媒体类型,需与文件格式对应。

  • {base64_data}:图像文件经过 Base64 编码后的完整数据字符串。

  • MIME 类型对应关系:

    图像格式

    MIME Type

    JPEG

    image/jpeg

    JPG

    image/jpeg

    PNG

    image/png

    BMP

    image/bmp

    WEBP

    image/webp

  • 示例值"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABDg......"

    注意:为便于展示,上述 Base64 字符串是截断的。在实际使用中,请务必传入完整的编码字符串。

方式三:本地文件路径

  • HTTP调用不支持本地文件路径,仅Python SDKJava SDK支持。

  • 关于本地文件路径的传入规则,请参见Python SDK调用Java SDK调用

视频访问配置

配置域名白名单:确保业务系统可访问视频链接

模型生成的视频存储于阿里云OSS,每个视频会被分配一个OSS链接,如https://dashscope-result-xx.oss-cn-xxxx.aliyuncs.com/xxx.mp4。OSS链接允许公开访问,您可以使用此链接下载视频,链接仅在 24 小时内有效。

特别注意的是,如果您的业务对安全性要求较高,无法访问阿里云OSS链接,您需要单独配置外网访问白名单。请将以下域名添加到您的白名单中,以便顺利访问视频链接。

# OSS域名列表
dashscope-result-bj.oss-cn-beijing.aliyuncs.com
dashscope-result-hz.oss-cn-hangzhou.aliyuncs.com
dashscope-result-sh.oss-cn-shanghai.aliyuncs.com
dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com
dashscope-result-zjk.oss-cn-zhangjiakou.aliyuncs.com
dashscope-result-sz.oss-cn-shenzhen.aliyuncs.com
dashscope-result-hy.oss-cn-heyuan.aliyuncs.com
dashscope-result-cd.oss-cn-chengdu.aliyuncs.com
dashscope-result-gz.oss-cn-guangzhou.aliyuncs.com
dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com

常见问题

plus 模型是否支持输出 480P 的视频?

不同模型支持的视频分辨率档位如下所示,请按需选择模型。

  • wan2.2-i2v-plus:480P、1080P。

  • wanx2.1-i2v-turbo:480P、720P。

  • wanx2.1-i2v-plus:720P。