视频字幕擦除
简介
字幕擦除(去字幕)指通过 AI 模型自动识别视频画面中的内嵌硬字幕(区别于外挂字幕),并对字幕区域做无痕填充,输出不含字幕的新视频,常用于短剧/影视出海、二次创作等场景。
MCP字幕擦除通过「视频转码模板(Preset) + 视频转码任务(Job)」组合使用,二者分工固定:
- 模板:决定是否开启擦除、使用哪个擦除模型、使用哪种擦除模式(
extraCfg.autoDesubtitle、extraCfg.subtitleType)。 - 任务:决定擦除的时间段、区域与字幕语言(
target.desubtitleParams、target.desubtitleLang)。
擦除模式与模型的组合已有对应的系统内置模板,无特殊输出要求时可直接引用,无需自建模板。
能力总览
擦除模式
| 擦除模式 | subtitleType参数取值 | 检测与擦除范围 | 时间段+区域设置 | 典型场景 |
|---|---|---|---|---|
| 自动擦除对白字幕 | auto_dialog_subtitle |
自动检测并擦除画面中下部的对白字幕(内部策略结合文字的分布特点智能区分对白字幕与其他文字) | 不支持 | 影视剧、访谈等字幕位置标准、背景文字较少的场景 |
| 自动擦除全局字幕 | auto_global_subtitle |
自动检测画面内所有字幕;支持在任务中通过desubtitleParams参数指定时间段+区域,此时仅在限定范围内检测并擦除字幕 | 支持 | 需要擦除非对白字幕的场景 |
| 手动指定字幕擦除 | manual_subtitle |
不做字幕检测,直接擦除指定时间段和区域的全部物体,不局限于字幕,如水印和场景中的人物、物品也可能被擦除 | 必须设置 | 自动模式漏擦的兜底补擦;用户有自己的字幕检测能力;擦除复杂字幕或字幕以外的物体 |
自动模式通常能给出较准确的字幕位置,但在字幕样式特殊、分布复杂等情况下可能漏检或误检:
auto_global_subtitle的区域限定可用于降低误擦,manual_subtitle可用于补齐漏擦,两者可分别提交任务组合使用。
擦除模型版本
| autoDesubtitle参数取值 | 模型 | 特点 | 使用限制 |
|---|---|---|---|
| 3 | v3 | 效果与速度相对平衡的模型,复杂场景处理后原字幕区域可能有一定模糊或波纹痕迹 | 限华北-北京区域使用,需使用智感超清队列创建任务 |
| 4 | v4 | 使用生成式技术补全擦除区域细节,效果更好但速度偏慢 | 限华北-北京区域使用,需使用智感超清队列创建任务 |
模板未设置 autoDesubtitle(默认 NULL)即不开启字幕擦除。
系统内置去字幕模板
系统已按「擦除模式 × 模型版本」的组合内置了一组去字幕模板,如您对转码参数无特殊要求,可直接在转码任务的 presetName 中引用系统模板名,不需要自建模板。系统模板统一使用follow_source转码模式,在转码时保障输入输出的码率相近。
| 模板名 | 擦除模式 | 模型 | 描述 |
|---|---|---|---|
| mcp.desubtitle_auto_dialog | 自动擦除对白字幕 | V3 | 自动去除对白字幕,V3模型,效果与速度相对平衡 |
| mcp.desubtitle_auto_global | 自动擦除全局字幕 | V3 | 自动去除全局字幕,V3模型,效果与速度相对平衡 |
| mcp.desubtitle_manual | 手动指定字幕擦除 | V3 | 手动去除字幕,需要在任务中添加字幕区域信息,V3模型,效果与速度相对平衡 |
| mcp.desubtitle_auto_dialog_v4 | 自动擦除对白字幕 | V4 | 自动去除对白字幕,V4模型,效果更好但速度偏慢 |
| mcp.desubtitle_auto_global_v4 | 自动擦除全局字幕 | V4 | 自动去除全局字幕,V4模型,效果更好但速度偏慢 |
| mcp.desubtitle_manual_v4 | 手动指定字幕擦除 | V4 | 手动去除字幕,需要在任务中添加字幕区域信息,V4模型,效果更好但速度偏慢 |
使用系统模板请注意:
desubtitleParams、desubtitleLang属于任务参数,使用系统模板时同样可以正常设置。- 系统模板不支持修改参数,如需调整参数,可先查询系统模板的完整信息,基于其修改后新建模板
快速开始
整体流程:选择(或创建)去字幕模板 → 用该模板创建转码任务 → 查询任务并获取输出文件。
第 1 步:选择或创建去字幕模板
方式一(推荐):直接用系统内置模板。 按「擦除模式 + 模型版本」从上方表格选一个模板名,本步骤无需任何调用。例如自动擦除对白字幕、V3 模型,选 mcp.desubtitle_auto_dialog。
方式二:自建模板。 需要自定义输出容器、分辨率、码率、水印等参数时使用,接口详见 视频转码模板:
1POST /v3/preset HTTP/1.1
2host: media.bj.baidubce.com
3content-type: application/json
4authorization: {bce-authorization-string}
5
6{
7 "presetName": "mcp.desubtitle_auto_global_v4",
8 "description": "自动去除全局字幕,V4模型,画面填充细节好,但速度较慢",
9 "container": "mp4",
10 "transmux": false,
11 "audio": {
12 "bitRateInBps": 128000,
13 "sampleRateInHz": 44100,
14 "channels": 2,
15 "codec": "aac"
16 },
17 "video": {
18 "codec": "h264",
19 "codecOptions": {
20 "profile": "main"
21 },
22 "rateControl": "follow_bitrate",
23 "sizingPolicy": "keep",
24 "autoAdjustResolution": false
25 },
26 "extraCfg": {
27 "autoDesubtitle": 4,
28 "subtitleType": "auto_global_subtitle"
29 }
30}
第 2 步:创建字幕擦除任务
接口详见 视频转码任务。pipelineName 填智感超清队列,target.presetName 填第 1 步选定的模板名(下例直接使用系统模板):
1POST /v3/job/transcoding HTTP/1.1
2host: media.bj.baidubce.com
3content-type: application/json
4authorization: {bce-authorization-string}
5
6{
7 "pipelineName": "your_mcp_pipeline",
8 "source": {
9 "clips": [
10 {
11 "bucket": "example_bucket",
12 "sourceKey": "input.mp4"
13 }
14 ]
15 },
16 "target": {
17 "targetBucket": "example_bucket",
18 "targetKey": "desub_output.mp4",
19 "presetName": "mcp.desubtitle_auto_dialog",
20 "desubtitleLang": "zh-CN"
21 }
22}
第 3 步:查询任务并获取结果
1GET /v3/job/transcoding/{jobId} HTTP/1.1
jobStatus为SUCCESS后,到输出 Bucket 的targetKey获取擦除后的文件。jobStatus为FAILED时,查看error.code/error.message,对照下文「失败与错误码排查」。- 也可在任务中通过
target.jobCfg.notification配置回调地址,自动接收任务状态通知,避免轮询。
参数说明
模板参数(Preset.extraCfg)
使用系统模板时无需配置。
| 字段名称 | 字段类型 | 必要性 | 字段描述 | 可选值 | 默认值 |
|---|---|---|---|---|---|
| autoDesubtitle | Integer | 擦除模型版本 | 3、4 | NULL(不开启) | —— |
| subtitleType | String | 可选 | 擦除字幕类型 | auto_dialog_subtitle、auto_global_subtitle、manual_subtitle | —— |
任务参数(Job.target)
| 字段名称 | 字段类型 | 必要性 | 字段描述 | 可选值 | 默认值 |
|---|---|---|---|---|---|
| + desubtitleParams | Array | 可选 | 智能去字幕参数。当且仅当模板参数subtitleType配置auto_global_subtitle和manual_subtitle可设置,支持设置多个时间段及其区域。auto_global_subtitle时表示仅擦除设置时间段中限定区域检测出的字幕(区域过滤)。manual_subtitle时表示仅擦除设置时间段中指定区域内的所有像素(区域指定) | - | - |
| ++ startTimeInMillisecond | Number | 可选 | 字幕擦除限定时间段起始时间,单位:毫秒 | - | -1 (代表视频开始时间点) |
| ++ endTimeInMillisecond | Number | 可选 | 字幕擦除限定时间段结束时间,单位:毫秒 | - | -1 (代表视频结束时间点) |
| ++ areaList | Array | 可选 | 字幕擦除限定/指定区域,每个时间段最多5个。 auto_global_subtitle模式为相对坐标,x、y、with、height在0~1之间,例如 (x,y,width,height)=(0.0, 0.1, 0.2, 0.2) manual_subtitle模式下为绝对坐标(像素),例如 (x,y,width,height)=(50, 50, 120, 50) 坐标不可超出画面边界 |
- | - |
| +++x | Float | 可选 | 区域相对左上角的x(横)坐标,左上角为0 | - | - |
| +++y | Float | 可选 | 区域相对左上角的y(纵)坐标,左上角为0 | - | - |
| +++width | Float | 可选 | 区域横向宽度 | - | - |
| +++height | Float | 可选 | 区域纵向高度 | - | - |
| +desubtitleLang | String | 可选 | 需擦除的语言。选择目标语言将使用在该语言上检测精度最高的模型,但仍有可能检测到其他语言,例如中文模型同时也会检测英文 | zh-CN:中文简体 zh-TW:中文繁体 en-US:英文 fr-FR:法语 de-DE:德语 es-ES:西班牙语 pt-PT:葡萄牙语 ru-RU:俄语 ja-JP:日语 ko-KR:韩语 th-TH:泰语 ar-SA:阿拉伯语 id-ID:印尼语 vi-VN:越南语 |
zh-CN |
使用示例
自动擦除对白字幕
1{
2 "source": {
3 "clips": [
4 {
5 "bucket": "example_bucket",
6 "sourceKey": "input.mp4"
7 }
8 ]
9 },
10 "target": {
11 "targetBucket": "example_bucket",
12 "targetKey": "desub_output.mp4", # 字幕擦除的输出文件
13 "presetName": "mcp.desubtitle_auto_dialog" # 自动擦除对白字幕 + V3 模型
14 }
15}
自动擦除全局字幕
desubtitleParams 可不填,不填即全画面自动擦除;填写则表示只在限定时间段与区域内检测并擦除字幕。
1{
2 "source": {
3 "clips": [
4 {
5 "bucket": "example_bucket",
6 "sourceKey": "input.mp4"
7 }
8 ]
9 },
10 "target": {
11 "targetBucket": "example_bucket",
12 "targetKey": "desub_output.mp4",
13 "presetName": "mcp.desubtitle_auto_global", # 自动擦除全局字幕 + V3 模型
14 "desubtitleParams": [
15 {
16 "areaList": [ # 不设置起止时间,时间段为全片
17 {
18 "x": 0.0,
19 "y": 0.9,
20 "width": 1.0,
21 "height": 0.1
22 }
23 ]
24 },
25 {
26 "startTimeInMillisecond": 0,
27 "endTimeInMillisecond": 5000, # 设置起止时间,时间段为 0ms ~ 5000ms
28 "areaList": [
29 {
30 "x": 0.8,
31 "y": 0.3,
32 "width": 0.2,
33 "height": 0.4
34 }
35 ]
36 },
37 {
38 "startTimeInMillisecond": 4000, # 只设置起始时间,时间段为 4000ms ~ 片尾
39 "areaList": [ # 单个时间段最多 5 个区域
40 {
41 "x": 0.2,
42 "y": 0.3,
43 "width": 0.8,
44 "height": 0.4
45 },
46 {
47 "x": 0.0,
48 "y": 0.0,
49 "width": 0.2,
50 "height": 0.2
51 }
52 ]
53 }
54 ]
55 }
56}
手动指定字幕擦除
坐标为像素值,区域内的全部像素都会被擦除,desubtitleParams 必填。
1{
2 "source": {
3 "clips": [
4 {
5 "bucket": "example_bucket",
6 "sourceKey": "input.mp4"
7 }
8 ]
9 },
10 "target": {
11 "targetBucket": "example_bucket",
12 "targetKey": "desub_output.mp4",
13 "presetName": "mcp.desubtitle_manual", # 手动指定字幕擦除 + V3 模型
14 "desubtitleParams": [
15 {
16 "areaList": [ # 不设置起止时间,时间段为全片
17 {
18 "x": 660,
19 "y": 490,
20 "width": 50,
21 "height": 290
22 }
23 ]
24 },
25 {
26 "startTimeInMillisecond": 0, # 设置起止时间,时间段为 0ms ~ 5000ms
27 "endTimeInMillisecond": 5000,
28 "areaList": [ # 单个时间段最多 5 个区域
29 {
30 "x": 140,
31 "y": 630,
32 "width": 440,
33 "height": 60
34 },
35 {
36 "x": 280,
37 "y": 680,
38 "width": 160,
39 "height": 70
40 }
41 ]
42 }
43 ]
44 }
45}
效果与耗时参考
当前共开放3种模型,各模型在擦除效果和处理速度上存在差异,用户可根据自身需求选择,以下提供效果示例及处理倍速数据参考。
参考处理倍速如下表,实际任务倍速受视频规格、任务调度等因素影响,可能有一定浮动,数据仅供了解模型之间的差异。
| 模型版本 | 倍速 |
|---|---|
| V3 | 0.4 |
| V4 | 0.2 |
常见问题自查
有字幕没被擦掉(漏擦)
按顺序自查:
- 擦除模式是否匹配:对白字幕模式只处理画面中下部的对白字幕,其他位置的字幕需改用全局擦除模板。
- 语言是否匹配:
desubtitleLang默认zh-CN,非中文字幕需显式指定语种。 - 是否被区域限定挡住:全局擦除模式下一旦设置
desubtitleParams,就只在限定区域内检测并擦除字幕,确认区域已覆盖字幕的实际边界(含换行、超长行)。 - 时间段是否覆盖:确认
startTimeInMillisecond/endTimeInMillisecond覆盖了漏擦片段。 - 仍然漏擦(描边、艺术字、复杂背景导致检测失败):改用手动模板,对漏擦时间段与区域做兜底补擦,位置与时间要尽量准确。
不该擦的内容被擦掉了(误擦)
- 使用全局擦除模式时,补充
desubtitleParams,把擦除限定在字幕真实出现的时间段与区域内。 - 误擦对象是画面中下部的场景文字(招牌、条幅等)时,缩小限定区域高度,或按时间段拆分多组配置。
- 只需处理对白字幕时优先用对白字幕模板,检测范围更收敛。
- 手动模式下区域内所有物体都会被擦除,区域要贴合字幕,避免圈入人物、道具等主体。
相关文档
评价此篇文章
