字幕
目标:让观众毫不费力地阅读的字幕。每一条字幕都是一个简短、完整的语义单元,与精确的单词时间码对齐,并在整个视频中始终显示在同一个位置。
这是编辑顺序的第5步:A卷剪辑、B卷、画面裁剪、标题、字幕。它在完成画面裁剪和标题后的视频上运行,以便字幕不干扰标题。
此技能专为 Claude Code 和 Runneth 构建。
开始之前:工具
在 Runneth 中,所有工具都已安装:跳过此部分。
在 Claude Code 中,此技能需要 video-editing-setup 技能安装的免费视频工具。请静默检查 ~/.video-editing-tools/bin/ffmpeg -version 是否能运行。如果能运行,请在本技能中使用 ~/.video-editing-tools/bin 目录下的工具(ffmpeg、ffprobe、python)来代替 ffmpeg、ffprobe 或 python3,然后继续。如果不能运行,请先按照 video-editing-setup 技能进行操作,然后再回到此处。
字体: Figtree Bold,此技能唯一使用的字体。它是一种免费的 Google 字体。请静默检查该字体是否已安装在计算机上或项目旁边的 fonts 文件夹中。如果没有,请询问:“这里使用的 Figtree 是一种免费的 Google 字体。需要我为您下载吗?”如果回答是,请从 Google Fonts(fonts.google.com/specimen/Figtree)下载 Figtree Bold 文件到项目旁边的 fonts 文件夹中,然后继续。此检查同样适用于 Runneth。
需要的内容
- 已裁剪好并带有标题(或其时间码)的视频。
- 脚本(如果有),以确保名称和产品单词拼写正确。
- 标题在屏幕上的显示时间及其位置。
第 0 步:先询问样式
逐个询问以下问题,每次等待回答:
- “您希望字幕每次显示一个单词,还是每次显示几个单词?”
- 仅当选择“每次几个单词”时:“您希望正在说的单词以不同颜色高亮显示吗?”
- 仅当回答“是”时:“使用哪种颜色?”建议使用亮黄色 (#FFFF3A) 作为默认颜色,或使用其品牌色。
第 1 步:获取每个单词及其时间码
- 使用 faster-whisper
base模型(word_timestamps=True、vad_filter=False)转录视频自身的声音并获取单词时间码。时间码必须来自当前这个确切的视频,因为每次剪辑都会改变它们。 - 使用脚本中的拼写来校正名称、品牌和产品词汇,同时保留转录的时间码。
- 每个说出的单词都应有对应的字幕。未说出的内容不应添加字幕。
第 2 步:按语义拆分为短语(仅适用于“每次几个单词”模式)
- 通常每个短语 1 到 3 个单词,最多约 5 个,以便在保持短语完整性的同时适应宽度。
- 保持以下内容在一起: 名词及其修饰词(“a sleep drink”)、名称(“Claude skill”)、动词及其附属词(“go to bed”)以及短小的完整想法(“but that's how I felt”)。
- 每个短语以承载意义的单词结尾。 小词(the、a、of、to、and、because、that、I)应放在下一个短语的开头。
- 每个短语从其第一个单词开始显示,直到下一个短语开始,确保屏幕在句子中间不会出现空白闪烁。
- 通读整个列表(像观众一样),修复任何读起来拗口的断句位置。
第 3 步:外观
每条字幕均使用 Figtree Bold 字体,白色,带黑色描边。无背景框、无阴影、无弹出或弹跳动画:字幕只是简单地出现。大部分使用小写字母,仅 I、名称和品牌首字母大写,并且末尾不加句号或逗号。
- 每次一个单词: 约 140px,6px 描边,屏幕上一次显示一个单词。每个单词保持显示直到下一个单词开始。长单词将缩小以适合约 720px 宽度。跳过第 2 步中的短语拆分过程。
- 每次几个单词: 约 60px,3px 描边,使用第 2 步中生成的短语。
- 单词高亮模式: 在短语内部,正在说的单词会变为所选颜色,卡拉 OK 风格。
- 非高亮模式: 整个短语保持白色。
第 4 步:放置位置
- 居中,位于胸部高度,在 1080x1920 视频中大约 y 1260 到 1305 的位置:在下巴下方,在应用程序的字幕和按钮上方。
- 在安全区域内: 安全区域来自 post-preview 技能:在 1080x1920 帧上,将所有内容保持在 x 100 到 880,y 290 到 1340 范围内(这个框同时适用于 Reels、Stories、Feed、TikTok 和 Facebook)。当某些内容靠近边缘时,请参考 post-preview 以了解特定位置的确切覆盖区域。因此,居中的字幕(包括每个字母的描边)应保持在 x 200 到 880(约 680px 宽)以及 y 1340 以内。测量每个短语的宽度;过宽的短语将被拆分开。
- 避开标题。 当标题在屏幕上显示时,字幕应位于其下方并保持明显间距;当标题位置较低时,字幕应在安全区域内向下移动,而不是与标题重叠。
- 在整个视频中保持同一个位置,以便观众的眼睛始终知道在哪里寻找。
- 字幕位于嘴巴下方,切勿覆盖脸部。 每条字幕必须避开眼睛、鼻子和嘴巴。如果脸部位置过低,导致字幕放置区域会覆盖脸部,则说明是画面裁剪有问题:将其退回裁剪步骤进行修复(或在修复期间将字幕在安全区域内向下移动)。
第 5 步:构建与烧录
- 将字幕编写为 ASS 字幕文件。在单词高亮模式下,为每个单词使用一个事件,以便颜色随语音移动。字母间距使用内联的
\fsp标签设置。 - 将渲染器指向仅包含 Figtree Bold 文件的 fonts 文件夹,以确保使用正确的字重:
ass=captions.ass:fontsdir=fonts。 - 从全质量视频一次完成烧录(x264、slow 预设、crf 14 到 18),音频原样复制不做处理。
第 6 步:在公开前检查
- 每个单词出现一次,且时间准确: 逐字比对字幕列表与转录稿。
- 每个短语截图一帧检查: 确保在安全区域内,无内容截断,不与标题重叠,并且整个字幕位于嘴巴下方。使用人脸检测器或逐帧检查;任何覆盖脸部部分区域的字幕均视为检查不通过。
- 在单词高亮模式下,颜色应准确地落在正在说的单词上,在视频的几个时间点进行检查。
第 7 步:从编辑者那里学习
当编辑者更改了短语拆分、某个单词或外观时,请询问原因(除非他们主动说明)。将理由作为一条规则写入下方的“来自编辑者的字幕规则”中,使用应成立的描述方式。由你自己得出的原因应标记为“(AI)”,并且绝不更改已有规则。
来自编辑者的字幕规则
(初始为空。每次编辑者给出规则时添加。)