电商视频裂变

更新时间:
复制 MD 格式

电商视频裂变是一套面向商品内容生产的 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

否

替换模式。取值:product_replacement(默认)、person_replacement

product_replacement

RecreateMode

string

否

生成方式。默认 reference。可选值为 reference(直接参考原视频)或 rebuild(先拆解原视频,再重新生成)。

reference

SourceVideoUrl

string

是

参考视频 HTTP(S) URL,时长范围 2~360 秒。须在任务执行期间保持可访问,建议有效期不少于 24 小时

https://example.com/source.mp4

ProductImageUrls

array[string]

否

商品替换时必填,目标商品图 URL,同一SKU可上传1-8张图片。建议主体清晰、无遮挡、背景干净

["https://example.com/product.png"]

ProductInfo

object

否

目标商品信息,建议填写以提升口播准确度

—

ProductInfo.Title

string

否

商品替换时必填,需提供目标替换的商品名称,最多 200 字符

淡月黄凉感防晒衣

ProductInfo.Category

string

否

商品类目

女装/防晒衣

ProductInfo.Detail

string

否

商品真实信息(SKU、品牌、颜色、材质、尺寸、规格、Logo 和使用方式等),用于约束口播事实

淡月黄色,凉感面料,防晒至手背,UPF50+

PersonReferenceImageUrls

array[string]

否

人物替换时的目标人物参考图 URL,1~5 张,须为同一人物。建议按面部特写、正面、45°、侧面、背面顺序排列

["https://example.com/person.jpg"]

ChangeDescription

string

否

人物替换目标人物描述或补充约束,1~500 字符。未提供 PersonReferenceImageUrls 时必填

目标人物为一名成年男性,保留原片服装和动作

Output

名称

类型

必填

说明

取值/示例

Quality

string

否

输出清晰度,默认 720p

720p、1080p

Ratio

string

否

输出画幅,默认 auto(自动匹配原片)

auto、9:16、3:4、1:1、4:3、16:9

Duration

integer

否

目标时长(秒)。reference 模式忽略传入值并强制为 -1,跟随原视频时长;rebuild 模式下可传 5~60 的整数秒,也可传-1,代表自动时长

-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,用于识别唯一一次调用

70CBEFDF-BB17-1EB3-8A21-569F3124738F

Code

string

结果码。success 成功,失败时返回对应错误码

success

Success

boolean

提交是否成功

true

Message

string

返回信息,失败时返回错误说明

Task submitted

Data.TaskId

string

异步任务 ID,用于后续轮询

task_778fa8bd21804828a5d147050e30edac

返回示例

成功:

{
  "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

是

EcomVideoRecreation 返回的异步任务 ID

task_778fa8bd21804828a5d147050e30edac

返回参数

名称

类型

说明

示例

RequestId

string

请求 ID

CE7F2B64-4E5C-4C69-A437-75A4C9E5C079

Code

string

结果码。success 成功,失败时返回对应错误码

success

Success

boolean

本次查询请求是否成功

true

Message

string

返回信息

Success

Data.TaskId

string

异步任务 ID

task_778fa8bd21804828a5d147050e30edac

Data.Status

string

任务状态,取值见下表

COMPLETED

Data.Result

string

JSON 字符串。完成后包含 VideoUrl 与 Duration;执行中为空字符串

—

Data.UsageMap

object

计量用量信息;Resolution(string:720P/1080P)和 Duration(number,单位秒)

—

任务状态(Data.Status):

取值

说明

IN_PROGRESS

任务执行中,继续轮询

COMPLETED

任务成功完成,解析 Data.Result 获得视频地址

FAILED

任务失败,解析 Data.Result 获得错误信息

CANCELED

任务已取消

TIMEOUT

任务超时

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

INVALID_PARAMETER

参数不合法,详见 Message

请求参数校验失败,根据 Message 修正后重试

404

TASK_NOT_FOUND

TaskId 不存在

传入的 TaskId 无效或已过期

404

RESOURCE_NOT_FOUND

素材 URL 不可访问

检查素材 URL 是否在有效期内且可公网访问

500

INTERNAL_ERROR

服务内部错误

服务端异常,可稍后重试

200

OUTPUT_MAPPING_FAILED

成片无法导出

任务执行完成但视频导出失败,可重试

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 判断。