Communitygithub.com

吸引人的独白 (16:9)

将单人讲述的头部镜头制作成16:9的 FringeLines“吸引人的独白”视频——跳跃剪辑配合推进镜头,演讲者缩小为画中画肖像,同时衬线动态文字、图表(金字塔堆叠、对比、路线图、步骤、大数字)和B-roll卡片在纸画布上构建,再加上标注卡片、下方三分之一标题、标签、CTA按钮和绿色结束卡片,所有内容都与语音逐字同步。适用于YouTube解说、单人评论、新闻通讯转视频以及“一个想法,讲好它”的内容。

吸引人的独白 (16:9) 是什么?

“吸引人的独白”技能是一款专为AI代理设计的专业视频制作工具,用于从单人讲述的头部镜头创建高质量、风格化的16:9解说视频。它精确模仿Ali Abdaal视频“How I'd Create Content in 2026 (If I Had To Start Over)”的动态语言,并利用FringeLines v2.1设计系统。该技能通过跳跃剪辑(交替使用全景和推进镜头)、画中画(PiP)布局以及丰富的图形元素(如动态文字、金字塔、对比图、路线图、步骤列表和统计数字)来增强视觉节奏,所有元素均逐词与语音同步。工作流程包括使用Whisper进行转录和剪辑、手动编写结构化的beats.json文件(定义每个视觉元素的类型和时间点),最后使用Remotion进行渲染。它适用于YouTube解说、单人评论、新闻通讯转视频等场景,核心优势在于将“一个想法,讲好它”的叙事原则通过精心设计的视觉节奏和动画实现,确保观众注意力始终集中。该技能目前仅支持16:9横向视频,垂直版本需使用editorial-short技能。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/qdevery/fringe-lines-video/tree/main/.agents/skills/engaging-monologue

在你喜欢的 AI 中提问

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

文档

吸引人的独白 (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次剪辑。每次剪辑在全景和推进镜头之间交替,使剪辑显得有意为之。
  • 两种布局,仅此两种:
    1. 全屏演讲者,上面叠加各种元素:姓名下方三分之一标题、左上角带有小标签胶囊的彩色标注卡片、底部白色衬线句子、头部附近的小彩色标签,以及底部中央的赞助商/CTA按钮胶囊。
    2. 纸画布。 演讲者缩小为 肖像画中画(圆角、白色边框、右侧,约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"]

剪辑步骤的作用:

  1. 使用 Whisper 转录音频(缓存于 words-src.json)。
  2. 移除填充词、口吃和长时间停顿,使用与短视频相同的规划器。
  3. 在每次跳跃剪辑时交替使用推进镜头(1.0 / 1.12,以人脸为中心)。
  4. 写入 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 秒。

标记

  • *斜体高亮*:每屏一个短语。
  • [重音数字]:橙色,每屏一个,仅限数字。

节拍类型

演讲者全屏(叠加层):

类型字段用途
titletext, eyebrow?开场标题,覆盖在变暗的画面之上(前 2-3 秒)
nametext, role?某人首次出现时的下方三分之一标题
overlaytext底部白色衬线中说出的一句话:您希望观众记住的那句台词
callouttext, label?, tone?, side?左上角(或右侧)的彩色卡片,带有一个单色标签胶囊:“Mistake #1”、“The setup”、“Rule”
chipsitems[{text, at, tone?}], side?, tone?2-3 个在头部旁边弹出的短标签:内心声音、名称、选项
ctatext, sub?底部按钮胶囊:新闻通讯、剧集或优惠。通常出现在视频中间部分,一次。
bw(无)对演讲者的黑白强调;与 overlay 配合使用
media + "full": truesrc, video?, from?全出血 B-roll,演讲者显示在画中画中

纸画布(演讲者移至画中画):

类型字段用途
texttext, eyebrow?, align?动态句子:定义、论点、“唯一最重要的……”句子
stackitems[{text, at, tone?}] (从下到上), title?金字塔或层次:基础→策略→回报、团队层次
comparetitle?, left{label, items}, right{label, items}, winner?A vs B:爱好 vs 收入,之前 vs 之后。失败方在接近结尾时变灰
roadmapitems[{text}] (≤6), active?, zoom?视频的章节。开始时显示一次,然后为每个章节重用它,设置 active = 章节索引和 zoom = 何时放大
stepsitems[{text, at}], title?带有细线规则的编号列表:专家、工具、步骤
statvalue, prefix?, suffix?, decimals?, kicker?, text, source一个数字,以橙色递增显示;必须提供 source
mediasrc, title?, meta?, video?, from?圆角卡片中的截图或 B-roll,带有说明文字(标题 + 单色元数据行)。文件放入工作文件夹
endtext, 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 完成。

Individual skills in this repo

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

相关技能