1仕組みと動作原理
構成要素を「2行のテキスト+グラフィックの下敷き」の3要素(name / role / bar)に分解し、厳密に2行までに制限する。
Keep it to two lines. A name line + role line is the whole job — extra lines erode the hierarchy and crowd the safe area.
安っぽさを防ぐ第1原則:タイトルテロップのハードカットによるイン/アウトは絶対に禁止する。
1. **Never hard-cut a title on or off.** A bare appear/disappear reads as a mistake. Even a 12-frame fade or slide makes it feel produced.
第2原則:時差入場——bar → name → role の順で、各要素を3〜6フレームずつずらす。
**Stagger, don't slam.** Animate the bar first, then the name, then the role, each offset by 3–6 frames.
感覚ではなくフレームバジェットで3段階のタイミングを規定する:イン 12–18f、表示維持 90–150f、アウト 8–12f(アウトをより速く設定)。
| Exit | 8–12f (0.27–0.4s) | Faster than enter |
セーフエリアはアスペクト比ごとに個別に指定する。縦型 9:16 の要件は、帯を下端に貼り付けるのではなく全体的に持ち上げることである。
| 9:16 (1080×1920) | Same left margin; **lift the band up** | Bottom ~18% (captions/UI), top ~12% |
階層構造はフォントサイズのコントラストで担保する:name は role の最低1.6倍とし、迷った場合は role を縮小するのではなく name を拡大する。
**Size contrast** ≥ 1.6× (name vs role).
テンプレート化可能性がこのコードベースの根本的な存在理由である:name/role/theme を必ず props とし、roster(名簿)を1行ずつ --props でレンダリングして複数の独立したクリップを出力する。
In a renderer, make the roster an input prop and render once per row (`--props`) to emit one branded clip per person
検証は「3フェーズ+バッチ」向けに設計する:一括レンダリング前にまず1行分を検証し、アウトフレームで部分的な露出が見えていること(アニメーションが正常に動作している証明)を確認する。
**Batch roster**: verify ONE row via stills *before* rendering all names — catch a layout/overflow bug once, not N times.
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | npx remotion still / render / compositions |
| cli | scripts/contact-sheet.sh + scripts/probe-mp4.sh(仓库根共享验证工具箱,SKILL.md 明列) |
| cli | jq + ffmpeg/prores 编码(reference 的 roster 批量脚本与透明输出) |
| package | ffmpeg / ffprobe(系统依赖) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: (SKILL.md に明記された検証ループ)`npx remotion still LowerThird out/f-{enter,dwell,exit}.p`
- 网络端点: 外部ネットワークアクセスの宣言: `npx remotion …`: 初回実行時に npm 公式ルート経由でパッケージおよび CLI を取得(registry.npmjs.org、ドメインは npm 依存、ソースコード内へのハードコードなし)
- 本地工作目录: ファイルの読み書きと成果物出力: エージェントが本スキルに従って構築する Remotion プロジェクトおよび out/lower-third.mp4、out/demo.gif
5二重目の独立検証
- [ok] SKILL.md 的三条「防廉价规则」是否真在 reference 组件里被实现(防第一遍只读散文) — reference §1 明写 "Enter staggers the bar, name, then role; exit is computed from the end of the clip so the title leaves faster than it arrived.",组件导入 `Sequence, interpolate, spring, useCurrentFrame, useVideoConfig`,Theme 类型与 BRAND 对象齐备(font/bar/name/role/radius/marginPct)。规则 → 代码可逐条对应,非空头承诺。
- [discrepancy] reference 批量脚本的文件名派生是否会越出输出目录(第一遍遗漏的面) — 原文:`slug=$(echo "$row" | jq -r '.name' | tr '[:upper:] ' '[:lower:]-')` 紧接 `npx remotion render LowerThird "out/${slug}.mp4" --props="$row"`。tr 只做大小写与空格到连字符的映射,不剥离 `/`、`..`、前导 `-` 等字符;若 roster 的 name 含路径分隔符,输出路径可越出 out/。这是数据→文件名的注入面,仅影响本地写入位置,不构成权限提升;SKILL.md 正文未把它写成安全事项。属对 pin commit 有效的真实出入(脚本可改进,非虚假声明)。
- [ok] 「9:16 抬高档位」是否在代码里有对应实现(不只是表格建议) — reference 的 Quick reference 表给出「9:16 placement | `baseline 0.80→0.70` / the media query」,说明竖屏不是靠新组件,而是同一组件换基线/媒体查询;与 SKILL.md「lift the band up」一致。
- [unlocatable] 「3–5s 停留」「≥1.6× 字号对比」这类经验值是否有出处 — SKILL.md 写 "Roughly 3–5s on screen (read it aloud twice)." 与 "**Size contrast** ≥ 1.6×",仓库内无测量脚本、无引用来源、无 A/B 数据;属经验判据,不作为已核事实,仅记为文档建议。
- [ok] 跨包共享脚本与「Packaged helper」引用是否真实存在(防悬空引用) — SKILL.md 只点名 scripts/contact-sheet.sh 与 scripts/probe-mp4.sh;两者在仓库根真实存在且可执行(-rwxr-xr-x),三仓库逐字节相同(contact-sheet.sh md5 b7dcc28034c9bf8fda5d48683e54d8b5、probe-mp4.sh 167b7977c50f492014e1a6fef8c9ed12)。seek-shot.sh 未被本 skill 点名,不构成悬空引用。
- [ok] 透明叠加输出建议是否是真实可用的编码路径 — reference 给的是 Remotion CLI 自身的参数(`--codec=prores --prores-profile=4444` 或 `--image-format=png`),属该工具既有能力,非虚构 flag;能否落地取决于用户环境的 prores 支持,但命令形式正确。
6結論
5b146268b6b14b5c…