mcpField
F
find-broll

find-broll

github.com/louisedesadeleer创意与媒体14151 次安装20 周前更新
代码仓库

关于 find-broll

用于为访谈类视频搜寻和编排 B-roll 的可复用 Agent 技能。它依据品味档案和用户确认的节拍计划开展搜寻,最终片段由用户选择。

主要功能

  1. 01依据品味档案筛选素材
  2. 02搜寻前规划视频节拍
  3. 03搜集并评估 B-roll 候选
  4. 04由用户决定最终片段

适用场景

  1. 01为视频旁白寻找对应画面
  2. 02在不同剪辑任务中沿用素材偏好

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/louisedesadeleer/b-roll-finder --skill find-broll

安装后在 Claude Code 中输入/find-broll确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
README.md
TASTE.md
scripts/
cdp_capture.py
zoom_still.py
render_cutaways.py

详细介绍

B-Roll Finder — 技能方法论

一套可复用的方法论,用于为人物访谈视频寻找和放置 B-roll。 根据实际使用中的 Agent 技能泛化而来。请根据自己的设置调整路径和品牌标识。

⛔ 用户覆盖指令就是铁律——并且会持续生效

当用户在运行过程中表达偏好或禁令(如“不要梗图”“不要文字卡片”“不要政治内容”)时,它会立即生效,并在本次会话剩余时间内持续有效;同时要立刻将其写入配置文件的 Guardrails,而不是等到最后。被禁类别绝不能再去寻找、再提议,也不能“只提供一个候选项供确认”。违反用户明确提出的禁令,是这项技能最严重的失误:这会让用户觉得 Agent 没有在听。

⛔ 步骤 0——入门确认关卡(每次会话都要在做任何其他事之前先检查)

打开配置文件(TASTE.md 或用户的分支版本)。**只有配置文件顶部存在一行字面内容为 Confirmed-by: <name> (<date>) 的行,才能跳过入门确认。**没有这一行 → 当面提出下面的四个入门问题,将答案写入配置文件,并添加这一行。这是必须执行的,也不能推断:

  • 不要从 CLAUDE.md、记忆、先前的对话或此配置文件的正文中推断答案——即使你确信自己知道。提问本身就是这项功能。
  • 随附的 TASTE.md 是一个示例,即使当前用户就是其原作者也一样。作者身份 ≠ 已确认。
  • CLAUDE.md 中写着“加载我的品味配置文件”的指引也不算确认——请检查是否有这一行。
  • “重新做我的配置文件”会随时重新触发入门确认。

统领一切的一条规则

Agent 绝不挑选最终的 B-roll。由用户来选。合适的片段往往取决于个人品味。这项技能的任务是缩小范围——对每个时刻进行分类,将搜索限定在可信或权威来源内,为候选片段打分,并整理成一份精简的联系表交给用户。最终由用户挑选。

品味配置文件——寻找素材前先加载

策展是这项技能的一半。每次运行都要先加载一份品味配置文件:B-roll 偏好特征(偏好的类型、剪辑速度)、按主题标记的可信来源列表,以及防护规则。本仓库附带一份可直接使用的默认配置——TASTE.md,其内容从实际发布的视频中提炼而来——因此这项技能开箱即具备良好的品味。在用户建立自己的配置文件前,可以先直接使用默认配置(TASTE.md 的“让它成为你的”部分介绍了先导入再精简的机制:通过 yt-dlp --cookies-from-browser 获取用户的 YouTube 订阅列表,共同精简,然后从用户自己发布的视频中提炼其偏好特征)。

入门偏好(询问一次,并保存到个人资料中)

触发入门流程时: 随附的 TASTE.md 是一个示例个人资料(作者的资料),不是用户的资料。首次运行时,检查个人资料中是否有一行 Confirmed-by:,其中注明了当前用户。若没有 → 运行入门流程:询问下方的问题,将答案写入用户的个人资料(即用户自己的 TASTE.md 分支),并在顶部添加 Confirmed-by: <user> (<date>)。若有 → 跳过入门流程,直接加载资料。用户随时可以通过“redo my profile”重新触发。

