Communitygithub.com

lower-thirds

该技能用于生成专业、品牌化的下三分之一字幕条(姓名/头衔),包含优雅的动画入场和退场效果。

lower-thirds 是什么?

Lower Thirds 技能专为视频制作场景设计,帮助用户快速创建高质量的姓名/头衔字幕条。它通常用于采访、访谈、播客、网络研讨会或广播节目中。该技能强调“克制”的设计哲学:一个清晰的文字层级、正确的安全区域放置,以及一个可驱动整个演讲者名单的模板化方案。它支持多种入场动画方式(如滑动淡入、擦拭条、遮罩揭示),并严格遵循广播安全区域标准(如16:9、9:16、1:1画幅)。所有动画基于帧驱动(而非时间或随机数),确保在浏览器和逐帧渲染器中高度一致。该技能的核心是提供一个可复用的组件,通过将姓名/角色/主题作为属性传入,实现一键批量生成多个风格统一的字幕条,大幅提升制作效率。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/iart-ai/tiktok-video-skills/tree/main/skills/lower-thirds

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

下三分之一字幕条

构建一个干净、品牌化的下三分之一字幕条(位于画面底部区域的姓名/角色说明),它具有入场动画、足够的停留时间,并在不破坏画面的情况下退场。其核心设计在于克制:清晰的揭示效果、强大的文字层级、正确的安全区域放置,以及一个可驱动整个演讲者名单的模板。

使用场景

  • 演讲者/受访者姓名标签、小组名单、人物头像配文。
  • 广播风格标题、新闻滚屏、播客/网络研讨会名牌。
  • 将一个设计模板化,应用于一系列姓名/头衔 → 生成多个片段(这是其价值所在)。

构成

一个下三分之一字幕条由两行文字和一个图形背景组成,放置在画面下部区域:

元素作用文字处理方式
姓名(主要)谁最大、最粗、字间距最紧
角色/头衔(次要)做什么/在哪里约为姓名大小的 45–60%,字重较轻,通常使用品牌强调色
条 / 面板 / 装饰确保在任何背景上可读实色或 70–85% 透明度;装饰线与品牌关联

保持两行。姓名行 + 角色行就是全部工作——额外的行会破坏层级并挤占安全区域。

防止廉价感标题的三个规则

  1. 切勿硬切标题的入场或退场。 简单的出现/消失会让人以为是错误。即使是 12 帧的淡入或滑动也能让它显得专业。
  2. 错开,不要同时出现。 先让背景条动起来,然后是姓名,最后是角色,每个之间间隔 3–6 帧。所有元素同时到达会显得平淡;短时间内的级联效果则显得经过设计。
  3. 停留足够长的时间以便阅读两遍。 大约在屏幕上停留 3–5 秒(大声朗读两遍)。太短会错过,太长会令人烦躁。在片段的开始和结束进行动画,切勿在片段中间。

入场与退场动画

选择一种运动语言并重复使用。最可靠、阅读效果最佳的揭示方式:

揭示方式感觉方法
滑动 + 淡入干净、默认平移约 24–40px 同时淡入;入场时使用 ease-out
擦拭条广播风格条状元素缩放/扫入(scaleX/剪切),文字在其后淡入
遮罩揭示高级感将文字裁剪到一个移动的矩形中,使字母“擦入”

使用非对称缓动:入场时使用快速的 ease-out(cubic-bezier(.22,1,.36,1)),退场时使用更快的 ease-in。退场速度要比入场快(约 2/3 的时长),以便标题快速让位。

/* 遮罩揭示:文字从左到右擦入,无需插件 */
.lt-name { clip-path: inset(0 100% 0 0); animation: wipe .5s cubic-bezier(.22,1,.36,1) forwards; }
@keyframes wipe { to { clip-path: inset(0 0 0 0); } }

入场/退场时机与停留时间

考虑三个阶段。以帧数而非感觉来预算(以 30fps 为例):

阶段预算备注
入场12–18 帧 (0.4–0.6 秒)错开:条 → 姓名 → 角色
停留90–150 帧 (3–5 秒)可读的停留时间;根据行长度调整
退场8–12 帧 (0.27–0.4 秒)比入场快

在代码中,每一步状态都应基于当前帧(或暂停的时间线),而不是挂钟时间——视频渲染器需要确定性的帧。将入场/停留/退场表示为一条单一进度曲线,以便同一个组件既能在浏览器中实时运行,也能在渲染器中逐帧工作。

安全区域与广播惯例

下三分之一字幕条必须适应所有屏幕和平台 UI。在标题安全区域(内部约 90% / 边距 5%)内构图,并尊重平台界面:

画幅锚点避免
16:9 (1920×1080)左边缘约在 5% 边距处;基线约在画面 80–85% 处外部 5%(标题安全区)、动作安全区外部 10%
9:16 (1080×1920)相同左边距;将条带位置抬高底部约 18%(字幕/UI)、顶部约 12%
1:1 (1080×1080)下部区域,居中偏左外部 5%

向左对齐并向右延伸,这样不同长度的姓名可以固定位置,不会尴尬地重新居中。保持角色行与姓名行使用相同的左边距。对于 9:16 画幅,不要将标题停放在最底部——平台字幕和按钮在那里。

文字层级与品牌样式

