AI MediaKit 的多轨道剪辑工具,支持视频、音频、图片、文字、字幕等多轨道编辑,同时支持转场、特效、花字、滤镜、裁剪、变速、音量调节等增强效果。您通过一个结构化的 track 时间线,配合 canvas(画布)、output(输出)等配置,以声明式的方式描述完整的剪辑意图,工具即可据此合成最终成片。任务完成后,您将获得合成产物的下载地址。多轨道剪辑适用于短视频批量合成、模板化二次创作、图文视频混排、画中画、分屏视频墙等场景。
核心概念
多轨道剪辑的所有参数都围绕画布 → 轨道 → 元素 → 滤镜这一四层模型组织。四层之间是自顶向下的包含关系:画布承载多条轨道,轨道容纳多个元素,元素再叠加滤镜。
在时间线上,多条轨道自下而上叠放,每条轨道内的元素按 target_time 先后排列:
画布(Canvas)
画布定义了最终输出视频的分辨率和背景色,是所有视觉元素的渲染底板。您可以通过 canvas.width/canvas.height 直接指定分辨率(单位:像素,取值范围 [160, 8192]),通过 canvas.background_color 指定背景色。若不传 canvas,系统会根据输入资源与输出配置自动确定画布。详见自定义画布。 轨道(Track)与渲染层级
track 是多轨道剪辑的核心,定义了剪辑的时间线。您可以把它想象成专业剪辑软件中的多层轨道,用于在时间和空间上组织所有内容。track 本身是一个二维数组,格式为 track[轨道索引][元素索引]:
- 第一维(外层数组):代表轨道列表。索引 [轨道索引] 决定了轨道的渲染层级。track 数组中索引越大,轨道层级越高,高层轨道的视觉内容会覆盖在低层轨道之上。
- track[0]:最底层,通常放置背景视频或主视频。
- track[1]:位于 track[0] 之上,可放置画中画、贴纸、动态特效等。
- track[2]:位于 track[1] 之上,可放置全局文字标题或字幕,以此类推。
- 第二维(内层数组):代表单条轨道,包含在该轨道上排列的一个或多个元素。同一轨道内的多个元素在时间上可以前后相接,但不应重叠。
元素(Element)类型
每个元素通过 type 指定类型,通过 target_time 指定其在输出时间线上的起止位置。素材类元素通过 source 指定素材地址,文字类元素通过 text 指定文本内容。支持的元素类型如下:
滤镜(Filter)分类
滤镜是附加在元素上的特殊效果,定义在元素的 extra 数组中。一个元素可以叠加多个滤镜。每个滤镜通过 type 指定类型,并携带该类型的专属字段。
您可以根据元素的性质,将它们放置在不同的轨道上,以实现复杂的视觉叠加和音频混合效果。
- 视觉轨道:包含 video、image、text、effect 等具有视觉表现的元素,在合成时遵循「上层覆盖下层」的渲染规则。常见布局实践:
- 轨道 1(中层):放置画中画视频、贴纸或动态特效。
- video 和 image 元素可以放在同一个轨道上。
- subtitle 元素必须独占一个轨道,且字幕轨道总数不超过 10 条。
- 音频轨道:包含 audio 元素,以及 video 元素自带的音轨,在合成时遵循「混音」规则(而非覆盖)。您可以创建一个或多个专门放置 audio 元素的轨道,例如:一个轨道放全程背景音乐,另一个轨道放特定时段的旁白或音效。
快速体验:合成一个含花字的视频
本节将演示如何合成一段视频并在其上叠加一段花字,帮助您跑通多轨道剪辑的完整异步流程。
准备工作
- 获取访问凭证:在开始之前,访问 AI MediaKit 控制台 API Key 管理页面,创建并获取 AI MediaKit API Key。
- 准备素材文件:准备待合成的视频、音频、图片等素材,并将其上传至公网可访问的服务器或视频点播服务中,以获取可供 API 调用的 URL。
操作流程
多轨道剪辑是一个异步任务,完整的调用流程如下:
- 成功调用 POST /api/v1/tools/multi-track-edit 提交任务后,API 将返回一个任务 ID(task_id)。
- 任务完成后,从响应的 result 字段中获取输出视频下载地址(video_url)。
第 1 步:提交多轨道剪辑任务
您需要调用提交多轨道剪辑任务 API。可直接复制以下 cURL 命令,提交一个多轨道剪辑任务:第一条轨道放置一段视频(0~5000 毫秒),第二条轨道叠加一段花字(0~3000 毫秒)。 说明
- 将 {Your_API_Key} 替换为您的有效 API Key。
- track[][].source:替换为您自己的素材地址。
请求成功后,您会收到如下包含 task_id 的响应,请保存此 ID 用于后续查询。
第 2 步:获取任务结果
多轨道剪辑需要一定处理时间,您需要通过轮询查询任务信息 API来获取最终结果,直到任务状态变为 completed。 说明
将 URL 末尾的 {task_id} 替换为第 1 步返回的任务 ID。
任务成功完成后,您将收到如下响应。result.video_url 即为输出视频的下载地址(签名 URL,有效期 24 小时,请及时下载保存),同时返回输出总时长(duration,单位秒)与输出分辨率(resolution)。
进阶使用
在跑通基础流程后,您可以通过下列参数进一步控制输出效果。
控制输出封装与帧率
通过 output 对象配置可控制输出的封装格式、帧率、是否含 alpha 通道以及音视频开关。以下示例演示了如何仅输出音频,并封装为 MP3 格式。 自定义画布
通过 canvas 参数可定义最终输出视频的分辨率、背景色和比例策略:
- canvas.width 和 canvas.height:直接指定画布宽高(单位:像素,取值范围 [160, 8192]),也支持表达式(见示例 7:通过表达式指定画布宽高)。
- canvas.background_color:画布背景色(RGBA 十六进制),如 #000000FF。
- 按比例生成画布:配合 output.canvas_with_ratio=true,使用 canvas.long(长边)、canvas.short(短边,优先级高于 long)、canvas.ratio(如 16:9)和 canvas.index(对齐方向的元素索引,MAX 表示跟随最大分辨率资源)。
- 跟随最大分辨率:设置 output.canvas_with_max=true,让画布分辨率与输入资源中的最大分辨率保持一致。
说明
画布分辨率优先级(由高到低):canvas.width/canvas.height(Int 型)> output.canvas_with_max > output.canvas_with_ratio > canvas.width/canvas.height(String 表达式)。
以下示例演示了如何设置一个 1080x1920、黑色背景的自定义画布。
注入 AIGC 元数据标识
如需为生成式内容添加合规标识,可通过 传入 AIGC 元数据的 JSON 对象字符串。其字段遵循国家《人工智能生成合成内容标识办法》相关规范,常用字段包括 Label、ContentProducer、ProduceID 等。
常见场景示例
以下示例覆盖多轨道剪辑最常见的场景。
场景:将多个独立的视频片段按时间顺序拼接,并在片段之间添加转场动画,使衔接更自然。
实现要点:转场滤镜 transition 用于在同一条轨道的相邻视频元素(下文称 A 和 B)之间创建过渡效果,并且必须添加在前一个元素(A)的 extra 数组中。根据您设置 target_time 的方式和所选转场资源的不同,分为非交叠转场和交叠转场两种模式。
- 交叠转场:前后两个元素在时间线上需要有重叠部分,转场效果将在该重叠时段内发生。所有转场类型都支持此模式。
- 实现方式:设置 A 元素的 target_time 和 B 元素的 target_time 使其重叠,重叠时长应等于或大于 transition 的 duration。
- 示例:A 的 target_time 为 [0, 5000],B 的 target_time 为 [4000, 9000],在 A 上设置 duration 为 1000 的转场。效果将在 [4000, 5000] 区间内呈现。
- 示例代码(交叠转场):以下示例将两个视频的时间线重叠 1000ms,并使用“风车”转场在重叠区域创建过渡。
- 非交叠转场:前后两个元素在时间线上精确衔接,无重叠。转场效果发生在衔接点,系统会自动将 A 元素的末尾和 B 元素的开头进行重叠以应用转场。
- 实现方式:设置 A 元素的 target_time 结束时间等于 B 元素的 target_time 开始时间。
- 限制:仅当转场 ID表格中“是否可用于非交叠转场”标记为“是”的转场资源才支持此模式。 若对不支持的资源使用此模式,转场不会生效。
- 示例:A 为 [0, 5000],B 为 [5000, 10000],在 A 上设置 duration 为 1000 的非交叠转场。实际效果是 A 在 4500ms 结束,B 在 5500ms 开始,中间 [4500, 5500] 为转场动画时间。
- 示例代码:以下示例将两个视频无缝拼接,并使用“晚霞转场”进行过渡。
示例 2:视频多段截取合成
场景:从一个长视频中截取多个不连续的精彩片段,重新合成为一个集锦视频。
实现要点:
- 在同一条轨道上,为同一个源视频创建多个 video 元素。
- 每个元素使用 trim 滤镜指定从源视频中截取的原始时间段。
- 每个元素的 target_time 定义该截取片段在最终时间线上的新位置。
示例 3:多视频空域拼接(分屏视频墙)
场景:将三个独立视频在空间上垂直排列,拼接成一个更高分辨率的视频,常用于视频墙、对比展示。
实现要点:
- 设置画布尺寸:创建一个能容纳所有视频拼接后总尺寸的画布。本例假设每个源视频为 1280×720,则最终画布宽 1280、高 720×3 = 2160。
- 精确定位:为每个视频添加 transform 滤镜,通过 pos_x、pos_y 设置其在画布上的左上角坐标。
- 时间对齐:所有视频元素的 target_time 保持一致,以确保它们同时播放。
场景:在主视频之上叠加一个缩小的画中画视频(如解说小窗、双人同框)。
实现要点:
- 主视频放在底层轨道(track[0]),铺满整个画布。
- 画中画视频放在上层轨道(track[1]),通过 transform 滤镜缩小尺寸并定位到画面一角(本例定位到右下角)。
- 上层轨道渲染在下层之上,因此画中画会叠加显示在主视频上方。
示例 5:添加背景音乐和文字标题
场景:为一个视频添加全程背景音乐和居中的文字标题。
实现要点:
- 音频元素的 target_time 覆盖整个视频时长,并可用 a_volume 滤镜降低音量。
- 文字元素通过 transform 滤镜控制其在画布上的位置和大小,通过 align_type 控制文本对齐方式。
示例 6:添加字幕文件并应用滤镜
场景:为一个视频添加 SRT 格式字幕文件,并对整个视频应用“老友记”风格的调色滤镜。
实现要点:
- 字幕元素(type: "subtitle")必须独占一条轨道,其 text 字段填字幕文件的公网可访问 URL。
- 调色滤镜通过 lut_filter 实现,作为 extra 添加到视频元素上,source 填滤镜 ID。
示例 7:通过表达式指定画布宽高
场景:让画布尺寸自动匹配某个元素的宽高,无需手动填写分辨率。
实现要点:canvas 的 width/height 支持通过表达式引用某个元素的宽高,格式为 $轨道索引|元素索引.w(宽)或 .h(高)。以下示例让画布宽高自动取 track[0][0] 元素的宽和高。
示例 8:添加高斯模糊背景
场景:将一个较小的视频居中放置,并让其背景呈现高斯模糊效果。
实现要点:在 video 元素上同时添加 transform(定位与缩放)和 gaussian(背景模糊)滤镜。若画布分辨率与素材分辨率不一致,系统会自动等比缩放并居中裁剪原视频,然后将模糊后的版本作为背景。
示例 9:对元素进行高斯模糊
场景:对整个元素本身进行高斯模糊处理。
实现要点:使用 gaussian 元素类型,并为其添加 gaussian 滤镜。这与示例 7 不同,此方法不是生成模糊背景,而是将 source 指向的资源本身整体模糊化。
场景:为画面元素添加入场、出场动画,提升视觉表现力。
实现要点:
- 视频/图片元素通过 video_animation 滤镜添加动画,anim_res 填视频动画 ID,并用 anim_start_time/anim_end_time 指定动画在元素内的作用时段(相对元素、单位毫秒)。
- 文字元素通过 text_animation 滤镜添加动画,可分别指定入场(anim_in_res + anim_in_duration)、出场(anim_out_res + anim_out_duration)。入场与出场时长之和须小于文字展示时长。
参考信息
计费说明
多轨道剪辑按输出视频时长(结合输出分辨率的计费换算系数)计费。关于详细的计费规则与价格,请参阅剪辑工具计费。 资源 ID
调色滤镜(lut_filter)、视觉特效(effect_filter)、转场(transition)、视频/文字动画(video_animation/text_animation)以及文字元素的花字(text_res)、字体(font_type)等,均通过资源 ID 引用预设素材。
滤镜 ID
用于 lut_filter 滤镜的 source 字段。
转场 ID
用于 transition 滤镜的 source 字段。
特效 ID
用于 effect_filter 滤镜的 source 字段。
视频动画 ID
用于 video_animation 滤镜的 anim_res 字段。
入场动画
出场动画
文字动画 ID
用于 text_animation 滤镜的 anim_in_res(入场)、anim_out_res(出场)、anim_loop_res(循环)字段。
入场动画
出场动画
循环动画
字体 ID
用于文字/字幕元素的 font_type 字段。除了使用下表中的预设字体 ID,您还可以通过为 font_type 字段传入 TTF/OTF 格式字体文件的公网可访问 URL 来使用自定义字体。
说明
火山引擎不提供方正系列字体的商业授权,如需商用,您必须自行联系方正公司获取,以免产生侵权风险。除方正系列字体外,其余均为开源字体,可放心商用。
花字 ID
用于文字元素的 text_res 字段。
相关 API 文档