Skip to content

mediakit 视频剪辑 API​

POST https://api.yu-yu.ai/mediakit/v1/tools/trim-video

本接口对应火山引擎 AI MediaKit 的「视频裁剪(trim-video)」能力:根据指定的开始与结束时间点,从一个较长的视频文件中精确截取片段,生成一个全新的视频文件。提交成功后会返回一个任务 ID,您可以再按任务 ID 查询任务状态并获取裁剪结果。

能力说明​

  • 按时间点截取:传入源视频地址与开始、结束时间(单位:秒,支持最多两位小数),服务从源视频中切出该时间段的内容。
  • 异步任务:提交接口只负责创建任务,结果需要通过查询接口按 task_id 轮询获取。
  • 输出格式:裁剪结果统一输出为 MP4;输出分辨率默认与源视频保持一致。
  • 产物地址:未指定落盘位置时返回带有效期的临时下载地址;指定落盘位置后返回对应存储的资源地址。

说明

  • 输入视频格式:mp4、flv、ts、avi、mov、wmv、mkv 等主流格式。
  • 建议单个输入文件大小不超过 10 GB。
  • 输入视频最高支持 4K(3840 × 2160)分辨率。
  • 处理耗时与视频时长、分辨率正相关,平均 RTF(处理耗时 / 原片时长)约为 1。

鉴权​

本接口仅支持 API Key 鉴权,请在 https://api.yu-yu.ai/console 获取 API Key。

调用时需在请求头中携带:

http
Authorization: Bearer <API_KEY>

注意

提交接口还需设置请求头 Content-Type: application/json,否则请求体会被判定为无法解析。

提交剪辑任务​

POST https://api.yu-yu.ai/mediakit/v1/tools/trim-video

Body 参数​


model string 必选

调用的模型 ID,本接口固定为 mediakit_trim_video。


video_url string 必选

待裁剪的视频地址。

  • 必须是公网可访问的 http:// 或 https:// 地址,长度不超过 2048 个字符。
  • 请确保地址在任务执行期间保持可访问、且在有效期内,否则任务会因下载源文件失败而失败。

说明

建议将源视频放在公网对象存储或 CDN 上,不要在地址中携带会在短时间内失效的临时签名。


start_time number 可选

裁剪开始时间,单位为秒,支持最多两位小数。

  • 默认值为 0,表示从视频开头开始裁剪。
  • 取值范围 [0, 3600]。
  • 必须小于 end_time。

end_time number 可选

裁剪结束时间,单位为秒,支持最多两位小数。

  • 取值范围 (0, 3600]。
  • 必须大于 start_time。
  • 建议始终显式传入:本接口默认要求提供 end_time,未传入时提交请求会被拒绝。

media_output_destination string 可选

指定处理产物的目标存储位置,必须以 vod:// 或 tos:// 开头。

  • 存储至 VOD:vod://<空间名>
  • 存储至 TOS:tos://<桶名>

设置本参数后,任务结果中的地址类字段将返回 vod:// 或 tos:// 格式的资源地址,不再返回临时下载地址。

注意

使用本参数前需要先完成对应的存储授权,否则产物无法写入目标位置。


client_token string 可选

用户请求凭证,用于幂等控制。

  • 大小写敏感,不超过 64 个 ASCII 可打印字符(0x21~0x7e,即不含空格与控制字符)。
  • 携带相同 client_token 的重复提交会返回同一个任务,不会重复创建任务。

callback_args string 可选

自定义回调参数。您提供的内容会在任务完成时通过回调原样返回,便于关联自有业务。

  • 最大 512 字节。

callback_url string 可选

用于接收该任务结果回调的地址。

  • 必须以 http:// 或 https:// 开头,长度不超过 2048 个字符。
  • 传入后,该地址优先于服务侧配置的默认回调地址。

queue_id string 可选

任务提交的目标队列 ID。

  • 长度不超过 128 个字符。
  • 不传时使用系统自动创建的默认队列。
  • 可将不同业务或优先级的任务提交到不同队列,便于按队列管理。

