吸引人的独白 (16:9) 是做什么的?
参考:Ali Abdaal, “How I'd Create Content in 2026 (If I Had To Start Over)” (youtu.be/A8PxRHQrLJ8, 16 分钟, 1080p)。
动态语言复制自该视频。外观采用 FringeLines v2.1 套件:
My Drive/FringeLines Design System files/Fringe Lines Design system v2_1/ 以及 …/handoff/fringelines-tokens.css 中的标记。
参考视频的构成
以每2秒1帧的频率测量,并在过渡附近进行密集采样。
- 约55%为纯讲述头部镜头。 一个固定机位,中景。跳跃剪辑每约5秒一次(中位数):16分钟内约122次剪辑。每次剪辑在全景和推进镜头之间交替,使剪辑显得有意为之。
- 两种布局,仅此两种:
- 全屏演讲者,上面叠加各种元素:姓名下方三分之一标题、左上角带有小标签胶囊的彩色标注卡片、底部白色衬线句子、头部附近的小彩色标签,以及底部中央的赞助商/CTA按钮胶囊。
- 纸画布。 演讲者缩小为 肖像画中画(圆角、白色边框、右侧,约400×560),同时图形在暖色调的米白色页面上构建,并带有一个细微的弧线。画布承载动态句子、编号路线图卡片、胶囊图示、金字塔,以及带圆角卡片形式的截图或B-roll,卡片下方有说明文字。
- 无持续字幕。 屏幕上的文字是精选的。一次只显示一个句子,与语音逐词同步显现。每个词从模糊逐渐清晰。关键短语会改变颜色。
- 图示随着每个项目被说出而逐步构建。 胶囊以轻微过冲效果弹出。金字塔层从上方落下。
- 在图形内部移动摄像机视角。 5卡路线图在每个章节返回,放大至活动卡片并模糊其他卡片。
- 退出时使用模糊效果而非硬切。全屏↔画中画的切换是约0.4秒的快速缓和变形。
- 节奏: 每10-20秒一个新的视觉创意,每节一个强调时刻(黑白),以及在每个人首次出现时显示下方三分之一标题。
- 音效: 布局变化时使用柔和的嗖嗖声,项目落下时使用轻快的弹出声,声音始终低于人声。
如何映射到 FringeLines(不要偏离此表)
| 参考 | FringeLines 版本 |
|---|---|
| 带有珊瑚色高亮的暖调衬线 | 所有显示文字使用 Instrument Serif。高亮是斜体短语,在纸上为墨蓝色 #1A4F6B,在视频中为白色。仅对关键数字使用橙色 #D4622A([7 AM],统计数字)。 |
| 胶囊中的圆角无衬线 | 胶囊、标签、列表项、堆叠标签使用 Archivo 500-600 |
| 小型大写标签 | IBM Plex Mono 600,大写,+0.14em,≥ 22 px:眉标、标签胶囊、来源、元数据 |
| 珊瑚/红色渐变标注 | 套件渐变色:绿色(默认)、蓝色(第二个想法)、橙色(警告或“错误”) |
| 柔和路线图卡片 | 绿色、蓝色和橙色水洗色、单色数字徽章和虚线橙色连接线 |
| 奶油色纸 + 弧线 | 纸张 #F7F7F5,带有一个细微的绿色水洗弧线 |
| 阴影 | 无。 平面表面,2 像素细线 #E3E5DF,画中画白色边框,圆角 16-18 |
| 赞助商胶囊 | 白色 CTA 胶囊(fringelines.co / newsletter),带一个橙色单色“描述中的链接”标签 |
| 频道结尾 | 绿色结束卡片,Clip Slides 封面:单色眉标、橙色分隔线、衬线标题(带一个斜体短语)、Archivo 副标题、● fringelines.co |
套件规则仍然适用:
- 每屏一个想法;
- 每屏一个橙色;
- 绿色是默认色,蓝色用于对比;
- 每个统计数字都有
source; - 无小于 22 px 的内容。
组成部分
- 模板:
pipeline/remotion/src/Monologue.tsx,Monologue合成,1920×1080 / 30 fps。它重用ShortV2.tsx中的人脸追踪。 - 构建脚本:
pipeline/build_monologue.py,包含两个步骤:cut和render。 - 工作文件夹:
work/monologue/<slug>/包含clip.mp4、props.json、transcript.txt、beats.json和faces.json。 - 输出:
out/monologue/<slug>.mp4,标准化至 -14 LUFS。 - 工作示例:
work/monologue/morning-loop-test/beats.json,来自 10 月 30 日剧集中 Quinn 的 62 秒剪辑。
1. 获取一段视频
单摄像机 16:9 录制,音频良好,单人,时长约 1-15 分钟。将其放入 inbox/monologue/<slug>/take.mp4。
要从剧集中提取一段独白片段,将摄像机画面与其工作室音轨混合。使用 build_short.xml_offsets 获取 Descript XML 中的偏移量;请参阅 morning-loop-test 的制作方式:
ffmpeg -ss <t0-videoOffset> -t <dur> -i Quinn.mp4 -ss <t0-audioOffset> -t <dur> -i studio-sound-Quinn.m4a -map 0:v -map 1:a … take.mp4
2. 剪辑
~/.shorts-skill/bin/python pipeline/build_monologue.py cut --slug <slug> --src inbox/monologue/<slug>/take.mp4 \
[--range 12.0:95.5 --range 120:180] [--replace "gtm=>GTM" --replace "quick=>Quick"]
剪辑步骤的作用:
- 使用 Whisper 转录音频(缓存于
words-src.json)。 - 移除填充词、口吃和长时间停顿,使用与短视频相同的规划器。
- 在每次跳跃剪辑时交替使用推进镜头(1.0 / 1.12,以人脸为中心)。
- 写入
transcript.txt,包含word@seconds基于剪辑时钟。
--replace 仅修正用于计时显示的单词;不会自动添加任何字幕。
3. 编写 work/monologue/<slug>/beats.json
阅读 transcript.txt 并根据它规划节拍。
{"brand": "FringeLines", "beats": [
{"type": "title", "at": 0.2, "end": 2.0, "eyebrow": "FringeLines · Monologue", "text": "The *morning loop*"},
{"type": "name", "at": 2.1, "end": 5.4, "text": "Quinn", "role": "Host · Fringe Lines"},
{"type": "chips", "at": 3.0, "end": 7.4, "items": [{"text": "GTM loops", "at": 3.1}, {"text": "Coding loops", "at": 5.1, "tone": "blue"}]},
{"type": "text", "at": 7.6, "end": 11.3, "eyebrow": "What's a loop?", "text": "Loop's just a *stated goal* and then it works *autonomously*"},
{"type": "callout", "at": 11.5, "end": 16.2, "label": "The setup", "tone": "green", "text": "I use Quick Desktop with routines that execute at any time"},
{"type": "overlay", "at": 16.4, "end": 18.3, "text": "I usually run it at [7 AM]"},
{"type": "stack", "at": 22.4, "end": 36.4, "title": "My core team · 4 people", "items": [{"text": "Account executive", "at": 25.6}, "…"]},
{"type": "stat", "at": 51.2, "end": 55.1, "kicker": "My regular account team", "value": 14, "text": "people I'm interacting with on a regular basis", "source": "Quinn's own count · Fringe Lines, Oct 30 2026"},
{"type": "end", "at": 58.4, "end": 61.4, "text": "Building the *morning loop*", "sub": "The full walkthrough is in this week's episode."}
]}
时间
- 时间是剪辑后片段的秒数。
end(或hold)关闭一个节拍,其退出效果会在 0.3 秒内模糊淡出。 - 文字与语音逐词同步显现。
text中的每个词都会在节拍窗口内与转录文本匹配。- 逐字引用演讲者原话(轻微修剪是可以的)以确保同步正常工作。
- 如果文本是转述,则显现会回退为均匀分布。可通过
"reveal": "even"强制此行为。
- 项目
at时间默认为均匀交错排列。将其设置为每个项目被说出的时刻,大约在单词前 0.1 秒。
标记
*斜体高亮*:每屏一个短语。[重音数字]:橙色,每屏一个,仅限数字。
节拍类型
演讲者全屏(叠加层):
| 类型 | 字段 | 用途 |
|---|---|---|
title | text, eyebrow? | 开场标题,覆盖在变暗的画面之上(前 2-3 秒) |
name | text, role? | 某人首次出现时的下方三分之一标题 |
overlay | text | 底部白色衬线中说出的一句话:您希望观众记住的那句台词 |
callout | text, label?, tone?, side? | 左上角(或右侧)的彩色卡片,带有一个单色标签胶囊:“Mistake #1”、“The setup”、“Rule” |
chips | items[{text, at, tone?}], side?, tone? | 2-3 个在头部旁边弹出的短标签:内心声音、名称、选项 |
cta | text, sub? | 底部按钮胶囊:新闻通讯、剧集或优惠。通常出现在视频中间部分,一次。 |
bw | (无) | 对演讲者的黑白强调;与 overlay 配合使用 |
media + "full": true | src, video?, from? | 全出血 B-roll,演讲者显示在画中画中 |
纸画布(演讲者移至画中画):
| 类型 | 字段 | 用途 |
|---|---|---|
text | text, eyebrow?, align? | 动态句子:定义、论点、“唯一最重要的……”句子 |
stack | items[{text, at, tone?}] (从下到上), title? | 金字塔或层次:基础→策略→回报、团队层次 |
compare | title?, left{label, items}, right{label, items}, winner? | A vs B:爱好 vs 收入,之前 vs 之后。失败方在接近结尾时变灰 |
roadmap | items[{text}] (≤6), active?, zoom? | 视频的章节。开始时显示一次,然后为每个章节重用它,设置 active = 章节索引和 zoom = 何时放大 |
steps | items[{text, at}], title? | 带有细线规则的编号列表:专家、工具、步骤 |
stat | value, prefix?, suffix?, decimals?, kicker?, text, source | 一个数字,以橙色递增显示;必须提供 source |
media | src, title?, meta?, video?, from? | 圆角卡片中的截图或 B-roll,带有说明文字(标题 + 单色元数据行)。文件放入工作文件夹 |
end | text, eyebrow?, sub?, url?, tone? | 绿色结束卡片(2-4 秒) |
间隔小于 0.7 秒的纸画布节拍会保持在画中画布局中,以免演讲者来回跳动。
节奏规则(来自参考视频)
- 以
title和name开场,两者都在前 5 秒内。 - 纸画布节拍占总时长的 35-45%。 视觉变化间隔不要超过约 20 秒,纸画布停留时间不要超过约 15 秒。
- 交替使用两种布局。不要连续使用两个
callout;在它们之间放入text或图示。 - 每拍一个想法。 保持
text节拍 ≤ 14 词,标注 ≤ 16 词。 - 图示项目在所提及的单词处出现,切勿一次性全部出现。图示的第一个项目应在节拍开始后的约 1 秒内出现;否则节拍开始时间应更晚。
- 章节:
- 在介绍结束时显示一个
roadmap。 - 在每个章节开始时重用它,并设置
active。 - 每个章节以其关键句的
overlay结束,最重要的一个使用bw。
- 在介绍结束时显示一个
- 每 5 分钟最多一个
cta,切勿在前 30 秒内出现。 - 以
end卡片结束。它可以持续到最后一个词之后。
诚信原则
- 屏幕上的数字必须与所说的一致,或者来源于
source中命名的来源。 - 他人内容的截图需要在
meta中注明来源。 - 不要将观点强加于演讲者:非引语的
overlay或text节拍应表现为标签,而非演讲内容。
4. 渲染
~/.shorts-skill/bin/python pipeline/build_monologue.py render --slug <slug> [--sfx-db -22]
- 它会追踪一次人脸(
faces.json;如果重新剪辑,请删除此文件)。 - 渲染时间随视频长度增长;在 Mac mini 上,1 分钟测试需要几分钟。
- 音效:每次布局变化时的嗖嗖声,项目落下时的弹出声,以及进入标题和结束卡片时的渐强音。将
--sfx-db调高至约 -18 以获得更多能量感。
5. 质量检查(始终执行)
for t in 1.5 5 10 20 30 40 50 60; do ffmpeg -v error -y -ss $t -i out/monologue/<slug>.mp4 -frames:v 1 -vf scale=640:-1 /tmp/m_$t.png; done
检查以下各项:
- 文字: 无文字运行到画中画下方(纸画布区域结束于 x = 1320)。堆叠标签保持在一行内。
- 高亮: 无遗留的
*或[。每屏最多一个橙色。 - 面部构图: 面部在画中画中居中,推进镜头不会切掉头部。
- 显现时间: 显现与说出的单词同步。如果节拍显示模糊文字时间过长,则其
at时间过早。 - 响度:
ffmpeg -i out.mp4 -af ebur128 -f null - 2>&1 | grep " I:"读取值约为 -14。
向用户报告:
- 时长和节拍列表(时间 → 类型 → 文字);
- 仍需检查的内容:数字、姓名和截图来源;
- 任何回退为均匀显现的节拍(因为其文本非逐字引用)。
尚未构建
- 9:16 版本: 合成仅支持 16:9。如需竖版,请使用
editorial-short技能剪辑一个短视频。 - 自动规划: 编写
beats.json需要判断,因此由人工或基于transcript.txt的 Claude 完成。