层级是整个设计的关键。确保姓名占据绝对主导地位:

  • 大小对比 ≥ 1.6 倍(姓名 vs 角色)。如果不确定,请放大姓名,而不是缩小角色。
  • 字重 + 颜色:姓名用粗体/接近白色;角色用较轻的字重和品牌强调色(使用一种强调色,并保持一致)。
  • 可读性对比:文字需叠加在未知的视频素材上。使用实色/半透明背景条、微妙的暗角或柔和的文字阴影,确保在明亮和暗色背景上都能阅读。
  • 品牌锁定:将字体、强调色、条风格和圆角半径固定在一个主题对象中,确保整个系列中的每个标题都匹配。

模板化一个设计应用于列表

在代码中构建此功能的理由:更改文字/数据,重新导出——无需重新制作动画。将姓名/角色/主题作为属性,切勿硬编码,然后将列表映射到实例。

const ROSTER = [
  { name: "Ada Lovelace",  role: "Founder, Analytical Engines" },
  { name: "Grace Hopper",  role: "Rear Admiral, US Navy" },
  { name: "Alan Turing",   role: "Mathematician" },
];
// 一个 <LowerThird> 设计;映射列表 → 多个实例(在渲染器中排序)
{ROSTER.map((p, i) => <LowerThird key={p.name} {...p} theme={BRAND} startFrame={i * 150} />)}

在渲染器中,将名单作为一个输入属性,每行渲染一次(--props),为每个人输出一个品牌化的片段——相同的动画、相同的品牌,只有文字变化。有关完整可运行组件和批处理脚本,请参阅 references/lower-third-component.md。

输出检查清单

  • 仅两行:主导的姓名,次要的角色(≥1.6 倍大小对比)。
  • 有入场和退场动画(无硬切);入场错开条→姓名→角色;退场更快。
  • 停留 3–5 秒(可读两遍);仅在片段两端进行动画,中间无动作。
  • 左对齐,位于标题安全区域内;9:16 画幅的条带抬升至底部 18% UI 区域之上。
  • 文字在任何素材上可读(背景条/暗角/阴影);全程使用一种品牌强调色。
  • 姓名/角色/主题均为属性——一个模板渲染整个名单。

交付与验证(渲染缩略图 → MP4)

打包好的辅助工具(scripts/):使用 scripts/contact-sheet.sh sheet.png f-hook.png f-mid.png f-end.png 平铺缩略图,然后使用 scripts/probe-mp4.sh out.mp4 [WxH] [fps] 断言编码。参见 scripts/README.md。

该下三分之一字幕条作为一个 Remotion 合成(<Composition> + zod schema + defaultProps,姓名/角色/主题作为属性)交付——入场/停留/退场全部由 useCurrentFrame() 驱动,绝无 Date.now() / Math.random() / 定时器。交付物为 out/*.mp4 + 项目文件(按照名单每一行重新渲染)。默认输出为 9:16 竖屏 (1080×1920)。

验证循环——渲染缩略图 → 检查 → 编码。 采样三个阶段,以便在编码(或批量处理整个名单)之前捕捉错帧或安全区域错误。

# 入场 / 停留 / 退场处的缩略图 — 使用实际交付的属性(真实的名单行,而非默认值)
npx remotion still LowerThird out/f-enter.png --frame=10  --props='{"name":"Ada Lovelace","role":"Founder, Analytical Engines"}'
npx remotion still LowerThird out/f-dwell.png --frame=75  --props='{"name":"Ada Lovelace","role":"Founder, Analytical Engines"}'
npx remotion still LowerThird out/f-exit.png  --frame=N   --props='{"name":"Ada Lovelace","role":"Founder, Analytical Engines"}'

# 检查每张 PNG — 重点关注停留帧(完全显示):
#  - 层级成立:姓名主导(>=1.6x 角色),角色使用品牌强调色;两者完全揭示,非中间擦除状态
#  - 品牌锁定:字体、强调色、背景条/暗角正确;在素材上可读
#  - 9:16 安全区域:条带抬升至底部约 20-35% UI 区域之上,远离顶部约 12% 和右侧操作栏;左对齐于标题安全区内
#  - 入场/退场帧显示部分揭示(动画实际运行),而非硬切

npx remotion render LowerThird out/lower-third.mp4 --props='{"name":"Ada Lovelace","role":"Founder, Analytical Engines"}'
npx remotion render LowerThird out/demo.gif --codec=gif                # README 演示片段

批量名单:在渲染所有姓名之前,先通过缩略图验证一个行——一次性捕捉布局/溢出错误,而不是 N 次。使用 npx remotion compositions 获取 durationInFrames/fps 以选择停留和退场帧。

完成前请检查:

  1. 缩略图在入场、停留和退场处清晰渲染——没有缺失的字体/品牌资源。
  2. 在停留帧处:姓名相对于角色具有主导性,品牌强调色和背景条正确,内容完全(非部分)揭示。
  3. 在所有检查过的帧中,条带位于 9:16 安全区域内——抬升至底部 UI 区域之上,远离顶部和右侧操作栏。
  4. 仅由帧驱动——无 Date.now() / Math.random() / 定时器;入场/退场显示动画运动,绝不会是硬切。
  5. 真实的名单行(非 defaultProps)正确渲染;MP4 已编码,GIF 可选。

参考文件

  • references/lower-third-component.md — 一个完整的可运行下三分之一字幕条:包含错开的弹簧入场、可读的停留和由帧驱动的更快退场的 Remotion 组件;用于品牌锁定的类型化主题对象;列表 → 多个实例的排序模式;每行的批处理渲染脚本;以及相同设计的无依赖 CSS/HTML 版本,包含遮罩揭示和擦拭条变体。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相关技能