首次运行时询问以下问题,并将答案写入偏好资料(随附的 TASTE.md 已有一组答案;请确认这些答案是否合适):

  1. 音频 — 用户是否会在 B-roll 画面上配旁白(去除所有音频:ffmpeg -an),还是希望保留片段原声?
  2. 静帧动态效果 — 默认给静态图像添加非常轻微的 Ken Burns 缓慢推近效果(约每秒 1.5%,居中,最高约每秒 2%);提供关闭选项,改为完全静止。方法比设置更重要——见下方的“静帧动态效果”。
  3. 素材来源署名 — 是否在每段 B-roll 的右下角用小字标注来源?选项:off · white · black · auto(按每个片段选择对比度合适的颜色)。署名采用来源的规范名称 + 平台(“Vinexposium / YouTube”“Decanter”)——简短,绝不使用 URL。如果素材右下角已有徽标,则将该片段的署名移至左下角。注意:屏幕上的署名是礼仪规范,不等于授权——官方/权威来源的版权立场才是关键。
  4. 概念动态视觉素材(Remotion) — 是否要为概念/统计/图表内容制作符合品牌风格的动态视觉素材?如果需要,询问现有 Remotion 项目的路径(以及品牌令牌),并写入个人资料。在现有项目中渲染合成内容属于精简流程的一部分;搭建新项目是一次性设置步骤,必须获得明确许可(绝不能在运行过程中进行)。没有项目且未获许可 → 概念内容使用真实的权威素材,或标记出来,绝不悄悄跳过。
  5. AI 生成的 B-roll — 默认关闭;仅在没有真实素材的内容上启用,并使用用户指定的高质量模型。绝不悄悄用廉价的 AI 库存素材替代。

🔓 持续授权——调用此技能即代表获得许可

素材搜集期间,不要就访问或搜索征求对话式许可——运行 /find-broll 已经授权此技能代表用户执行操作。以下事项绝不要询问“要我搜索/查找/访问 X 吗?”:

  • 网页搜索、新闻/标题查询、oEmbed/嵌入端点
  • 使用 yt-dlp 搜索元数据,以及下载公开视频/频道内容
  • 使用无头浏览器抓取公开页面(包括点击通过 Cookie/同意提示)
  • 为搜集/阅读内容而使用用户已登录的浏览器或浏览器 Cookie(个人资料、帖子、受限页面)
  • 读取本地文件、文字稿、以往项目文件夹、用户的素材库

直接执行并展示结果。用户的偏好确认点仍然是:搜集素材前的计划审批,以及偏好路线内容的最终选择。只有以下事项仍需提问:对外发布/张贴内容、付费操作、删除用户文件,以及安装大型依赖项。其他场景中因征求许可造成的阻碍都是问题,不是礼貌。

⚡ 精简路径是默认方案——漏斗用于品味判断,而非所有情况

这项技能凭借克制赢得了信任;繁重的流程只会让产出变得更差,而非更好(2026-06-11 测试:完整漏斗流程耗时约 10 倍,成片构图还不如精简流程)。默认规则:

  • 计划获批即代表选定。 用户批准节拍计划(“开始吧”)后,对于客观路线(实体/凭证/产品),每个节拍只找一个最佳候选素材并放入成片。不要搜集多个候选素材,也不要制作联系表。只有用户明确要求为某个节拍提供选项时,才制作联系表——而且绝不自动搜集梗图/文化类节拍;参见路由表。
  • 研究深度在计划阶段就要设限。 充分核实所指对象,以确保素材准确;不要在制定计划前穷尽所有素材搜集途径。只有在用户同意某个节拍、且简单途径失败后,才启动升级梯级——绝不预先尝试。
  • 每个节拍限时处理: 如果搜集某个节拍的素材超过约 5 分钟,就放入当前最佳候选素材,或者删掉该节拍并标注原因。不能让一个棘手素材卡住剪辑。
  • 一次核验,加上有针对性的修正,胜过无休止地打磨。渲染 → 查看网格 → 修复问题 → 只重新核验修复过的节拍。
  • 不重试——第一次失败就换方法,第二次失败就放弃。 某种方法失败一次后,就不要再试(不调整参数,不“再试一次”)——立刻改用其他方法。如果第二种方法也失败,就删掉该节拍,在计划中标注并继续。绝不值得为一个节拍尝试第三次;成片可以不包含它。这条规则适用于所有情况:采集、下载、渲染、浏览器操作。(Louise:“别再做那些一直失败的事了,直接跳过,省点时间。”)
  • 不要在运行过程中自动安装大型依赖(conda、对齐器等)——使用备用方案,记录下来,并在交付后提出安装建议。
按素材来源而非按节拍搜集素材(大幅加快素材搜集)

