二、功能说明
| 功能 | 说明 | 效果示意 | 计费说明 |
| AI 换脸 | 替换视频中指定人脸,支持多人物、多参考图,保留身体动作与服装。 | | 收取“视频重制 – AI 换脸”费用。 |
| AI 换人 | 替换视频中人物的整体形象,包含体型、服装等全身特征 | | 收取“视频重制 – AI 换人”费用。 |
| 画中画 | 将原视频缩小嵌入 AI 生成的背景中。 | | 收取“视频重制 – 画面调整”费用。 |
| 背景扩展 | 在视频中插入扩展背景画面。 | | |
| 垂直填充 | 竖屏填充,为横屏视频生成上下补充内容。 | | |
| 水平填充 | 横屏填充,为竖屏视频生成左右补充内容。 | | |
详细定价可参考 计费说明文档。
三、使用限制
| 模式 | 限制 |
| AI 换脸 | 视频时长建议 ≤ 20 分钟;分辨率 ≤ 1920×1920;单张图片 < 10M,支持 jpg/png,分辨率 ≤ 4K。 |
| AI 换人 | 视频时长 ≤ 20 分钟;图片大小 ≤ 5M;需正面全身照。 |
注意:说明:
四、接入准备
1. 腾讯云账号注册/登录。
2. 登录 MPS 控制台,开启服务并完成服务角色授权。
3. 准备 COS 存储桶用于存放输入文件和输出结果。
具体指引请参考 快速入门。账号授权问题可参考 账号授权 文档。
六、使用 API 发起
调用 ProcessMedia 接口。
七、核心参数
| 参数 | 类型 | 说明 |
| InputInfo | object | 输入文件信息,支持 COS 或 URL。 |
| OutputStorage | object | 输出存储配置(COS)。 |
| OutputDir | string | 输出目录路径。 |
| AiAnalysisTask.Definition | int | 固定填 29。 |
| AiAnalysisTask.ExtendedParameter | string | 扩展参数 JSON 字符串(需转义)。 |
八、请求示例(AI 换脸)
{ "InputInfo": { "Type": "URL", "UrlInputInfo": { "Url": "https://your-bucket.cos.ap-guangzhou.myqcloud.com/input/video.mp4" } }, "OutputStorage": { "Type": "COS", "CosOutputStorage": { "Bucket": "your-bucket", "Region": "ap-guangzhou" } }, "OutputDir": "/output/", "AiAnalysisTask": { "Definition": 29, "ExtendedParameter": "{\\"vremake\\":{\\"mode\\":\\"SwapFaceV2\\",\\"swapFaceV2\\":{\\"srcFaces\\":[[\\"https://your-bucket.cos…/p1_ref1.jpg\\",\\"https://your-bucket.cos…/p1_ref2.jpg\\"],[\\"https://your-bucket.cos…/p2_ref1.jpg\\"]],\\"dstFaces\\":[\\"https://your-bucket.cos…/p1_dst.jpg\\",\\"https://your-bucket.cos…/p2_dst.jpg\\"]}}}" }}
注意:说明:
注意:ExtendedParameter 需要对 JSON 字符串进行转义。
十、事件通知回调
发起任务时通过 TaskNotifyConfig 参数配置事件回调,任务完成后系统会主动推送结果。可通过 ParseNotification 解析回调内容。
十一、接口查询
调用 DescribeTaskDetail 接口,传入发起任务时返回的 TaskId,解析 WorkflowTask.AiAnalysisResultSet 字段获取输出结果。
十二、任务结果关键字段
AiAnalysisResultSet[0].VideoRemakeTask.Output.Path → 输出视频路径AiAnalysisResultSet[0].VideoRemakeTask.Output.OutputStorage → 输出存储信息
十三、ExtendedParameter 扩展参数说明
指定不同重制功能,以及配置对应参数,需通过 ExtendedParameter 传入,顶层结构为:
{ "vremake": { "mode": "<模式名>", "<模式参数对象>": { … } }}
| 功能 | mode 值 |
| AI 换脸 | SwapFaceV2 |
| AI 换人 | SwapCharacter |
| 画中画 | PicInPic |
| 背景扩展 | BackgroundExtend |
| 垂直填充 | VerticalExtend |
| 水平填充 | HorizontalExtend |
十四、AI 换脸(SwapFaceV2)- 一站式自动处理模式
针对整段输入视频,一站式自动化完成 切镜 → 人脸追踪 → 换脸合成 → 整片拼接,输出最终换脸视频。ExtendedParameter 扩展参数示例:
{ "vremake": { "mode": "SwapFaceV2", "swapFaceV2": { "srcFaces": [ ["<人物1参考图1>", "<人物1参考图2>"], ["<人物2参考图1>"] ], "dstFaces": [ "<人物1目标脸>", "<人物2目标脸>" ] } }}
| 参数 | 必选 | 类型 | 说明 |
| srcFaces | 是 | string[][] | 视频中需要被替换的人物列表。外层下标对应一个人物,内层是该人物的全部参考图(不同角度/表情)。每人至少 1 张,单图 < 10M。 |
| dstFaces | 是 | string[] | 目标人脸图 URL 列表,与 srcFaces 按人物一一对应,长度必须相等。每人 1 张,单图 < 10M。 |
注意:说明:
十五、中间产物与 project.json
一站式自动处理模式执行过程中,会将所有中间产物归档到用户 COS 输出目录下的 <成品文件名>_intermediates/ 目录。该目录中的 project.json 是整个项目的单一事实源,后续微调操作均基于此文件进行。
中间产物目录结构
<OutputDir>/├── <finalOutBase>.mp4 # 最终成品视频└── <finalOutBase>_intermediates/ ├── project.json # 项目描述文件(微调的核心依据) ├── scenes/ │ ├── scene_000.mp4 # 切镜后的分镜视频 │ ├── scene_001.mp4 │ └── … ├── masks/ │ ├── scene_000_face_0.mp4 # 各分镜的人脸轨迹 mask │ ├── scene_000_face_1.mp4 │ └── … └── swapped/ ├── scene_000.mp4 # 各分镜的换脸结果 ├── scene_001.mp4 └── …
project.json 结构
{ "faces": [ { "face_id": "face_0", "face_ref_urls": ["<人物0参考图1>", "<人物0参考图2>"], "face_dst_url": "<人物0目标脸>" } ], "scenes": [ { "video": "<分镜源视频URL>", "dst_video": "<分镜换脸结果URL>", "start_time": 0, "end_time": 5.32, "faces": [ { "face_id": "face_0", "face_ref_urls": ["<参考图URL>"], "face_dst_url": "<目标脸URL>", "face_mask_url": "<人脸轨迹mask视频URL>" } ] } ], "dst_video": "<最终成品视频URL>"}
关键字段说明:
| 字段 | 类型 | 说明 |
| faces | object[] | 项目级人物列表,由入参 srcFaces/dstFaces 派生,按 face_<i> 编号。 |
| scenes | object[] | 按镜头切片得到的分镜列表,数组顺序即拼接顺序。 |
| scenes[i].video | string | 该分镜的源视频 URL。 |
| scenes[i].dst_video | string | 该分镜换脸后的结果视频 URL。 |
| scenes[i].start_time / end_time | float | 分镜在原始视频中的起止时间(秒)。 |
| scenes[i].faces[j].face_mask_url | string | 该人物在本分镜的人脸轨迹 mask 视频,可人工微调后回写。 |
| dst_video | string | 全部分镜拼接后的最终成品视频 URL。 |
注意:说明:
微调流程
基于 project.json,可以对任意分镜进行微调后重新生成:
SwapFaceV2(一把梭) │ 产出 project.json ▼对某个分镜重新追踪 → SwapFaceV2TrackFace │ 回写 face_mask_url ▼对某个分镜重新换脸 → SwapFaceV2SwapFace │ 回写 dst_video ▼重新拼接整片 → SwapFaceV2Concat │ 更新 project.dst_video ▼保存 project.json 到 COS 同一路径(幂等覆盖)
每次微调子任务完成后,将结果回写到 project.json 对应字段,并将整份 JSON 重新 PUT 回用户 COS 的同一路径。
十六、AI 换脸(SwapFaceV2)- 微调流程
基于一站式自动模式输出的 project.json,可以对任意分镜进行微调后重新生成:
SwapFaceV2(一把梭) │ 产出 project.json ▼对某个分镜重新追踪 → SwapFaceV2TrackFace │ 回写 face_mask_url ▼对某个分镜重新换脸 → SwapFaceV2SwapFace │ 回写 dst_video ▼重新拼接整片 → SwapFaceV2Concat │ 更新 project.dst_video ▼保存 project.json 到 COS 同一路径(幂等覆盖)
| mode | 用途 | 计费说明 |
| SwapFaceV2TrackFace | 仅追踪人脸(单分镜):输出人脸轨迹 mask。 | 收取“视频重制 – AI 换脸”费用。 |
| SwapFaceV2SwapFace | 仅换脸(单分镜):输入 mask + 目标脸,输出本分镜的换脸结果视频。 | 收取“视频重制 – AI 换脸”费用。 |
| SwapFaceV2Concat | 仅拼接:输入是多段视频 URL(videoUrls),按数组顺序统一分辨率和帧率拼接为最终成品视频。 | 收取“视频重制 – 画面调整”费用。 |
详细定价可参考 计费说明文档。
每次微调子任务完成后,系统会将结果回写到 project.json 对应字段,并将整份 JSON 重新 PUT 回用户 COS 的同一路径。
十七、SwapFaceV2TrackFace
仅追踪人脸(单分镜):输出人脸轨迹 mask。
{ "vremake": { "mode": "SwapFaceV2TrackFace", "swapFaceV2TrackFace": { "srcFaces": [ ["<人物1参考图1>", "<人物1参考图2>"], ["<人物2参考图1>"] ] } }}
输出为 JSON 文件,包含每个人物的 face_mask_url(人脸轨迹 mask 视频)。
十八、SwapFaceV2SwapFace
仅换脸(单分镜):输入 mask + 目标脸,输出本分镜的换脸结果视频。
{ "vremake": { "mode": "SwapFaceV2SwapFace", "swapFaceV2SwapFace": { "faces": [ { "face_id": "face_0", "mask_url": "<追踪输出的mask视频URL>", "dst_face_url": "<目标人脸图URL>" } ] } }}
十九、SwapFaceV2Concat
仅拼接:输入是多段视频 URL(videoUrls),按数组顺序统一分辨率和帧率拼接为最终成品视频。该模式常用于多次 SwapFaceV2SwapFace 单分镜微调后导出整片。
{ "vremake": { "mode": "SwapFaceV2Concat", "swapFaceV2Concat": { "videoUrls": [ "<分镜1换脸结果URL>", "<分镜2换脸结果URL>" ] } }}
注意:说明:
20、AI 换人(SwapCharacter)- 一站式自动处理模式
SwapCharacter 用一张目标人物照片替换视频中的人物(整个人,含身体与服装),保留原场景与运镜。对外可视为「切镜 → 逐分镜换人 → 整片拼接」的三阶段流水线:
{ "vremake": { "mode": "SwapCharacter", "swapCharacter": { "character": "<目标人物的正面全身图URL>" } }}
| 参数 | 必选 | 类型 | 说明 |
| character | 是 | string | 目标替换人物的 URL(正面全身照)。 |
| templateId | 否 | string | 模板 ID,现在默认,不支持其他模式。 |
21、中间产物与 project.json
为了支持“单分镜重跑”,SwapCharacter 一把梭模式在执行过程中会把中间产物归档到用户目标 COS 的一个中间产物目录下;其中 project.json 是整个项目的单一事实源(Single Source of Truth),微调页面直接基于它进行加载、展示与回写。
22、中间产物目录结构
中间产物目录与最终成品视频同级,位于任务级 OutputStorage + OutputDir 指定的用户 COS 路径下,目录名固定为 <finalOutBase>_intermediates(finalOutBase 是去掉扩展名后的成品文件名)。目录内布局如下:
<OutputDir>/├── <finalOutBase>.mp4 # 最终成品视频└── <finalOutBase>_intermediates/ ├── project.json # 整个项目的 project 快照 ├── scenes/ │ ├── scene_000.mp4 # 切镜后的第 0 个分镜(已转码为 24fps) │ ├── scene_001.mp4 │ └── … └── swapped/ ├── scene_000.mp4 # 第 0 个分镜的换人结果 ├── scene_001.mp4 └── …
注意事项:
·中间产物归档“尽力而为”:换人结果归档失败不会影响最终成品视频产出,此时对应分镜的 dst_video 为空。
·project.json 会在分镜确定后开始写入,并在每个分镜切片 / 换人完成后更新一次。任务成功时一定在任务回调上报前完成最终落盘(读到的一定是终态);任务失败时会留下半成品(未完成分镜的 dst_video 为空,整片 dst_video 为空);若任务在切镜之前就失败,则不会生成 project.json。
·project.json 中 scenes 和 dst_video 的 URL 都指向用户 COS;character 保存的是用户入参原值。
23、project.json 顶层结构
{ "character": "https://<user-cos>/…/person.png", "scenes": [ { "video": "https://<user-cos>/<intermediates>/scenes/scene_000.mp4", "dst_video": "https://<user-cos>/<intermediates>/swapped/scene_000.mp4", "start_time": 0, "end_time": 5.32 }, { "video": "https://<user-cos>/<intermediates>/scenes/scene_001.mp4", "dst_video": "https://<user-cos>/<intermediates>/swapped/scene_001.mp4", "start_time": 5.32, "end_time": 12.8 } ], "dst_video": "https://<user-cos>/<finalOutBase>.mp4"}
| 字段 | 类型 | 说明 |
| character | string | 目标人物照片 URL,对应入参 swapCharacter.character。 |
| scenes | object[] | 按镜头切片得到的分镜列表,数组顺序即拼接顺序,下标 idx 与 scenes/scene_<idx>.mp4 一一对应;元素结构参考下文分镜。 |
| dst_video | string | 全部分镜换人并拼接后的最终成品视频 URL;任务未完成时为空。 |
24、分镜
project.scenes[i] 描述第 i 个分镜的输入与输出:
| 字段 | 类型 | 说明 |
| video | string | 该分镜的源视频 URL(scenes/scene_<idx>.mp4),由切镜阶段切片后转存到用户 COS。 |
| dst_video | string | 该分镜的换人结果视频 URL(swapped/scene_<idx>.mp4);该分镜未完成或归档失败时为空。 |
| start_time | float | 该分镜在原始整片中的起始时间(秒),便于在总时间轴上定位。 |
| end_time | float | 该分镜在原始整片中的结束时间(秒)。 |
25、AI 换人(SwapCharacter)- 微调流程的关系
project.json 是 SwapCharacter(一把梭)与 SwapCharacterSwapScene / SwapCharacterConcat(分阶段子任务)之间的桥梁:
SwapCharacter 一把梭 │ 产出 ▼<intermediates>/project.json ◄────── 微调页面加载 │ │ 对某个 scene 重新换人 ▼SwapCharacterSwapScene(输入 scene.video + project.character) │ 回写 scene.dst_video ▼SwapCharacterConcat(输入按顺序排列的 scenes[i].dst_video,缺失时用 scenes[i].video;音频源 project.dst_video) │ 产出最终整片 ▼回写 project.dst_video 并保存 project.json
每次微调子任务完成后,调用方应把结果回写到内存中的 project 对象,并在保存时把整份 JSON 重新 PUT 回用户 COS 的同一路径,实现幂等覆盖。
26、仅换人(SwapCharacterSwapScene,单分镜)
输入是“单个分镜视频”(任务级 InputInfo)+ 目标人物照片 character,输出本分镜的换人结果视频。
该模式不切镜、不拼接,也不依赖任何上游 project 文件,所有信息都通过入参显式给出,常用于微调页对某个分镜单独重跑。
{ "vremake": { "mode": "SwapCharacterSwapScene", "swapCharacterSwapScene": { "character": "https://ie-mps-1258344699.cos.ap-nanjing.tencentcos.cn/test/person.png" } }}
27、仅拼接(SwapCharacterConcat)
输入是若干视频 URL(videoUrls),按数组顺序统一分辨率/帧率拼接为最终成品视频。
该模式不调任何外部换人服务,也不做内容审核,常用于多次 SwapCharacterSwapScene 单分镜微调后导出整片。行为与 SwapFaceV2Concat 完全一致。
可选地,调用方可以通过任务级 InputInfo(URL 或 COS 输入)指定一个外部音频源:拼接时丢弃各分片自带音频,统一以该源音频作为输出音轨。推荐传入上一版整片:其音轨连续完整,能规避短分片在边界处拼接产生的卡顿。
说明:
·当 InputInfo 指向的资源与 videoUrls 中某一项完全相同时,会复用同一份本地副本,不会重复下载。
·当 InputInfo 未指定或下载失败时,自动退化为“拼接各分片自带音频”,不会阻断主流程。
{ "vremake": { "mode": "SwapCharacterConcat", "swapCharacterConcat": { "videoUrls": [ "https://<user-cos>/<intermediates>/swapped/scene_000.mp4", "https://<user-cos>/<intermediates>/swapped/scene_001.mp4", "https://<user-cos>/<intermediates>/scenes/scene_002.mp4" ] } }}
29、画中画(PicInPic)
{ "vremake": { "mode": "PicInPic", "picInPic": { "llmPrompt": "生成一张科技感背景图片" } }}
| 参数 | 必选 | 类型 | 说明 |
| llmVideoPrompt | 二选一 | string | 生成背景视频的提示词。 |
| llmPrompt | 二选一 | string | 生成背景图片的提示词。 |
| randomMove | 否 | bool | 是否随机移动,默认 false。 |
| frontRect | 否 | Rect | 上层视频的位置与大小(x/y 默认居中,width/height 默认 0.5)。 |
30、背景扩展(BackgroundExtend)
{ "vremake": { "mode": "BackgroundExtend", "backgroundExtend": { "minSceneSecs": 2.0 } }}
| 参数 | 必选 | 类型 | 说明 |
| minSceneSecs | 否 | float | 插入扩展画面的最小间隔(秒),默认2.0。 |
31、垂直填充(VerticalExtend)
{ "vremake": { "mode": "VerticalExtend", "verticalExtend": { "llmVideoPrompt": "生成一段自然风景视频" } }}
| 参数 | 必选 | 类型 | 说明 |
| llmVideoPrompt | 否 | string | 生成填充视频的提示词,默认"随机生成一个视频"。 |
32、水平填充(HorizontalExtend)
{ "vremake": { "mode": "HorizontalExtend", "horizontalExtend": { "llmVideoPrompt": "生成一段城市街景视频" } }}
| 参数 | 必选 | 类型 | 说明 |
| llmVideoPrompt | 否 | string | 生成填充视频的提示词,默认"随机生成一个视频"。 |