响应参数​

提交成功后同步返回,HTTP 状态码为 200。


success boolean

任务是否提交成功。

  • true:提交成功。
  • false:提交失败,错误详情见 error 字段。

task_id string

任务的唯一标识。请保存该值,后续通过查询接口获取进度与结果。


request_id string

本次请求的唯一标识,可用于问题排查。

查询任务​

GET https://api.yu-yu.ai/mediakit/v1/tasks/{task_id}

查询指定任务的当前状态与最终结果。任务状态与结果在同一次查询中返回,按固定间隔轮询本接口,直到 status 进入终态即可。

Path 参数​


task_id string 必选

需要查询的任务 ID,取自提交接口的响应体。

响应参数​


success boolean

标识本次查询请求本身是否被成功处理,不代表任务的执行状态。

  • true:服务端成功处理了本次查询。
  • false:查询请求失败,原因见 error 字段。

注意

任务执行失败时,本字段仍为 true——「查询成功」与「任务成功」是两件事,判断任务结果请以 status 与 error 为准。


task_id string

所查询任务的唯一标识。


task_type string

任务类型,本接口的任务类型为 trim-video。


status string

任务当前状态,取值见任务状态说明。


result object

任务成功时返回的结果对象,仅当 status 为 completed 时返回。

  • result.video_url string:裁剪后视频的文件地址,格式为 MP4。
    • 未设置 media_output_destination 时:返回一个 https 临时下载地址,有效期为 24 小时,请及时下载或转存。
    • 设置了 media_output_destination 时:返回 vod://<空间名>/<媒资ID> 或 tos://<桶名>/<对象Key> 形式的存储地址。
  • result.duration number:输出视频的时长,单位:秒,可能带小数。
  • result.resolution string:输出视频的分辨率,例如 1080p(默认与源视频一致)。

说明

result 中的字段与任务类型相关,本接口的裁剪任务为上述三项。


error object

任务失败时返回的错误详情对象,仅当 status 为 failed 时返回。

  • error.code string:错误码,例如 DownloadFailed。
  • error.message string:错误描述信息,用于展示或记录日志。
  • error.param string:可选,指示导致错误的具体参数名。
  • error.type string:错误类型。任务执行出错时为 TaskError。

expires_at integer

任务结果的过期时间戳(Unix 时间戳,单位:秒)。仅当任务成功且有结果时返回。


created_at integer

任务创建时间戳(Unix 时间戳,单位:秒)。


finished_at integer

任务完成时间戳(Unix 时间戳,单位:秒),仅当 status 为 completed 或 failed 时返回。


request_id string

本次查询请求的唯一标识,可用于问题排查。


queue_id string

任务所属的队列 ID。

请求示例​

提交剪辑任务

bash
curl -X POST 'https://api.yu-yu.ai/mediakit/v1/tools/trim-video' \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "mediakit_trim_video",
    "video_url": "https://example.com/full_video.mp4",
    "start_time": 10.5,
    "end_time": 60
  }'

查询任务

bash
curl -X GET 'https://api.yu-yu.ai/mediakit/v1/tasks/{task_id}' \
  -H 'Authorization: Bearer <API_KEY>'

响应示例​

提交成功

json
{
  "success": true,
  "task_id": "task-1a2b3c4d5e6f7g8h",
  "request_id": "req_9f8e7d6c5b4a39281706"
}

查询:任务进行中

json
{
  "success": true,
  "task_id": "task-1a2b3c4d5e6f7g8h",
  "task_type": "trim-video",
  "status": "running",
  "created_at": 1777291767,
  "request_id": "req_9f8e7d6c5b4a39281706"
}

查询:任务成功

json
{
  "success": true,
  "task_id": "task-1a2b3c4d5e6f7g8h",
  "task_type": "trim-video",
  "status": "completed",
  "result": {
    "video_url": "https://example.com/trimmed_output.mp4?auth_key=...",
    "duration": 49.5,
    "resolution": "1080p"
  },
  "expires_at": 1777464650,
  "created_at": 1777291767,
  "finished_at": 1777291851,
  "request_id": "req_9f8e7d6c5b4a39281706"
}