计划获批后,按素材所在位置归类节拍,然后每个来源只获取一次:

  • 对目标对象的网站进行一次完整页面采集,通常就能覆盖 4–6 个节拍(历史、团队照片、地图、产品图)——从同一次采集中按节拍裁切。
  • 一个官方频道/影片通常能覆盖多个节拍(航拍、特写、流程镜头)——下载一次,截取多个片段。
  • 将所有下载任务作为一个批处理后台任务运行(先只搜索元数据,只下载选定的素材);采集任务作为第二批并行运行。不要逐个节拍串行获取素材。
  • 将原始下载素材缓存到项目旁的 assets/raw/,这样重新渲染和制作 v2 时就不必重新获取。

准确胜过数量

少量完全准确的节拍,胜过大量平庸的节拍。要改掉的习惯是为了凑数而按关键词匹配。

  • 每个节拍都要逐条解读引用内容——先写下*“这句话实际上在说什么?”*,再据此找素材。如果找不到能准确呈现真实重点的素材,就删掉该节拍——不要凑数。 没有 B-roll 也好过错误的 B-roll。
  • 默认节奏=前密后疏: 在开场/钩子部分安排密集、有冲击力的 B-roll,正文则保持稀疏、精准。
  • 但“跳过”是最后的选择,不是默认选项。 提议跳过某个节拍前,要先明确说出完整的素材类型——凭证?标题?人物?产品 UI?概念图?——只有在每种类型都确实行不通时才跳过。没有专有名词的修辞性语句,恰恰适合用情绪凭证或概念图来呈现。

先理解主题,再寻找含义——不要只盯着关键词

  1. 先通读完整转录稿并理解核心论点,再开始寻找素材。上下文决定每句话适合用什么来呈现。
  2. **B-roll 要呈现的是观点,而不是字面用词。**句子中的专有名词往往并非真正要呈现的对象:
    • “来自某公司的 X” → 呈现这个人及其工作,而不是公司徽标。
    • “就像某公司做的那样” → 呈现某公司做的事情。
    • “某人说过的话” → 呈现说过的内容(引用、帖子、文章),而不是他们的脸。
  3. **字面呈现还是引申呈现:**具体名词(某个产品、具名人物、某场活动)→ 展示实际对象。动作和抽象概念 → 展示能够传达其含义的内容;不要按字面重演。
  4. **每个节拍都必须进行素材核查——背后是否有真实材料?**引用、数据、“大家都在说”、具名公司活动、“我看到/读到”——几乎总意味着存在推文、标题、评论或帖子。默认应将这些材料列为候选;寻找它们是这项技能的职责,不需要用户额外提出要求。

语句类型 → 应寻找什么素材(判断表)

旁白内容是……寻找这些素材
“大家都在说”/舆论讨论推文、标题、帖子、搜索结果截图
数字/数据(“每月 24 美元”“750 次注册”)屏幕上呈现的数据——定价页面、仪表板、图表、数据卡片
增长/“走红”上升图表,或带有数据指标的热门帖子
下滑/“暴跌”下降图表、错误画面、表现不佳的对象
“研究表明”/权威依据研究/论文标题,或出镜的专家
直接引用真实的帖子/博客截图(优于合成的引言卡片),或引用者亲口说出这句话
某个时代/“在过去”该时期的档案/复古影像
某个地点展示该地点的镜头
对比/“X 与 Y”依次全屏展示各对象——绝不要用 Agent 制作分屏
“工作原理”/分步说明展示步骤的屏幕录制或动态图形
描述行动的故事(“他每天早上都会……”)以引申方式呈现地点和行动——绝不要照字面重演
比喻(“像火箭一样”)只有确实能传达含义时才呈现比喻中的物体——默认跳过比喻
情绪/反应节拍提出时刻和情绪表现方式;表情包由用户提供
创作者自己的内容(“我的视频”)使用其实际视频片段/帖子作为素材——不要搜索

类型 → 默认覆盖方式(素材类型和数量)

相比主题,类型更能预测 B-roll 的类型和密度(接收信息时给出的风格与节奏要求优先于以下默认值):

  • 竞品/争议 → 以佐证材料为主,覆盖率高(约 40–60%)
  • 观点/解释 → 文本/概念卡片,穿插佐证材料(约 20–30%)
  • 讲故事/清单 → 人物、档案素材、产品(约 40–60%)
  • 播客/网络研讨会/访谈 → 少量点缀(约 5–10%);B-roll 用于标注提及的内容和论点,其余部分由出镜讲述者支撑

