火山引擎视频点播针对视频字幕提供精细化检测与擦除功能,实现高质量无痕擦除效果,最大程度还原视频画面。该功能支持擦除多语言字幕,还支持通过框选字幕位置进行擦除操作,避免误擦除,适用于短剧二次创作、教学视频制作、海外内容本地化等多种场景。本文为您详细介绍如何通过视频点播 OpenAPI 实现精细化字幕擦除。
无误擦、无漏擦、高质量擦除效果
项目 | 说明 |
|---|---|
支持擦除的字幕 | 字幕的样式对擦除效果影响很大,白色、无黑色阴影、大小合适、非花字、横向排列的字幕更易于擦除。 |
不适用的字幕 | 竖向排列的字幕、超大字幕、透明度高的字幕,不适合用本功能处理。 |
智能保护的内容 | 算法会尽量保护非字幕的文本,比如画面里的场景文字、备案信息、花字、地点信息、文字水印、剧情提示、人物提示、文字贴纸等。 |
输出视频分辨率 | 输出视频的分辨率与输入视频的分辨率保持一致。输入视频的分辨率大于 1080p 时,则默认按照 1080p 输出。 |
精细化字幕擦除功能按实际输出视频时长计费。我们提供两种使用方式,其计费价格有所不同:
使用方式 | 价格(元/分钟) | 适用场景 |
|---|---|---|
通过 Aideo Agent | 1 | 推荐用于快速体验、效果评测和轻量级的字幕擦除任务。 |
通过 | 4 | 推荐用于程序化、大批量的字幕擦除任务,适合深度集成到您的生产工作流中。 |
Aideo Agent 是火山引擎提供的一款视频 AI 应用智能体。您可以通过 Aideo Agent 快速、直观地体验字幕擦除的效果,或处理少量的视频任务。您无需编写任何代码,只需通过自然语言对话即可完成操作。关于 Aideo Agent 的详细介绍、开通方式和使用方法,请参见 Aideo Agent 快速开始。
以下步骤将指导您以最少的配置,快速实现针对中英文字幕竖屏短剧场景的字幕自动检测与擦除。
调用 StartExecution 接口提交字幕擦除任务。以下为任务的核心参数配置。关于完整的请求参数列表和详细说明,请参见 StartExecution API 参考。
Input: 指定输入文件。
Type: 设置为 Vid 或 DirectUrl。Vid / DirectUrl: 提供待处理文件的 Vid 或 FileName 信息。Operation.Task: 定义要执行的任务。
Type: 必须设置为 Erase,表示执行字幕擦除任务。Erase.Mode: 设置为 Auto,表示采用自动擦除模式。Erase.Auto.Type:设置为 Subtitle,表示仅擦除字幕。Erase.Auto.SubtitleFilter:设为空 JSON 对象 {}。Erase.NewVid:设置为 true,表示为擦除产物生成 Vid。此配置下,系统会自动识别并擦除满足以下条件的字幕:
请求示例:
POST https://vod.volcengineapi.com?Action=StartExecution&Version=2025-01-01 { "Input": { "Type": "Vid", "Vid": "your_video_vid" }, "Operation": { "Type": "Task", "Task": { "Type": "Erase", "Erase": { "Mode": "Auto", "Auto": { "Type": "Subtitle", "SubtitleFilter":{} }, "WithEraseInfo": true, "NewVid": true } } } }
以上参数配置的效果展示如下:
RunId,可用于后续查询任务结果。任务提交后,系统将在后台进行异步处理。您可以通过以下任一方式获取结果:
主动查询:调用 GetExecution 接口,并传入步骤 1 中获取的 RunId 来获取任务结果。
GET https://vod.volcengineapi.com?Action=GetExecution&Version=2025-01-01&RunId=hb:ebd05bee1f3873***f7316c742b5f
事件通知:
EventType 为 ExecutionComplete 的 HTTP POST 请求。当返回结果中的 Status 字段值为 Success 时,表示任务已成功完成。您可以在 Output.Task.Erase 字段中找到擦除后的产物信息。以下为产物相关的核心返回字段:
{ "ResponseMetadata": { // ... 已省略通用元数据 }, "Result": { "RunId": "hb:e3eb1668d43fa761420ac95057****", "Status": "Success", // ... 已省略任务元数据、输入、操作等信息 "Output": { "Type": "Task", "Task": { "Type": "Erase", "Erase": { "Duration": 57.099, "File": { "Size": "152295931", "FileName": "0b7c1420fee342e39792b847b8a****.mp4", "Vid": "v0ccfeg7007acsg***fog65ubr7niqng" }, "Info": { "Width": 1080, "Height": 1920, "Areas": [ { "Start": 0, "End": 57.08, "PixelRectangle": [ { "TopLeftX": 108, "TopLeftY": 960, "BottomRightX": 1067, "BottomRightY": 1919 } ] } ] } } } } } }
在步骤 2:获取任务结果中,您已经获取到了擦除产物的 Vid(仅当您在请求中设置了 NewVid: true 时返回)和 FileName。接下来,您需要将其转换为公网可访问的 URL,以便于播放或下载。
说明
前提条件:在获取文件的公网 URL 之前,您必须为产物所在的点播空间添加并配置一个加速域名。所有 URL 都将基于此域名生成。
调用 GetPlayInfo 接口,传入您获取到的 Vid。成功调用后,系统会在响应体 Result.PlayInfoList 中返回播放 URL。
一个基础的访问 URL 由以下部分组成:[Protocol]://[PlaybackDomain]/[FileName]
[Protocol]:通常为 https 或 http。取决于您是否配置 SSL 证书。[PlaybackDomain]:您在点播控制台配置的加速域名。[FileName]:您从任务结果中获取的产物 FileName。拼接示例:假设您的加速域名为 play.example.com,获取到的文件 FileName 为 video.mp4,那么拼接后的基础 URL 为:https://play.example.com/video.mp4
说明
为了防止资源被盗链,视频点播支持 URL 鉴权功能。如果您在视频点播控制台开启了 URL 鉴权,仅拼接基础 URL 还无法直接访问,您必须为其附加一个动态计算的鉴权参数(如 auth_key)。
https://play.example.com/video.mp4?auth_key=1732529334-0-0-a1b2c3d4e5f6...在 Auto 模式下,将 Type 设置为 Subtitle 仅会擦除被识别为“字幕”的文本。如果视频中除了字幕,还包含其他渲染文本(如文字水印、视频标题等),而您希望将它们一并擦除,则需要调整擦除类型,将 Type 参数的值从 Subtitle 修改为 Text。
{ "Input": { ... }, "Operation": { "Type": "Task", "Task": { "Type": "Erase", "Erase": { "Mode": "Auto", "Auto": { "Type": "Text" // 修改此处为 Text } } } } }
以上参数配置的效果展示如下:
此模式主要用于以下场景:
Auto 模式可能误擦除部分非字幕文本时,通过框选可以精准限定擦除范围。如何操作:设置 Erase.Mode 为 Manual,并通过 Erase.Manual.Locations 参数定义一个或多个擦除框的坐标。坐标值均为相对比例(0.0 ~ 1.0)。假设您想要将下图橙色区域作为擦除区域,则参数设置如下:
TopLeftX 设为 b1TopLeftY 设为 a1BottomRightX 设为 b2BottomRightY 设为 a2{ "Input": { "Type": "Vid", "Vid": "your_video_vid" }, "Operation": { "Type": "Task", "Task": { "Type": "Erase", "Erase": { "Mode": "Manual", "Manual": { "Locations": [ { "RatioLocation": { "TopLeftX": 0.10, "TopLeftY": 0.85, "BottomRightX": 0.90, "BottomRightY": 0.95 } } ] } } } } }
以上参数配置的效果展示如下:
有时您可能只想擦除视频的某一部分(如正片部分),而保留另一部分(如片头、片尾)的字幕。可通过 EraseOption.ClipFilter 参数定义一个或多个时间片段,并指定对这些片段执行 Selected(仅擦除选中片段)或 Skip(跳过选中片段,擦除其余部分)操作。
{ "Input": { ... }, "Operation": { "Type": "Task", "Task": { "Type": "Erase", "Erase": { "Mode": "Auto", "Auto": { "Type": "Subtitle", "SubtitleFilter":{} }, "EraseOption": { "ClipFilter": { "Mode": "Selected", // 模式:选中 "Clips": [ { "Start": 10.0, "End": 60.0 } ] } } } } } }
{ "Input": { ... }, "Operation": { "Type": "Task", "Task": { "Type": "Erase", "Erase": { "Mode": "Auto", "Auto": { "Type": "Subtitle", "SubtitleFilter":{} }, "EraseOption": { "ClipFilter": { "Mode": "Skip", // 模式:跳过 "Clips": [ { "Start": 0.0, "End": 15.0 } ] } } } } } }
若出现非字幕内容类型被误擦除的情况,建议您采用框选擦除,手动增加擦除框,仅对框内区域识别到的字幕进行擦除,降低误擦除的概率。