查询:任务失败

json
{
  "success": true,
  "task_id": "task-1a2b3c4d5e6f7g8h",
  "task_type": "trim-video",
  "status": "failed",
  "error": {
    "code": "DownloadFailed",
    "message": "Failed to download file from the provided URL. Please check if the URL is correct and publicly accessible.",
    "param": "video_url",
    "type": "TaskError"
  },
  "created_at": 1777291767,
  "finished_at": 1777291802,
  "request_id": "req_9f8e7d6c5b4a39281706"
}

参数错误(提交阶段同步返回)

json
{
  "success": false,
  "task_id": "",
  "request_id": "req_9f8e7d6c5b4a39281706",
  "error": {
    "code": "InvalidParameter",
    "message": "end_time 必须大于 start_time",
    "param": "end_time",
    "type": "BadRequest"
  }
}

任务状态说明​

status说明客户端处理
running任务正在处理中继续轮询
completed任务已成功完成读取 result.video_url,及时下载或转存产物
failed任务处理失败读取 error.code 与 error.message,不再轮询

说明

  • 建议按固定间隔轮询查询接口,任务进入终态(completed / failed)后停止轮询;也可以在提交时传入 callback_url,由服务端在任务完成时主动推送结果。
  • 任务结果的地址默认只在系统内保留 24 小时;当结果的剩余有效期不足 2 小时时,再次调用查询接口会自动延长有效期。
  • 服务侧仅支持查询 30 天内创建的任务,超出该窗口的查询会失败,请及时保存产物与任务信息。

注意

查询不存在、或不属于当前账号的任务统一返回 HTTP 404,不区分「不存在」与「无权限」,以避免任务枚举。

常见错误​

HTTP 状态码与错误码

HTTP 状态码error.code说明处理方式
400InvalidParameter参数缺失或取值非法:video_url 为空 / 不是公网 http(s) 地址 / 超过 2048 字符;start_time 或 end_time 超出 [0, 3600];end_time ≤ start_time;缺少 end_time;media_output_destination 前缀不是 vod:// 或 tos://;client_token 超过 64 字符或含非可打印 ASCII 字符;callback_args 超过 512 字节;callback_url 不是 http(s) 地址或超过 2048 字符;queue_id 超过 128 字符;model 取值不支持按 error.param 定位字段并修正后重试
401AuthenticationErrorAPI Key 缺失或无效检查 Authorization: Bearer <API_KEY> 请求头与 API Key 状态
403AccessDenied无权限访问该能力确认账号已开通对应能力
404InvalidParameter任务不存在,或不属于当前账号核对 task_id 是否正确
409Conflict同一个幂等令牌被用于不同的请求体更换 client_token,或保证同一令牌始终对应同一请求
429RequestLimitExceeded调用频率或并发数超出限制降低调用频率,采用指数退避策略重试
500InternalServiceError服务端内部错误稍后重试
500DownloadFileError服务端下载源视频失败确认 video_url 公网可访问、未过期、体积未超限
503ServiceInitializingError服务正在初始化,临时不可用稍后重试
504InternalServiceTimeout服务端处理超时稍后重试

`error.type` 的取值

error.type 用于区分错误大类,按 HTTP 状态码给出:400 → BadRequest、401 → AuthenticationError、403 → AccessDenied、404 → NotFound、409 → Conflict、429 → TooManyRequests、5xx → InternalServerError;任务级错误的 error.type 恒为 TaskError。error.param 仅在能定位到具体字段时出现。

任务级错误

当查询响应中 status 为 failed 时,错误详情位于 error 对象内,error.type 恒为 TaskError,error.code 由服务返回(例如 DownloadFailed)。

说明

提交接口的错误是同步返回的(HTTP 状态码非 200,success 为 false,task_id 为空字符串);而查询接口在任务失败时仍返回 HTTP 200 且 success 为 true。两处错误信封的形状一致,但语义不同,请分别处理。