路由——三种及以上的 B-roll 类型对应三种及以上的来源

搜索前,先对每个时刻进行分类:

路由触发条件来源
实证素材时效性内容——争议、新闻、投诉、当前的说法/统计数据按时间倒序排列的推文/文章标题/评论,并截取为干净的截图
实体某个人物、实体产品或历史时刻官方/权威频道——规范的片段,而非随意上传的视频
概念必须通过绘制来呈现的抽象想法(流程、思维模型、统计数据)使用品牌风格制作的自定义动态图形(例如 Remotion)——当个人资料中有 Remotion 项目路径时,作为默认选项;或者使用权威来源的真实影像

⛔ 卡片永远不能替代具体事物的真实影像。 如果某个节拍提到了具体实体(葡萄品种、产品、地点),而且存在真实影像,那么生成的文字卡片就是不合格——即使用户的偏好特征表明他们喜欢卡片也不例外。卡片适用于没有真实影像的想法。(2026-06-11:一个「三种葡萄」节拍用了藏青色文字卡片,而官方影片里就有实际的葡萄串——这是错误的。) | 文化内容/迷因 | 由创作者决定品味的创作者片段或笑话 | Agent 绝不搜索或获取。应在计划中提出时刻和语气(「2:31 的包袱,冷面呈现」);由用户从自己的素材库提供迷因,或者删掉该节拍。Agent 找到的迷因每次尝试都失败了。 |

判断顺序: 正在发生吗? → 实证素材。人物/产品/事件? → 实体(官方来源)。抽象想法? → 概念(动态图形)。反应节拍? → 迷因(用户的素材库)。

YouTube 最适合实体路线(人物、产品、历史时刻)。不要强行用它来呈现抽象想法——那属于概念路线。

人物片段——寻找的是时刻,而非姓名

片段只是包含该人物,并不意味着它是相关的 B-roll(人物片段最常见的失败原因):

  1. 先写出提及上下文:这句话在说这个人物的什么——特质、动作、主张还是事件?
  2. 查询词 = 人物 + 提及上下文,绝不能只搜姓名。 搜「Steve Jobs iPhone keynote 2007」,不要只搜「Steve Jobs」。只搜姓名会返回泛泛的媒体采访片段。
  3. 呈现前先核实: 对每个候选片段,根据标题/日期/自动字幕补全*「在这个片段中,X 在<何时、何地>做了什么/说了什么」*。无法补全 → 不能作为候选。
  4. 找不到符合上下文的片段 → 如实说明;可以明确标注为「泛用」并提供规范片段,或者改用其作品/引语/标题作为素材组合(通常也更好)。
  5. 「节目/播客」≠「这一集」——提到某个节目时,应使用该节目的长期品牌素材,而非某一集嘉宾的图片。

素材组合——要混搭,绝不要默认使用网站截图

  • 人物(视频)——提到具体人物时,使用他们说话的实时片段(绝不要用静止头像)。人物只占部分画面/分屏时 → 使用模糊填充,绝不要硬裁切覆盖。制作播客/访谈剪辑时,嘉宾在源录制中就在镜头前——裁切他们的视频画面,不要去外部寻找素材。观众不认识的人物头像是毫无价值的 B-roll——对于小众人物,展示他们的作品(他们的帖子、产品、演讲),而不是他们的脸;知名人物应出现在具体情境/行动中,而不是静态肖像。⛔ 绝不要在说话者正在出镜的同一视频中,切到说话者自己的画面作为 B-roll——观众本来就在看他们,这会显得像画面故障。裁切画面是为了在其他视频中使用他们的脸。
  • 产品/UI——使用实际应用 UI 或真实录屏(优先使用自行录制的内容 > 官方频道 > 不使用;拒绝随机的第三方教程)。演示必须是目前可用的最新版本——产品 UI 变化很快;检查上传日期,并将其与候选素材一起呈现。
  • 佐证材料——推文、标题、评论、搜索结果。对于具体公司,优先选择关于真实事件的新闻标题(IPO、融资、里程碑),而不是首页。
  • 参考截图——实际引用的帖子/文章/网页(真实截图胜过合成引言卡片)。主体自己的官网是宝库,可整页截取,再按视口裁切——历史页面、团队照片、地图、产品页面。
  • 概念动态图形——用于表达观点、图表、数据。保持品牌风格;绝不要使用看起来像合成素材的库存素材。
  • 真实/富有感染力的影像——传达故事/行动/情绪的库存素材。逐帧检查水印、烧录字幕和 AI 垃圾内容。
  • 梗图/反应图——只能使用用户精选素材库中的内容;由 Agent 提议使用时机,绝不提议梗图。如果个人资料或用户表示不要梗图:就不存在这个类别。

