HTML 动画渲染(整轨)

将一份合成规格渲染为成片视频(mp4):以一条贯穿全片的视频底轨(如真人出镜 A-roll)为底,叠加任意自定义 HTML 动画颗粒(透明叠在底轨之上、不挡主体),一次合成出片。视觉玩法不预设、不枚举——颗粒由你自由编写,只需遵守渲染所需的 HTML 动画格式。素材通过 composition.assets.file_id 引用平台已有文件。

选哪个接口?

  • 本接口 · 整轨:有一条长视频底轨贯穿全片(人物出镜 / B-roll),透明颗粒叠在其上、不挡主体 → 用本接口。
  • HTML 动画渲染(单点):颗粒不透明全屏切入 / 短片段 / 纯 HTML 动画(无长底轨贯穿)→ 用单点接口,更轻更快。
  • 两个接口输入规格完全相同(composition v0),按你的画面场景择一即可。

视频时间线渲染 的差异:时间线渲染是单视频轨硬切;本接口支持视频底轨 + 多个自定义 HTML 动画颗粒叠加合成,视觉表现完全由你的颗粒决定。

颗粒格式约定(重要)

每个自定义 HTML 颗粒必须是自包含、可逐帧定格(seekable)的 HTML 动画

  • 根元素必须用 <template> 包裹<template><div data-composition-id=...>…</div></template>,否则颗粒无法被解析、整体渲染会失败;
  • 必须声明自己的 data-composition-id / data-width / data-height
  • 动画必须注册到可被逐帧驱动的时间线(推荐 GSAP:gsap.timeline({paused:true}) 注册到 window.__timelines)。
  • ⚠️ 仅用纯 CSS animation-delay、不注册时间线的颗粒无法被逐帧渲染,会冻结在动画终态。 请按可 seek 的动画格式产出颗粒。

创建任务

基本信息

项目
请求方法POST
请求路径/task/html_animate_render
Content-Typeapplication/json
鉴权方式Authorization 请求头(直接传 API Key)
计费成片总时长(分钟)计费

请求参数(Body)

参数名类型必填默认值说明
compositionobject合成规格,详见下表
renderobject{}渲染参数:fps(默认取 composition.fps 或 30)/ qualitydraft/standard/high,默认 high

composition 对象

字段类型必填默认值说明
versionstring规格版本,固定 v0
video_sizeobject输出分辨率 {"width":宽,"height":高}
fpsnumber30输出帧率
durationnumber自动成片总时长(秒);缺省时取所有轨道 / 颗粒末端最大值
assetsobject素材引用,必须含 file_id{素材名: 平台文件ID}(含视频/音频底轨,以及以 file_id 方式引用的颗粒文件)
tracksarray视频底轨(video/audio),至少 1 条
beatsarray[]自定义 HTML 动画颗粒叠加层

tracks[] 视频底轨对象

字段类型必填说明
typestringvideoaudio
assetstring素材名(对应 assets.file_id 的键)
track_indexnumber轨道层级(越大越靠前;同层不可重叠)
startnumber在成片时间轴上的起始时间(秒)
durationnumber时长(秒);视频/音频可省略(取源时长)
mutedboolean视频专用,默认 true(音频建议走独立音频轨)
volumenumber音频专用,默认 1.0

beats[] 颗粒叠加层对象

字段类型必填说明
idstring唯一标识
startnumber入场时间(秒)
durationnumber在场时长(秒)
track_indexnumber叠加层级(z-order)
opaqueboolean颗粒是否全屏不透明(盖住底轨)。整轨场景通常为 false(透明叠在底轨上、不挡主体);若颗粒需全屏盖住底轨切入,置 true
htmlstring二选一内联:直接把颗粒 HTML 源码塞进字段(自包含、一次调用)
html_assetstring二选一引用:颗粒 HTML 已上传,填其在 assets.file_id 中的键

每个颗粒须提供 html(内联)或 html_asset(file_id 引用)其一。

请求示例

curl -X POST https://api.ai-mcn.tv:10000/task/html_animate_render \
  -H "Authorization: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "composition": {
      "version": "v0",
      "video_size": {"width": 1920, "height": 1080},
      "fps": 30,
      "duration": 8.5,
      "assets": {"file_id": {"base": "78246108192718854", "base_audio": "78246108192718855"}},
      "tracks": [
        {"type": "video", "asset": "base",       "track_index": 0, "start": 0, "duration": 8.5, "muted": true},
        {"type": "audio", "asset": "base_audio", "track_index": 5, "start": 0, "duration": 8.5, "volume": 1.0}
      ],
      "beats": [
        {"id": "b1", "start": 3.0, "duration": 4.6, "track_index": 10, "opaque": true,
         "html": "<template><div data-composition-id=\"p1\" data-width=\"1920\" data-height=\"1080\">...含 GSAP 时间线注册的颗粒 HTML...</div></template>"}
      ]
    },
    "render": {"fps": 30, "quality": "high"}
  }'

成功响应示例

{"code": 200, "msg": "success", "data": {"task_id": "537489015178500", "task_type": "html_animate_render", "status": "queued"}}

查询任务结果

项目
请求方法GET
请求路径/task/html_animate_render/{task_id}
鉴权方式Authorization 请求头

响应参数(output_result)

参数名类型说明
file_idstring成片文件 ID
download_urlstring下载路径
durationnumber成片时长(秒)
video_sizeobject输出分辨率 {"width":宽,"height":高}

错误码

错误码HTTP 状态码说明解决方案
6013400缺少 composition补齐必填参数
6016400规格非法(versionv0、颗粒缺 html/html_assetclip 总数超上限、总时长 ≤ 0、render 参数越界等)按响应提示修正
6004404assets.file_id 中某个文件不存在检查文件 ID / 是否已上传
6014400底轨素材类型与轨道不匹配检查素材类型
6502401鉴权失败检查 Authorization 请求头
6201 / 6202402配额 / 余额不足购买配额包或充值

使用限制

  • 规格版本composition.version 必须为 v0
  • 颗粒须可 seek:颗粒须用 <template> 包裹根元素 + 自带 data-composition-id + 可逐帧驱动的时间线注册(见上「颗粒格式约定」);纯 CSS 无注册的颗粒会冻结。
  • 片段数上限:视频底轨 + 颗粒总数 ≤ 200。
  • 按成片时长计费:以成片总时长(分钟)计费;含逐帧渲染,耗时与时长/复杂度相关,建议每 5 ~ 10 秒轮询一次。
  • 适用场景:本接口面向长视频底轨贯穿 + 透明颗粒叠加(人物出镜 + 图形叠加不挡主体);若是不透明全屏切入 / 短片段 / 纯 HTML 动画,请用更轻快的 HTML 动画渲染(单点)
  • 与时间线渲染互补:单轨快速硬切用 视频时间线渲染;视频底轨 + 自定义动画颗粒用本接口。