---
url: /docs/add_mask_keyframes.zh.md
---
# ADD\_MASK\_KEYFRAMES API 接口文档

## 🌐 语言切换

[中文版](/docs/add_mask_keyframes.zh) | [English](/docs/add_mask_keyframes)

## 接口信息

```
POST /openapi/capcut-mate/v1/add_mask_keyframes
```

## 功能描述

给已有蒙版的视频片段添加蒙版关键帧。关键帧写在片段的 `common_keyframes` 上，支持位置（X/Y）、大小（width/height）、羽化、旋转角度。单位与 `add_masks` 一致：位置和大小用像素，羽化用 0–100，旋转用角度。

片段必须已经通过 `add_masks` 添加过蒙版，本接口不会自动创建蒙版，也不会改写蒙版素材的静态 `config`。

## 请求参数

```json
{
  "draft_url": "https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258",
  "keyframes": [
    {"segment_id": "d62994b4-25fe-422a-a123-87ef05038558", "offset": 0, "X": 0, "Y": 0, "width": 540, "height": 540, "feather": 0, "rotation": 0},
    {"segment_id": "d62994b4-25fe-422a-a123-87ef05038558", "offset": 5000000, "X": -360, "Y": -200, "width": 1076, "height": 1071, "feather": 100, "rotation": 180}
  ]
}
```

### 参数说明

| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| draft\_url | string | ✅ | "" | 目标草稿的完整 URL |
| keyframes | array | ✅ | \[] | 蒙版关键帧列表 |

### keyframes

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| segment\_id | string | ✅ | 目标视频片段 ID |
| offset | integer | ✅ | 相对片段起点的时间偏移，单位微秒 |
| X | number | ❌ | 蒙版中心 X，像素，相对素材中心，右为正 |
| Y | number | ❌ | 蒙版中心 Y，像素，相对素材中心，下为正 |
| width | number | ❌ | 蒙版宽度，像素 |
| height | number | ❌ | 蒙版高度，像素 |
| feather | number | ❌ | 羽化程度，0–100 |
| rotation | number | ❌ | 旋转角度，单位度 |

`X` / `Y` / `width` / `height` / `feather` / `rotation` 均为可选，但每一项至少提供其中一个。`0` 是有效值。位置或大小动画建议同一 `offset` 同时传两个轴。只传 `X` 则只写入 X 轴位置关键帧；只传 `width` 则只写入 `KFTypeMaskSizeX`。

同一片段、同一属性、同一时间点再次写入会覆盖旧值，不会重复追加。

## 响应参数

```json
{
  "code": 0,
  "message": "success",
  "draft_url": "https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/get_draft?draft_id=2025092811473036584258",
  "keyframes_added": 12,
  "affected_segments": ["d62994b4-25fe-422a-a123-87ef05038558"]
}
```

| 字段 | 类型 | 说明 |
|------|------|------|
| draft\_url | string | 草稿 URL |
| keyframes\_added | integer | 实际写入的草稿属性条数（X/Y、width/height 分别计 1） |
| affected\_segments | array | 成功写入关键帧的片段 ID |

## 使用示例

### cURL 示例

#### 1. 位置关键帧

```bash
curl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_mask_keyframes \
  -H "Content-Type: application/json" \
  -d '{
    "draft_url": "YOUR_DRAFT_URL",
    "keyframes": [
      {"segment_id": "segment-id", "offset": 0, "X": 0, "Y": 0},
      {"segment_id": "segment-id", "offset": 5000000, "X": -360, "Y": -200}
    ]
  }'
```

#### 2. 大小关键帧

```bash
curl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_mask_keyframes \
  -H "Content-Type: application/json" \
  -d '{
    "draft_url": "YOUR_DRAFT_URL",
    "keyframes": [
      {"segment_id": "segment-id", "offset": 0, "width": 540, "height": 540},
      {"segment_id": "segment-id", "offset": 5000000, "width": 1076, "height": 1071}
    ]
  }'
```

#### 3. 羽化 + 旋转

```bash
curl -X POST https://capcut-mate.jcaigc.cn/openapi/capcut-mate/v1/add_mask_keyframes \
  -H "Content-Type: application/json" \
  -d '{
    "draft_url": "YOUR_DRAFT_URL",
    "keyframes": [
      {"segment_id": "segment-id", "offset": 0, "feather": 0, "rotation": 0},
      {"segment_id": "segment-id", "offset": 5000000, "feather": 100, "rotation": 180}
    ]
  }'
```

## 错误码说明

| 错误码 | 错误信息 | 说明 | 解决方案 |
|--------|----------|------|----------|
| 2001 | 无效的草稿URL | 草稿不存在或不在缓存中 | 检查 draft\_url |
| 2015 | 片段未找到 | segment\_id 不存在 | 确认片段 ID |
| 2016 | 无效的片段类型 | 非视频片段 | 只对视频/图片片段调用 |
| 2046 | 无效的蒙版关键帧信息 | 缺少属性、羽化越界或格式错误 | 检查 keyframes |
| 2047 | 片段上未找到遮罩 | 该片段还没有蒙版 | 先调用 add\_masks |
| 2048 | 蒙版关键帧添加失败 | 保存草稿失败 | 重试或联系技术支持 |

## 说明

* 必须先调用 [添加遮罩](/docs/add_masks.zh)，再添加蒙版关键帧。
* 位置换算使用素材宽高（像素 / 半素材尺寸），不是画布尺寸。
* 大小换算使用素材宽高（`width / 素材宽度`、`height / 素材高度`），与蒙版静态 config 一致。
* 超出片段时长的 `offset` 会被截断到片段末尾。
* 不支持圆角关键帧。

## 相关接口

* [添加遮罩](/docs/add_masks.zh)
* [添加关键帧](/docs/add_keyframes.zh)
* [保存草稿](/docs/save_draft.zh)

***

📚 **项目资源**\
**GitHub**: <https://github.com/Hommy-master/capcut-mate>\
**Gitee**: <https://gitee.com/taohongmin-gitee/capcut-mate>