如果方案中网站截图占比超过 60%,那就是错误的。

节奏守则——克制才显品味

  • 每个节拍约 2–4 秒。 少于约 1.2 秒的内容无法看清(除了一段刻意设计的快速蒙太奇外,不要使用不足 1 秒的镜头)。
  • 每段开场最多一段快速蒙太奇(列表节拍上放 3–4 张快速切换的静态图)。两段或更多快速蒙太奇会显得混乱。
  • 每段开场最多一处长停留(>5 秒),且只能用于真正需要讲解的节拍。8 秒的静态地图就是冷场。
  • 犹豫时:素材越少、越真实、越直观越好。最出色的剪辑会在每个节拍使用一项明显合适的素材,而不是堆最多的素材。

动态优先——视频胜过静态页面

当同一来源同时有动态版和静态版时,选择动态版:选择产品自己的演示视频,而不是首页;选择滚动页面的真实录屏,而不是静态截图;选择现场片段,而不是头像。只有当重点在于阅读时,才使用静态图(推文、标题、评论)。评估标准的平局判定:相关性相同 → 优先动态内容。

静态图动效——只做次像素级的微妙缩放;禁止使用 ffmpeg zoompan

来之不易的经验——禁止的是实现方法,而不是效果:

  • **禁止使用 ffmpeg zoompan/裁切平移/滚动平移,无论速度多快、超采样多少。**这些方法按整数像素步进采样,所以即使以约 1%/秒的速度缩放,也会卡顿。已进行全面测试(4× Lanczos 超采样 → zoompan → 缩小):仍然抖动。不要再浪费时间重试。
  • 次像素渲染才是正确方法,能产生平滑、微妙的缩放效果:
    • **PIL 方案(已验证):**逐帧执行 img.resize((W,H), Image.LANCZOS, box=<float coords>)——浮点框坐标可实现次像素采样——再以 rawvideo 格式传入 x264。Python 代码约 30 行。
    • Remotion(CSS transform scale)在项目已搭建时同样有效。
  • 默认设置:只向内缩放、居中、约 1.5%/秒,最高约 2%/秒,仅用于静态图——不平移、不向外缩放,绝不在真实视频上叠加合成动效。每个个人资料都可选择关闭 → 完全静态。

评估标准——展示候选素材前,逐一评分

按 1–5 分评分,低于门槛的直接剔除:

  1. 时效性匹配 — 主题是时效性内容还是常青内容?时效性内容 + 旧片段 = 不合格。
  2. 来源权威性 — 一手/官方/可信来源,还是随意的创作者。
  3. 相关性 — 展示的是确切提及的事物,而非松散关联。人物片段:相关性 = 情境匹配度。
  4. 辨识度/影响力 — 一眼就能看懂,截图效果清晰。
  5. 格式匹配度 — 可静音播放,约 2–6 秒,可铺满画面,分辨率 ≥720p。

先检查时效性——本月发布的推文,比几年前的 YouTube 片段更适合当前新闻。

搜索语法——始终限定范围,优先于开放搜索

  • 按频道限定的 YouTube 搜索是实体类主题的默认方式: yt-dlp "https://www.youtube.com/@<handle>/search?query=<q>" --flat-playlist --print "%(title).75s ||| %(duration_string)s ||| %(id)s" — 在官方/可信频道内搜索。ytsearchN:<query> 是备用方案;完全开放的搜索结果会标记为“⚠️ 来源不在可信范围内”。
  • 先查元数据,后下载: --flat-playlist --print 只需几秒;只下载最终选定的素材(-f "bv*[height<=1080]+ba/b")。
  • 无需登录即可查看推文: https://platform.twitter.com/embed/Tweet.html?id=<TWEET_ID> 可在无头模式下渲染清晰卡片,无需身份验证(添加 &hideThread=true;使用 scripts/cdp_capture.py 截取)。推文实际附带的媒体可通过 https://cdn.syndication.twimg.com/tweet-result?id=<ID>&token=a 获取。发布前确认附件实际展示的内容。
  • 泛化、煽情的素材是 YouTube 的弱项: 添加“free to use / no copyright”等限定词;拒绝带水印的素材网站预览,以及烧录字幕的片段;如果 YouTube 只找到垃圾内容,就改为推荐真正的素材网站(Pexels / Mixkit / Coverr)。

