1实现原理 · 为什么它能做到
两条硬规则被明确标为「平台约束而非审美」:intro 仅 3–5s、logo 可读时刻 1–2s,超出会实测掉留存。
1. **Keep the intro 3-5s, the logo hit 1-2s.** Anything longer than 5s causes measurable viewer drop-off, which hurts the video in the algorithm.
第二条硬规则同样来自平台机制:结束页元素只允许出现在最后 5–20s,且视频总长必须 ≥25s。
YouTube only allows end-screen elements in the final 5-20s, and the video must be at least 25 seconds long.
logo sting 被拆成 windup → impact → settle 三拍,并要求品牌标记精确落在音频最强瞬态那一帧。
The brand mark must land exactly on the sound's impact frame, not near it.
snap 的制作方式是 spring 从 1.18 过冲到 1,加 6 帧白闪衰减。
`spring` overshooting from 1.18→1 *is* the snap; the white `flash` decaying over 6 frames sells the impact.
outro 版式的核心是二分法:YouTube 的点击元素占右侧三分之二,自有品牌只能待在左三分之一。
YouTube's clickable elements live on the **right two thirds**; keep your own branding, channel name, and any face-cam in the **left third**.
元素原生尺寸被写死(订阅圈 294×294、下一个视频卡 615×345),并按这些尺寸在版式里画虚线占位框。
| Next-video card (thumbnail) | 615×345 | upper-right or center-right |
guides 只在预览构建里出现,成片必须丢掉,右侧刻意留白。
Ship the dashed guides only in a preview build; the final render drops them, leaving a clean plate whose right side is intentionally quiet.
两个 composition 共用一个 brand prop(name/logo/sting/bg/fg/accent),没有任何硬编码品牌信息。
Both compositions read a single `brand` prop — no hardcoded names, colors, logos, or audio.
验证必须专门检查 impact 帧(logo 满格 + 白闪衰减中),并要求成片去掉虚线参考框。
Verify the **impact frame** explicitly (logo snapped to full, white flash decaying) — the sting must land *on* it, not near it.
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | npx remotion still / render / compositions |
| cli | scripts/contact-sheet.sh + scripts/probe-mp4.sh(仓库根共享验证工具箱,SKILL.md 明列) |
| cli | 批量循环:`for f in brands/*.json` + basename 派生输出名(reference §7) |
| package | ffmpeg / ffprobe(系统依赖) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- Shorts 场景的例外只写在 reference,SKILL.md 的硬规则 2 未加限定 — 只读 SKILL.md 的 agent 可能给 45 秒的 Short 设计 20 秒 outro(吃掉整片)。建议在口播/需求确认阶段就区分长视频与 Shorts 两条路径(见 second_pass discrepancy 条)。
- 平台规则与留存数字无出处,且会随平台政策变动 — 5-20s end-screen 窗口、≥25s 门槛属 YouTube 公开规则但 skill 未附链接;「超过 5s 掉留存」无来源。规则变更后 skill 不会自动跟进(pin 于 2026-06-22),交付前应自行核对当前政策。
- end-screen 元素最终仍需在 YouTube Studio 手动摆放 — skill 只产出「右侧留白的干净 plate + 建议坐标」;真正的 subscribe/下一视频元素要用户在 Studio 里对齐(reference 提到用其网格与 snap to element)。这一步不可自动化,也不在验收覆盖内。
- 音画同帧依赖人工读数 — 找 sting 瞬态靠用户在波形图上读(Audacity/DAW),没有自动节拍/瞬态检测;「impact 帧是否正确」也只能靠静帧人眼判断,probe-mp4 查不到音画偏移。
- 品牌资产与字体许可由用户自负,缺失无兜底 — logo 图与 sting 音频必须自备并放入 public/;字体在示例里以样式串给出(Inter 等),商用授权与缺字体时的 fallback 表现 skill 不校验。
- 每品牌两条片的渲染成本翻倍 — 批量循环里每个品牌渲染两条 MP4(intro+outro),多频道场景下成本线性叠加;skill 未给并行或 Lambda 建议(同仓 audiogram 也仅提成本前置)。
5第二遍独立确认
- [ok] 平台时间常数在 SKILL.md 与 reference 是否一致(防一手数据两处不同) — SKILL.md:intro 3-5s、logo hit 1-2s、end-screen 只允许最后 5-20s、视频 ≥25s、outro plate 保持 ~20s;reference 表:"logo hit 1-2s"、"Whole intro | 3-5s max"、"End-screen window | last 5-20s"、"Outro plate hold | ~20s"、"Minimum total video length | 25s"。两处逐值对应,无矛盾。
- [ok] 元素尺寸与数量上限是否两处一致 — SKILL.md 给 Subscribe/channel circle 294×294、Next-video card 615×345、Playlist/link card 294×294,并在输出清单写「Up to 4 end-screen elements planned (1 video + 1 subscribe is the highest-CTR layout)」;reference 元素表同值(615×345 / 294×294 / 294×294)并写 "| Max elements | 4 | highest CTR layout = **1 video card + subscribe**, nothing else |"。一致。
- [discrepancy] Shorts(9:16)场景的覆盖是否存在缺口(第一遍只读 SKILL.md 会漏) — SKILL.md 的硬规则 2 是无条件表述:「The outro must be ≥20s of held, quiet layout, and the video ≥25s total.」并未提 Shorts 例外;而 reference §1 明确写 "for Shorts use a 2-3s end card and a verbal CTA instead of native end-screen elements (Shorts do not support them)",§5 另设「9:16 (Shorts) note」。结论:只读 SKILL.md 的 agent 可能给一条 45 秒的 Short 设计 20 秒 outro,直接吃掉整片——这是对 pin commit 有效的真实覆盖缺口(信息存在于 reference,未上提到 SKILL.md 的硬规则)。
- [unlocatable] 「Anything longer than 5s causes measurable viewer drop-off」是否有据 — SKILL.md 与 reference 都以肯定语气给出留存影响("retention drops measurably"),但仓库内无引用来源、无数据集、无链接;本次为只读侦查,不验证该断言,仅记为文档声明。平台机制部分(5-20s 窗口、≥25s 门槛)属 YouTube 公开规则,可信度高但仍未附官方链接。
- [ok] brand prop 是否真的无任何硬编码(防「模板化」空口宣称) — SKILL.md 的 LogoSting 与 EndScreen 组件里,颜色/字体/logo/sting 全部取自 `brand.bg` / `brand.fg` / `brand.accent` / `brand.logo` / `brand.sting`(仅字体族在示例里写 "700 56px Inter" 这类样式串);reference §7 定义 Brand 类型与 brands/pixelforge.json 示例,并强调 "Keep fonts, sizes, timing, and layout fixed in the components — only `brand.json` changes." 与 SKILL.md 的宣称一致。
- [ok] impact 帧对齐方法是否可操作(而非只喊「要对齐」) — reference §4 给出四步:「Open the sting in any waveform view… The impact is the tallest transient」「Read its time in seconds, e.g. 0.78s」「Set `IMPACT = Math.round(0.78 * fps)` and make the logo's `opacity`/`scale` snap key fall on that frame.」「If you can't move code, instead trim the audio so its transient sits at your fixed `IMPACT` (e.g. 0.8s)」。方法具体、可执行,且给了代码侧与音频侧两种收敛方向。
- [ok] 验收与交付是否覆盖「guides 不得进成片」 — SKILL.md 写 "Ship the dashed guides only in a preview build; the final render drops them",verify 段亦要求 "Drop the dashed end-screen guides for the final render; verify the right two-thirds is intentionally quiet.";reference §6 用 prop 开关实现同一组件的两种输出。纪律 + 机制 + 验收三处齐备(但仍是纪律而非强制渲染开关)。
6结论
9f3a594d22ab4694…f3df381d65