Files
capcut-mate/config/bubble.json
HommyandClaude Code 3cb4d10213 add_captions 新增 text_bubble 参数,支持剪映气泡字幕。
气泡在剪映数据模型里是第三种文字效果:素材是 materials.effects 中一条
type="text_shape" 的条目,由文本片段的 extra_material_refs 引用(追加在
sticker_animation 之后)。与花字同在 extra_material_refs 且互斥;与文字模板
不同,它不改片段的 material_id,也不重置文字样式。

气泡1 对照样本揭示的关键结构:气泡的 effect_id 与 resource_id 不是同一个值
(草稿中 effect_id="716434"、resource_id="6821385652727190024"),两者缺一剪映
就定位不到资源。因此参数取值支持名称、resource_id、effect_id,以及清单外的
"effect_id:resource_id" 显式 ID 对;纯数字不做透传(无法补全另一半),按未找到
处理并回退普通字幕。清单见 config/bubble.json,id 为 resource_id、effect_id
单独给出(与 text_template.json 里 id 兼作 effect_id 的约定不同)。

优先级 文字模板 > 气泡 > 花字:气泡与花字同属文字效果且互斥,气泡优先并告警;
模板掌管片段素材身份,优先级更高,模板生效时不处理气泡。气泡只提供文字底下的
装饰底板,不像花字那样重置 text_color/border_color/has_shadow——这点由草稿实证:
两条字幕(普通/带气泡)的样式字段完全一致。

气泡素材的名称/分类字段改为已知时写入、未知时保持最小结构,故 TextBubble 原
有的最小导出不变;add_bubble 新增 name/category_id/category_name/extra_material
四个可选关键字参数,extra_material 用于原样覆写本机缓存 path 等本服务无从得知
的字段(与 TextTemplateRef 的设计一致)。

清单目前只收录气泡1 草稿实证过的 1 个气泡,其余气泡靠显式 ID 对传入。速创小助手
的气泡页虽有 326 个气泡的名称与预览图(其名称即剪映气泡名,草稿里的「背景装饰54」
正在其中),但不提供 effect_id/resource_id(该站「特效」页才提供 id 对),故无法
直接批量导入,补齐 id 需在剪映「气泡」面板逐个确认。

未使用气泡时行为零变化:已用 HEAD 代码与改动后代码生成同一批普通字幕草稿(含
关键词高亮/描边/阴影/动画/样式/字体/花字/文字模板)做 UUID 归一化比对,12 个
用例逐字节一致。新增 tests/test_add_captions_text_bubble.py 14 项;字幕回归
套件 53 项通过。

已知限制:气泡素材的 path/request_id 等取决于创建者本机剪映缓存,本服务不导出,
由剪映按 effect_id/resource_id 自行拉取(花字即如此工作,但两者是不同素材类型与
渲染路径,属推断而非实测)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-14 18:11:51 +08:00

4 lines
138 B
JSON

[
{"id": "6821385652727190024", "effect_id": "716434", "title": "背景装饰54", "category_id": "bubble", "category_name": "气泡"}
]