确定采用某个主题后,素材搜寻由 Agent 负责——逐级升级

“需要登录”必须通过尝试来证明,不能以此为由把任务推回去。把主题交还给用户前,必须穷尽以下所有方法:

  1. 本地文件 — 在用户的笔记/下载内容/过往会话中搜索确切链接或用户名。
  2. 追查身份 — 根据提及上下文进行网页搜索(独特短语比单独的姓名更有效);解析短链接;使用 oEmbed 端点,无需身份验证即可识别作者。
  3. 直接使用 yt-dlp — 公开主页/视频通常无需登录。
  4. 使用 yt-dlp --cookies-from-browser — 用户已登录的 Cookie 可以绕过大多数限制。
  5. 无头 Chrome + CDP — 用于截取被同意弹窗遮挡的页面:在每个框架上下文中点击“接受”(CMP 会在 iframe 中渲染),必要时移除遮罩层;然后检查截图并确认无误。绝不要提交未经目视检查的截图。
  6. 使用用户已登录的浏览器(如有浏览器自动化 MCP)。
  7. 只有在以上方法确实全部失败时,才提供明确的自行查找清单,并注明已尝试的方法。

放置时机——落在关键词上或稍后,绝不要提前

  • 以关键词说出口的时间为锚点,稍微延后约 +0.2 秒,让切换落在关键词上或刚说完时。关键词之前出现 B-roll 会显得像失误。
  • 计时依据:Whisper 词级时间戳(--word-timestamps True,转录时跑一遍,无需额外工具)。找到关键词对应的时间,在其后 +0.2–0.5 秒处作为锚点。Whisper 的词语结束时间戳略早,而且词语时长中包含停顿,因此不确定时偏晚——偏晚看起来像有意安排,偏早则像失误。
  • (曾尝试使用 MFA 强制对齐来达到约 10–20 毫秒的精度,后于 2026-06-11 移除——运行成本不值得;实际使用中,Whisper 加上偏晚原则已足够准确。不要重新引入。)
  • 对于包袱笑点,将切换落在笑点之后的节拍上。
  • 衔接相邻的 B-roll: 如果两个插入画面的间隔不到约半句话,就把第一个延长到第二个的起始时间——两者之间出现不足 2 秒的说话者面部闪现,会显得像错误。(延长前一个片段;下一个片段绝不能在对应关键词说出前开始。)

合成——全屏铺满,不做拼接

  • 裁切铺满,绝不加黑边: scale=W:H:force_original_aspect_ratio=increase,crop=W:H。
  • 不使用 Agent 制作拼接画面: 不做分屏、不做双画面,也不玩花哨构图。出现两位被提及的人物时,依次使用全屏单人画面。除裁切铺满外,唯一允许的处理方式是模糊填充(在适配后的片段后方放置放大并模糊的副本)。
  • 源素材局部画面/分屏主体: 使用模糊填充,绝不裁切铺满(裁切铺满半幅画面会大幅放大面部)。
  • 不要将低分辨率源素材放大到全屏铺满——请寻找更高分辨率的素材。

迭代规范——B-roll 清单

多次重新渲染时,最常见的失败是悄悄删掉用户已批准的片段。请在交付文件旁保留一份 BROLL-MANIFEST.md:每个片段占一行(入点/出点 · 片段 · 素材 · 状态,包括获批的版本),另附「已移除(请勿重新添加)」清单。每次重新渲染之前:阅读清单,核对新剪辑中是否包含每个已批准的片段,添加新片段,并更新状态。未经用户明确要求删除,已批准的 B-roll 永不消失。

自我核验——用户查看前检查每个剪辑点

每次渲染后,在每个片段的中点和每个衔接处(B-roll↔B-roll、B-roll↔人物)提取一帧,将它们拼成网格,并逐一查看。修复问题并重新核验。网格检查无误后,渲染才算完成。

