电商视频裂变是一套面向商品内容生产的 AI 视频服务,覆盖视频理解、元素替换、质量校验和结果交付。产品聚焦商品与人物一致性、细节还原、转化表达和规模化生产,支持基于爆款视频母版定向替换商品或人物,在保留原有动作、镜头节奏和营销结构的基础上,快速生成多版本内容,降低拍摄、剪辑和适配成本。
适用场景
视频素材裂变:以已有电商视频作为母版,仅替换视频中指定的商品或人物,尽量保留原视频的镜头、节奏和营销表达。适用于多 SKU、多模特、多区域和多版本素材生产。
商品上新,快速生成素材:针对集中上新的商品,减少真人拍摄、摄影棚、后期剪辑和重复制作环节,快速铺设新商品视频素材,帮助商家缩短从看到爆款视频到拆解脚本、拍摄新内容的上线周期。
商品讲解与卖点表达:适用于服饰、美妆个护、食品饮料、家居日用、3C 数码、小家电等商品。可根据原视频的卖点规划讲解结构、展示动作和镜头节奏,裂变生成适合新商品转化的讲解视频。
多卖点、多版本测试:围绕不同商品卖点、人群、话术、镜头和视觉风格快速生成多个版本,支持商家开展内容测试和投放素材迭代。
产品能力介绍
核心能力
支持两种替换模式:
商品替换(
product_replacement):保留原视频主播身份、动作、场景和卖货结构,将原商品替换为目标商品。人物替换(
person_replacement):保留原视频商品、动作、场景和卖货结构,将出镜人物替换为参考图或描述中的目标人物。
支持两种生成模式:
参考生成(
reference): 1:1复刻,将原视频作为完整参考,自动生成与原视频时长一致的新视频,保留原有脚本、分镜、动作、场景和节奏,仅对人物或商品等指定内容进行定向替换。拆解生成(
rebuild):拆解原视频的脚本、分镜和关键元素,仅保留指定的人物或商品等核心内容,再重新设计并生成一条新视频;不受原视频时长限制,支持输入目标时长(duration)。
全自动端到端生成,零 Prompt 门槛:仅需传入参考视频与目标商品图/人物图,系统自动完成视频理解、脚本规划、分镜设计、首帧生成、视频合成全流程。
商品理解与信息结构化:识别商品类别、外观、材质、颜色、结构和关键部件,并结合商家提供的标题、属性和卖点生成可用的视频表达信息。
母版视频元素替换:支持在授权范围内替换商品或人物,并定义替换范围与保护范围,减少非目标区域变化。
商品主体一致性:在不同镜头、角度、动作和场景中尽量保持商品的形态、颜色、纹理、图案、包装和标识稳定。
商品保真:多轮 VL 质检在全程锁定商品状态(颜色、纹理、结构、印花),防止商品特征漂移。
卖点脚本与分镜复刻:根据原视频的卖点规划、视频结构、镜头顺序、展示动作、口播内容和收尾方式。
商拍模特适配:支持根据商品风格、版型、目标人群和市场需求匹配相应模特形象及展示方式。
质量校验与结果反馈:对商品主体、人物、服饰、文字、画z面完整性、声音和整体可用性进行多维检查,并输出可供人工复核的结果信息。
Action:EcomVideoRecreation(提交任务)
提交视频裂变任务,异步返回任务 ID。
请求参数
顶层参数位于请求 Body,序列化方式为 JSON。
名称 | 类型 | 必填 | 说明 | 示例 |
Input | object | 是 | 视频裂变输入参数 | — |
Output | object | 否 | 成片输出规格 | — |
Input
名称 | 类型 | 必填 | 说明 | 示例 |
Mode | string | 否 | 替换模式。取值: |
|
RecreateMode | string | 否 | 生成方式。默认 |
|
SourceVideoUrl | string | 是 | 参考视频 HTTP(S) URL,时长范围 2~360 秒。须在任务执行期间保持可访问,建议有效期不少于 24 小时 |
|
ProductImageUrls | array[string] | 否 | 商品替换时必填,目标商品图 URL,同一SKU可上传1-8张图片。建议主体清晰、无遮挡、背景干净 |
|
ProductInfo | object | 否 | 目标商品信息,建议填写以提升口播准确度 | — |
ProductInfo.Title | string | 否 | 商品替换时必填,需提供目标替换的商品名称,最多 200 字符 |
|
ProductInfo.Category | string | 否 | 商品类目 |
|
ProductInfo.Detail | string | 否 | 商品真实信息(SKU、品牌、颜色、材质、尺寸、规格、Logo 和使用方式等),用于约束口播事实 |
|
PersonReferenceImageUrls | array[string] | 否 | 人物替换时的目标人物参考图 URL,1~5 张,须为同一人物。建议按面部特写、正面、45°、侧面、背面顺序排列 |
|
ChangeDescription | string | 否 | 人物替换目标人物描述或补充约束,1~500 字符。未提供 |
|
Output
名称 | 类型 | 必填 | 说明 | 取值/示例 |
Quality | string | 否 | 输出清晰度,默认 |
|
Ratio | string | 否 | 输出画幅,默认 |
|
Duration | integer | 否 | 目标时长(秒)。reference 模式忽略传入值并强制为 -1,跟随原视频时长;rebuild 模式下可传 5~60 的整数秒,也可传-1,代表自动时长 |
|
说明:Output.Quality入参为小写(720p),返回的UsageMap.Resolution为大写(720P)。
模式校验
Mode | 说明 | 提交校验 |
product_replacement | 商品替换 | SourceVideoUrl 必须有效;ProductImageUrls 同一sku支持传入1-8张图;reference 模式忽略 Duration 并强制为 -1,跟随原视频时长;rebuild 模式下 Duration 可省略、传-1,或传 5~60 的整数秒。 |
person_replacement | 人物替换 | SourceVideoUrl 必须有效;参考图可省略。提供时必须为 1~5 张同一目标人物图片;省略时必须提供 ChangeDescription,人物身份按描述生成;reference 模式忽略 Duration 并强制为 -1,跟随原视频时长;rebuild 模式下 Duration 可省略或传 5~60 的整数秒。 |
所有 URL 必须在任务执行期间保持可访问,建议有效期不少于 24 小时。建议提供主体清晰、无遮挡、背景干净的商品图和人物参考图。
商品替换请求示例
{
"Input": {
"Mode": "product_replacement",
"RecreateMode": "reference",
"SourceVideoUrl": "https://cdn.kehui.design/test/case5_1786428248431.mp4",
"ProductImageUrls": [
"https://cdn.kehui.design/test/case5_1786428248431.png"
],
"ProductInfo": {
"Title": "淡月黄凉感防晒衣",
"Category": "女装/防晒衣",
"Detail": "商品图展示淡月黄色、凉感面料、防晒至手背和 UPF50+ 标识。"
}
},
"Output": {
"Quality": "720p",
"Ratio": "9:16",
"Duration": -1
}
}reference 模式下 Output.Duration 无效,系统强制使用 -1 并跟随原视频时长;只有 rebuild 模式会使用显式时长:可传 5~60 的整数秒,传 -1 或不传时由系统自动决定 。
人物替换(有参考图)请求示例
{
"Input": {
"Mode": "person_replacement",
"RecreateMode": "reference",
"SourceVideoUrl": "https://cdn.kehui.design/test/case5_1786428248431.mp4",
"PersonReferenceImageUrls": [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260408/sjuytr/wan-r2v-object-girl.jpg"
],
"ChangeDescription": "人物身份以参考图为准,其他未指定特征继承原视频"
},
"Output": {
"Quality": "1080p",
"Ratio": "9:16"
}
}人物替换(无参考图)请求示例
如果不提供人物参考图,只需删除 PersonReferenceImageUrls,并把目标人物写入 ChangeDescription:
{
"Input": {
"Mode": "person_replacement",
"RecreateMode": "reference",
"SourceVideoUrl": "https://cdn.kehui.design/test/case5_1786428248431.mp4",
"ChangeDescription": "目标人物为一名成年男性,身材高挑匀称,保留原片服装、动作和场景"
},
"Output": {
"Quality": "720p",
"Ratio": "9:16"
}
}此时 Adapter 只创建唯一的 video asset,不创建 image asset;目标人物由 context.change_description 驱动。该模式可以执行,但不保证生成的人物与某个固定目标身份一致。
提交成功响应
{
"RequestId": "70CBEFDF-BB17-1EB3-8A21-569F3124738F",
"Code": "success",
"Success": true,
"Message": "Task submitted",
"Data": {
"TaskId": "task_778fa8bd21804828a5d147050e30edac"
}
}提交失败响应
{
"RequestId": "70CBEFDF-BB17-1EB3-8A21-569F3124738F",
"Code": "INVALID_PARAMETER",
"Success": false,
"Message": "Mode=product_replacement 时必须且只能提供 1 张 Input.ProductImageUrls",
"Data": null
}返回参数
名称 | 类型 | 说明 | 示例 |
RequestId | string | 请求 ID,用于识别唯一一次调用 |
|
Code | string | 结果码。 |
|
Success | boolean | 提交是否成功 |
|
Message | string | 返回信息,失败时返回错误说明 |
|
Data.TaskId | string | 异步任务 ID,用于后续轮询 |
|
返回示例
成功:
{
"RequestId": "70CBEFDF-BB17-1EB3-8A21-569F3124738F",
"Code": "success",
"Success": true,
"Message": "Task submitted",
"Data": {
"TaskId": "task_778fa8bd21804828a5d147050e30edac"
}
}
失败:
{
"RequestId": "70CBEFDF-BB17-1EB3-8A21-569F3124738F",
"Code": "INVALID_PARAMETER",
"Success": false,
"Message": "Mode=product_replacement 时必须且只能提供 1 张 Input.ProductImageUrls",
"Data": null
}
Action:QueryAsyncTaskResult(查询结果)
使用 EcomVideoRecreation 返回的 TaskId 查询任务状态与生成结果。
请求参数
名称 | 位置 | 类型 | 必填 | 说明 | 示例 |
TaskId | Query | string | 是 |
|
|
返回参数
名称 | 类型 | 说明 | 示例 |
RequestId | string | 请求 ID |
|
Code | string | 结果码。 |
|
Success | boolean | 本次查询请求是否成功 |
|
Message | string | 返回信息 |
|
Data.TaskId | string | 异步任务 ID |
|
Data.Status | string | 任务状态,取值见下表 |
|
Data.Result | string | JSON 字符串。完成后包含 | — |
Data.UsageMap | object | 计量用量信息; | — |
任务状态(Data.Status):
取值 | 说明 |
| 任务执行中,继续轮询 |
| 任务成功完成,解析 |
| 任务失败,解析 |
| 任务已取消 |
| 任务超时 |
Data.Result 字段(Status=COMPLETED):
名称 | 类型 | 说明 |
VideoUrl | string | 生成视频的下载地址(可能为带有效期的签名 URL,请及时下载或转存) |
Duration | number | 视频实际时长,单位秒 |
Data.Result 字段(Status=FAILED):
名称 | 类型 | 说明 |
ErrorCode | string | 错误码 |
ErrorMessage | string | 错误说明 |
返回示例
执行中:
{
"RequestId": "CE7F2B64-4E5C-4C69-A437-75A4C9E5C079",
"Code": "success",
"Success": true,
"Message": "Success",
"Data": {
"TaskId": "task_778fa8bd21804828a5d147050e30edac",
"Status": "IN_PROGRESS",
"Result": ""
}
}
成功完成:
{
"RequestId": "CE7F2B64-4E5C-4C69-A437-75A4C9E5C079",
"Code": "success",
"Success": true,
"Message": "Success",
"Data": {
"TaskId": "task_778fa8bd21804828a5d147050e30edac",
"Status": "COMPLETED",
"Result": "{\"VideoUrl\":\"https://example.com/artifacts/final.mp4?Expires=...\",\"Duration\":29}",
"UsageMap": {
"Resolution": "720P",
"Duration": 29
}
}
}
失败:
{
"RequestId": "CE7F2B64-4E5C-4C69-A437-75A4C9E5C079",
"Code": "success",
"Success": true,
"Message": "Success",
"Data": {
"TaskId": "task_778fa8bd21804828a5d147050e30edac",
"Status": "FAILED",
"Result": "{\"ErrorCode\":\"GENERATION_FAILED\",\"ErrorMessage\":\"视频生成失败,请检查输入图片是否清晰、是否与商品信息一致\"}",
"UsageMap": {
"Resolution": "",
"Duration": ""
}
}
}
错误码
HTTP 状态码 | 错误码 | 错误信息 | 描述 |
400 |
| 参数不合法,详见 Message | 请求参数校验失败,根据 Message 修正后重试 |
404 |
| TaskId 不存在 | 传入的 TaskId 无效或已过期 |
404 |
| 素材 URL 不可访问 | 检查素材 URL 是否在有效期内且可公网访问 |
500 |
| 服务内部错误 | 服务端异常,可稍后重试 |
200 |
| 成片无法导出 | 任务执行完成但视频导出失败,可重试 |
SDK 示例(Python)
安装依赖:
pip install "alibabacloud-tea-openapi>=0.4.5,<1.0.0" "darabonba-core>=1.0.0,<2.0.0"
import json, os, time
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_openapi.client import Client as OpenApiClient
from darabonba.runtime import RuntimeOptions
API_VERSION = "2026-04-28"
ENDPOINT = os.environ["AIDGE_POP_ENDPOINT"]
REGION_ID = os.environ.get("AIDGE_POP_REGION_ID", "cn-shanghai")
AK = os.environ["AIDGE_ACCESS_KEY_ID"]
SK = os.environ["AIDGE_ACCESS_KEY_SECRET"]
def client():
cfg = open_api_models.Config(
access_key_id=AK, access_key_secret=SK,
endpoint=ENDPOINT, region_id=REGION_ID,
)
return OpenApiClient(cfg)
def call(c, action, *, body=None, query=None):
params = open_api_models.Params(
action=action, version=API_VERSION,
protocol="HTTPS", pathname="/", method="POST",
auth_type="AK", style="RPC",
req_body_type="json", body_type="json",
)
resp = c.call_api(
params,
open_api_models.OpenApiRequest(query=query or {}, body=body),
RuntimeOptions(connect_timeout=60_000, read_timeout=60_000),
)
raw = resp.get("body", resp) if isinstance(resp, dict) else resp
if isinstance(raw, (bytes, bytearray)): raw = raw.decode()
if isinstance(raw, str): raw = json.loads(raw)
return raw
def main():
c = client()
# 1. 提交任务
submit = call(c, "EcomVideoRecreation", body={
"Input": {
"Mode": "product_replacement",
"SourceVideoUrl": "https://example.com/source.mp4",
"ProductImageUrls": ["https://example.com/product.png"],
"ProductInfo": {"Title": "示例商品", "Category": "示例类目"},
},
"Output": {"Quality": "720p", "Ratio": "9:16"},
})
task_id = submit["Data"]["TaskId"]
print("TaskId:", task_id)
# 2. 轮询结果(建议每 20 秒一次)
deadline = time.monotonic() + 7200
while time.monotonic() < deadline:
result = call(c, "QueryAsyncTaskResult", query={"TaskId": task_id})
status = (result.get("Data") or {}).get("Status", "")
print("Status:", status)
if status in {"COMPLETED", "FAILED", "CANCELED", "TIMEOUT"}:
data = result.get("Data") or {}
raw_result = data.get("Result") or "{}"
parsed = json.loads(raw_result) if isinstance(raw_result, str) else raw_result
print(json.dumps({"Status": status, "Result": parsed,
"UsageMap": data.get("UsageMap")}, ensure_ascii=False, indent=2))
return
time.sleep(20)
if __name__ == "__main__":
main()
注意事项
所有素材 URL 须在任务执行期间保持可访问,建议有效期不少于 24 小时。
VideoUrl可能为带有效期的签名地址,请及时下载或转存。商品图建议主体清晰、无遮挡、纯色或简单背景。
人物参考图多张时须为同一人物,建议提供面部特写 + 正面照。
成片固定带声音:商品替换保留原主播声音,人物替换回填原视频声音。
质检告警随结果返回,不会阻断成片导出,也不会触发自动重试。
顶层
Success/Code反映本次查询请求是否成功;任务本身是否成功需通过Data.Status判断。