Legenda Impacto(冲击力字幕)
适用于 Reels/Shorts/TikTok 的高冲击力字幕模板。当用户要求使用此模板为视频添加字幕时,请按以下说明直接应用,无需再次询问参数。
前置条件
- Premiere Pro(已在 2027/27.0 版本上测试;使用 ExtendScript)和 Python 3.9+,需安装依赖
pip install -r requirements.txt(Pillow)。 - 一种在 Premiere 中执行 ExtendScript 的方式:Premiere 的 MCP(
execute_extendscript)或 CEP 文件桥接——详见仓库根目录下的docs/PREMIERE-BRIDGE.md。 - 字体:Impact(Windows 和 macOS 自带)和可选的 Anton。如果找不到字体,请设置
CAPTION_FONT_DIR。 - 逐词
.mogrt包(*_WbW.mogrt)位于assets/——仓库中不包含(参见assets/LEIA-ME.md)。这些是包含“Anim Speed”/“Out Animation”控件和一个文本字段的 Essential Graphics 模板。
参数(以 style.json 和 scripts/plan_blocks.py 为准)
- 格式 9x16(1080x1920)。文本大写,居中,
y_center0.54(略低于中部)。 - 字体 Impact。小行 56 px(白色),大行 140 px,直排 76 px;可缩小以适应(最小 60%)。
- 语块 1 至 6 个单词,按标点、停顿 > 0.45 秒或持续时间 > 3.3 秒分割;永远不以孤立单词(如“的”、“了”、“在”等)结尾。
- 语块类型:
big_below(上方小行 + 下方大行,默认)、big_above(强语气词大行在上方)、single_big、single_small和 直排(1 行,若较长则 2 行,标准大小,白色)。每个语块有 40% 概率变为直排,同一类型最多连续 2 个。 - 当含有数字/金钱/强语气词(
strong列表)时,大行使用红色#F2381C,最多连续 2 个红色,若已过 4 个语块未出现红色则强制使用 1 个。 - 动画:逐词
.mogrt,按语块从assets/中现有模板随机选择,且不与上一个语块重复;同一语块的两行使用同一个模板。以硬切方式输出(关闭 Out Animation)。Anim Speed 为 150(若语块时长 < 1 秒则为 200)。 - 安全边距(固定规则):文本不得超出 Premiere 的标题安全区(80% x 80% = 每边 10% 边距)。在
make_graphics_script.py中实现(layout_text+clamp_y;style.json中的safe_margin_x/y和safe_tolerance):可用宽度 = 1 - 2*0.10 - 0.02 = 宽度的 78%(在 1080 中为 842 px)。无法容纳的行:1)缩小至min_scale(60%);2)若仍无法容纳,则拆分为 2(最多 3)行,平衡切割并仅缩小所需尺寸;尺寸向下取整,因此最长行始终不超过边距。整个语块也位于高度的 10% 至 90% 之间。 - 交付:直接在用户指定的序列中编辑(不创建副本),除非用户要求复制。
分步操作
- 检查项目:与用户确认当前打开的项目/序列,并将目标序列设为活动状态(ExtendScript 作用于活动序列)。
- 转录:用户从 Premiere 导出 JSON(文本 > 转录 > 菜单 ... > 导出;文件位于“文档”文件夹,名为“<序列名>.json”)。
- 计划:运行
PYTHONIOENCODING=utf-8 python -I <skill>/scripts/plan_blocks.py <转录文件.json> <文件夹>/blocks.json。显示摘要和[待确认]的单词(置信度 < 0.75)。在blocks.json中修正错误(small/big字段)。 - 轨道:列出视频轨道。V1 = 视频。使用 V2(索引 1)放置小行,V3(索引 2)放置大行/直排,并在所有轨道之上新建一条轨道(索引 = 当前轨道数)放置红色文本。如果存在覆盖画面的旧字幕/标题片段,请关闭它们。
- 生成批次:运行
python -I <skill>/scripts/make_graphics_script.py blocks.json <文件夹>/lote.js --tracks 1,2,<红色轨道索引> [--seed N]→ 生成lote_01.js...(每批 8 个片段)和lote_clips.json。 - 运行前检查边距:运行
python -I <skill>/scripts/check_margins.py <文件夹>/lote_clips.json— 结果必须为超出边距: 0(最大宽度 <= 78%)。 - 在 Premiere 中逐批运行(ExtendScript,
script字段,IIFE 带 return,仅JSON.parse/stringify),一次一个批次,确认ok=8/8。如果桥接出现波动,请在每个批次前检查连接。切勿一次性发送所有批次(几十个片段同时发送会导致 Premiere 卡死)。 - 红色处理:列出红色轨道上的片段,并应用“色彩平衡 (RGB)”效果(英文名“RGB Color Balance”),设置红色 242、绿色 56、蓝色 28。每个片段仅应用一次——重复应用会使效果重复并导致红色变暗(如果再次运行,请删除并重新创建红色轨道上的片段)。
- 验证:回读片段的文本/字体/大小/位置,并重新运行
check_margins.py;如果帧导出功能可用,则导出 3-4 帧(一张红色、一张直排、一张两行),否则请用户开启边距参考线进行目视检查。保存项目。 - 交付:告知用户已完成的工作、存疑的单词,以及未在任何动态中检查过。
快速调整
| 需求 | 修改位置 |
|---|---|
| 大小/字体/位置 | style.json(mogrt_size_small/big/plain、mogrt_font、y_center、gap) |
| 边距 | style.json 中的 safe_margin_x/y、safe_tolerance |
| 增加/减少直排字幕 | --plain-prob(默认 0.4) |
| 改变随机性 | --seed |
| 增加/减少红色、更大/更小的语块 | plan_blocks.py 中的 RULES 或 --config rules.json |
| 修正文本 | 编辑 blocks.json 并重新生成批次 |
备选方案:透明视频(仅当 Premiere 不接受 .mogrt 时)
运行 render_captions.py blocks.json out.mov --duration <秒> --fps 30 生成带 Alpha 通道的 ProRes 4444 文件(5 帧“弹出”入场,原生红色,不可编辑)。将其作为导入的媒体放入时间线。渲染 45 秒大约需要 5 分钟。
已知限制
- 动画按照模板的时长播放,而非每句口语的精确时刻。
- 脏话替换(如“f*ck”)不是自动的(需在
blocks.json中编辑)。 - 句子切割可能显得不自然;请在运行前审查语块列表。
.mogrt的颜色无法通过脚本更改(因此对红色片段使用颜色效果)。