明确的自动拒收清单——画面中出现以下任意一项即判定不合格,无须酌情判断:

  1. 源片段自带的烧录字幕
  2. 标明陌生人身份的姓名标签/下三分之一字幕条
  3. 水印或频道 Logo 标识(官方机构的角标徽章属于需标记的例外,并非默认放行)
  4. 说话者本人在自己的视频中以 B-roll 形式出现
  5. 片段描述的是具体、可拍摄的事物,却使用了生成卡片
  6. 看起来像模板的拼接画面(并排放置两张肖像、拼贴卡片)
  7. 黑边、微小的悬浮画面,或明显的模糊边缘构图错误
  8. 两个插入画面之间闪现一瞬间的人物讲话画面(<1s)——应将两段衔接起来:把第一段延长到第二段的起点(绝不要让第二段提前开始)

逐项对照清单检查网格——不按清单检查,只凭「看起来没问题」就会导致带水印的片段交付。

获取与格式处理(便于剪辑、无声、全屏铺满)

  • 大体积源素材先做代理文件: 如果原始视频为 4K/HEVC/>500MB,先转码为 1080p 工作副本(在执行其他操作之前)(ffmpeg -hwaccel videotoolbox -i src -vf scale=1920:-2 -c:v h264_videotoolbox -b:v 6M -c:a aac proxy.mp4)——之后的所有步骤(帧扫描、渲染)都用它处理,速度可提升 5–10 倍。

  • 不要下载低分辨率的预合并流——请选择实际的视频流(-f "bv*[height<=1080]+ba/b")。

  • 不要把 --download-sections 作为最终剪辑方式(可变帧率会造成卡顿)——先下载短片段,再重新编码并裁剪。

  • 标准格式:恒定帧率、裁切铺满全屏、去除音频:

    ffmpeg -ss <in> -t <dur> -i full.mp4 \
      -vf "fps=30,scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080,setsar=1" \
      -an -c:v libx264 -crf 18 -preset slow -pix_fmt yuv420p -movflags +faststart out.mp4
    
  • 开启署名时 → 格式处理期间通过 overlay 合成小型署名标签(用 PIL 渲染的 PNG,约 70% 不透明度;某些 ffmpeg 构建版本不支持 drawtext)。

工作流概览

  1. 加载风格档案 / 设置主题 — TASTE.md(或用户的分支):筛选出与此视频主题标签匹配的风格指纹、偏好和可信来源。
  2. 询问风格与节奏 — 格式(播客 / 教程 / 快速剪辑 / 重开场)和信息密度。这些设置优先于类型默认值。
  3. 获取转录文本 — 粘贴、从编辑器提取,或转录(GPU Whisper,逐词级)。长篇内容(>~10 min):按 B-roll 价值为片段评分,并优先选择高价值片段——不要对一小时内容均匀地添加 B-roll。
  4. 分类并提出方案(暂不获取素材) — 为每个节拍标注其解读、路径、参考资料检索结果和调色板组合。先展示方案并等待用户反馈,再开始搜集素材。
  5. 受限搜索 — 仅限可信 / 官方来源;为候选素材评分;根据提及语境核实人物片段;剔除质量较差的素材。
  6. 联系表 → 用户挑选。
  7. (可选)放置并渲染 — 全画幅 + 静音剪辑,以关键词为锚点连接相邻节拍,更新清单,交付前进行自我验证网格检查。

工具

  • 转录: 使用 GPU Whisper 转录文本(大型模型——转录文本决定了 理解,因此文本准确性很重要)。
  • 锚点时间: Whisper 逐词级时间戳 + 稍后偏移(比关键词晚 +0.2–0.5s)。
  • 搜索 / 下载: yt-dlp(无需 API 密钥);使用无头浏览器 + CDP 截取公开页面(遇到同意提示时,在每个帧上下文中点击接受,并进行视觉核实)。
  • 动态图形: Remotion(或类似工具),以全画幅 + 静音方式渲染。
  • 静帧缩放: scripts/zoom_still.py(子像素 PIL 浮点框 → x264;肖像 / 特殊宽高比使用 --blurfill;绝不使用 zoompan)。
  • 同意提示截图: scripts/cdp_capture.py(通过 CDP 使用无头 Chrome——在每个帧上下文中点击“接受”,并支持 CMP iframe;设置 CDP_SCALE=2 可获得清晰截图)。
  • 切出镜头渲染: scripts/render_cutaways.py(片段拼接模板:按节拍窗口替换基础视觉画面,音频保持不变)。
  • 合成: ffmpeg;使用 ImageMagick 制作联系表。

评论

支持 Markdown