Communitygithub.com

builtnotboosted/video-editing

将拍摄的 talking-head 素材剪辑为可直接发布的竖屏短视频(1080×1920)和 16:9 的 YouTube 长视频,使用 ffmpeg 和 Whisper。确保每句脚本只保留一次干净朗读(无口吃、重录或重复),杜绝单一固定镜头(包含变焦、换景、B-roll、动态图形),根据最终音频添加字幕,将响度标准化为 -14 LUFS,制作真实帧封面,并通过 QA 关卡(重新转写渲染结果,直至通过才交付)。通过声音同步多个机位,并编写 YouTube 章节。当用户说“帮我剪辑视频”、“剪掉这段”、“删除重拍”、“去掉废话”、“加字幕”、“生成短视频”、“同步两个机位”、“制作缩略图”,或者提供原始素材和脚本时使用。

video-editing 是什么?

此技能是一个基于命令行的专业视频剪辑工具(`vedit.py`),深度集成 ffmpeg、Whisper(语音识别)和 Playwright(图形渲染),专为处理 talking-head(面对镜头讲话)素材设计。它能够将原始素材剪辑成符合发布要求的垂直短视频(1080×1920)和 16:9 的 YouTube 长视频。核心功能包括:智能识别脚本每句话的正确朗读(自动排除重录、口吃、空白片段);通过变焦、换景、B-roll 和动态图形避免单一镜头;根据最终音频生成逐字字幕;将响度标准化为 -14 LUFS;从渲染视频中选取真实帧制作封面;以及一个严格的 QA 门控机制——它会重新转写渲染结果,检查每处剪辑的干净度和音频连续性,只有通过所有检查才会交付最终文件。此外,它还支持通过声音自动同步多台摄像机的画面,并为长视频生成 YouTube 章节。该技能设计为与 `video-scripting`(获取脚本和编辑说明)、`brand/brand-profile.md`(获取品牌颜色、字体和合规语句)、`image-generation`(生成静态图像)和 `review-loop`(独立审查)等技能协同工作,构成一个完整的视频制作工作流。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/builtnotboosted/built-not-boosted-skills/tree/HEAD/plugins/built-not-boosted/skills/video-editing

在你喜欢的 AI 中提问

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

文档

视频剪辑

此技能将面对镜头讲话的原始素材剪辑成成品视频、匹配的 SRT 字幕文件和封面,使用基于 ffmpeg、Whisper 和 Playwright 的命令行工具 vedit.py。它拥有剪辑的完全控制权:选择干净的镜头、进行干净剪辑、确保镜头多样性、图形和 B-roll 放置、字幕、响度、封面以及最终的 QA 检查。它依赖 video-scripting 技能提供脚本和编辑说明,依赖 brand/brand-profile.md 提供颜色、字体和合规行,依赖 image-generation 技能提供静态图片,依赖 review-loop 技能进行独立检查,依赖 scheduling 技能进行发布。从此处不会发布或安排任何内容。

权限顺序:brand-profile.md 在品牌常量与合规措辞上优先;此技能拥有方法的所有权。

开始之前

  1. 找到营销工作区(默认为 marketing/)。如果不存在,用一行说明并提供 brand-setup 技能;该工具在默认外观下仍可工作。
  2. 找到内容文件夹 content/<yyyy-mm-dd>-<slug>/。其中应包含 script.txt(每行一句口语;[括号内的注释] 和 [CHAPTER N • Title] 标记绝不念出),理想情况下还有 edit-notes.txt(包含 HOOK ON SCREEN:、COVER:、OUTCOME: 等行)和 sources.txt(屏幕上仅允许出现的数字)。如果录像是无脚本的,则先转写,并将清理后的转写文本视为脚本。
  3. 阅读品牌配置文件中的 ## 视觉标识、## 合规、## 边界 和 ## CTA 与联系方式,以及 brand/voice-learnings.md 中关于图形和封面的措辞。
  4. 检查工具是否就绪:python3 <skill>/vedit.py doctor。如果有任何缺失,运行 bash <skill>/setup.sh 一次(安装 ffmpeg、Node、Python venv、Whisper、Playwright、字体)。Whisper 的 large 模型约 3 GB,在笔记本电脑 CPU 上转写速度约为片长的 1 到 2 倍,因此请将长时间步骤置于后台运行。

标准

  1. 每句只保留一次干净朗读。 成品视频中每句脚本只保留一次干净的朗读:无重录、无“the, the”、无废弃 take 的半句话、无单词结尾被裁剪。这是硬性要求,不是锦上添花。可以保留一个自然的“um”(人应该听起来像他们自己),但绝不能出现在开头句,也不能在一句中出现两次。
  2. 跟随口语表达,而非书面脚本。 人们在说话时会改进台词。口语改写会在 take 查找器中表现为缺失或低覆盖率的行;这不是废话。保留他们的版本,仅裁剪真正的口吃和重演,并根据实际所说的话修正任何基于脚本编写的图形或钩子卡片。
  3. 保留能带来收益的节拍。 如果脚本开头有“我是谁”这样的行或结尾有号召行动,它们应保持在原位。
  4. 绝不出现单一固定镜头。 每次剪辑交替使用全景和特写,在长时间朗读中重新构图,切至 B-roll,通过动态图形推进故事。头部特写是主干,而非全部内容。
  5. 字幕来源于最终音频,并与脚本核对,确保与听到的内容完全一致。短视频烧录为硬字幕;长视频仅提供 SRT 文件。
  6. 响度标准化至 -14 LUFS,真峰值 -1.5 dB,确保在所有平台上音量正常。
  7. 真实帧封面,标题位于网格安全方框内,提供一个或两个变体。
  8. QA 关卡通过后才能交付任何内容。 它会重新转写渲染结果,独立检查每个剪辑点,并检查每个剪辑点是否落在安静处。deliver 命令在没有通过 QA 时会拒绝执行。
  9. 坦诚对待听觉局限性。 Claude 无法听到声音。QA 关卡只检查词语和能量,不检查语气、词语下的咳嗽声或糟糕的环境音拼接。每次交接时都要说明这一点。

方法

所有命令格式为 python3 <skill>/vedit.py <command> <slug>。手动编辑 project.json 前请阅读 references/project-config.md。

  1. 先收集所有素材。 列出批次中的所有素材片段。通过声音配对双机位(scripts/sync_cams.py;真正的匹配得分约为 0.4 到 0.55,不匹配则约为 0.03),对无声相机(如无人机)则通过运动和时间戳进行匹配(scripts/sync_cams_visual.py)。为每张照片和短片段生成联系表,并记录哪些可作为 B-roll 使用,如果拍摄者提到的任何摄像机不在文件夹中,立即询问。详情请参阅 references/multicam-and-long-form.md。
  2. 初始化。 vedit.py init <slug> --raw <cameraA clip> --pack <content folder> [--long] [--cam B=<clip>]。它会复制脚本,读取编辑说明,并将品牌配置中的调色板和字体映射到 project.json 中。然后,用脚本中的所有专有名词(包括演示者自己的名字)填充 vocab。
  3. 预处理(慢,后台运行):vedit.py prep <slug>。以相机原始帧率生成直立主视频、16 kHz 音频、同步额外机位、并生成两份转写文本(large-v3 逐字版和 medium.en 版)。遇到 HDR 素材、形状错误的素材以及蓝牙麦克风的通话级音频时会停止;references/audio-and-sync.md 中有补救方法。
  4. 镜头选取。 vedit.py takes <slug> 将语音与脚本对齐,类似提词器:反向跳转意味着重新开始,因此每句脚本的每次尝试都变成一个带分数的 take。第二次监听会独立回听每个 take 以找出填充词、重复和双读。请阅读 picker/takes_report.txt。然后在信任之前进行验证:打开 references/whisper-pitfalls.md,因为 Whisper 会丢弃重复的假开头、编造结束词并分割不熟悉的术语。除非能量图显示没有第二次爆发性语音,否则建议的重录修剪应保留。
  5. 挑选。 要么用户通过浏览器挑选(后台运行 vedit.py picker <slug>,然后打开 http://localhost:8765),要么,如果他们要求 Claude 挑选,自己编写 picker/picks.json,并在每次更改机器选择时添加 note 注释。告诉他们哪些行是红色或琥珀色的以及原因。优先选择与相邻行来自同一录制运行的朗读:它们可以无缝剪辑。永远不要交付机器选择的结果。
  6. 编排(设计工作,先阅读 references/style-notes.md)。根据脚本、sources.txt 和素材中的内容:在帧 0 处添加钩子卡片(来自 edit_notes.hook_on_screen,3 到 5 个词,一个承诺而非答案);为需要它们的节拍编写 graphics.json 卡片,仅使用 sources.txt 中的数字;cues 锚定到行或口语单词,从不使用固定时间;合理的 B-roll 切出(在它们所说明的单词上,或在说话人的表情或手势之后);framing.face_x/eye_y 在一帧上测量;exit_tail 用于走出镜头的部分。使用 vedit.py mg-preview <slug> 预览图形静态图。
  7. 构建。 vedit.py build <slug> plan 即时运行并打印剪辑摘要;build cues 列出任何无法放置的 cue(修复它,绝不忽略)。迭代执行 build cut 和 scripts/cut_check.py,直到干净为止,制作封面(步骤 9)以使海报帧嵌入,然后执行 build all。构建应用的规则见 references/edit-rules.md。
  8. QA 关卡。 vedit.py gate <slug>。它会因以下原因失败:一行被朗读两次、存在口吃或废弃的开头、有语音能量但没有词(隐藏的重读)、在任何剪辑点出现重复或跳过(两个模型独立听到)、遗漏的废弃 take 中的单词出现在剪辑点处、剪辑点落在有声音的位置、以及(多机位时,如果存在 gaze.json)使用了错误的机位。修复原因,重新构建,再次通过 QA。然后进行人工代理检查:观看渲染结果的联系表,阅读每条字幕(vedit.py captions <slug>),对于你更改的每一行,记录之前的内容和保留的内容。
  9. 封面。 使用 vedit.py frames <slug> --every 5 生成联系表;选择一帧有眼神接触、表情温暖(非说话中)、对焦清晰、包含能说明故事的物体的帧。设置 cover.frame 和一个或两个 variants(2 到 4 个词,大字,一个高亮词,简洁真实),然后执行 vedit.py cover <slug>。它会检查每个文本框是否位于网格安全方框和脸部之外,并生成 grid_tiles.jpg 以显示在个人主页网格中的效果。
  10. 审查。 将渲染结果的联系表、封面、SRT 和剪辑列表交给 review-loop 技能。屏幕上的数字需与 sources.txt 核对,不能只看表面。
  11. 交付与发布。 vedit.py deliver <slug> 将视频、SRT、封面、剪辑列表(每行:take、源范围、修剪、每次更改及原因)、QA 报告以及(对于长视频)youtube-chapters.txt 写入 content/<date>-<slug>/video/。vedit.py release <slug> --to <folder> 将视频、SRT 和 JPG 缩略图以同一文件名复制到目标文件夹,这是调度工具和 YouTube 所期望的格式。

交付前的检查

交付给用户时始终包含:

  • QA 通过,且时间最新(晚于渲染时间)。
  • 唇形同步测量:对最终渲染的两个或三个面部特写片段运行 scripts/lipsync.py build/final.mp4 <t0> <t1>,确保每段在 ±40 ms 内。
  • 字幕检查阅读(vedit.py captions <slug>,输出为 vN-caption-check.txt):FIX 看起来合理,每个 CHECK 都标注为让用户去听的行。
  • 注明时长和响度。
  • 对他们选择的每项更改都说明原因,并列出值得听的行。
  • 封面 A 与 B 的对比,以及网格预览。
  • “没有任何内容被发布或安排。”
  • “我无法听到内容:请在发布前自行听取。”

适配调整

  • 没有脚本? 先进行转写(prep 会生成两份转写文本),将转写结果清理为每行一句,保存为 script.txt,然后运行 takes。
  • 不同外观: 所有视觉元素从 project.json 的 brand(颜色、字体)和 cover.wordmark(可选的小名称标签)读取。在那里更改,不要改到脚本中。
  • 不同拼写: captions.locale 设置为 en-GB(默认)或 en-US。
  • 较慢的机器: 在 project.json 中设置 "whisper": {"large": "small.en", "medium": "base.en"} 以牺牲准确性换取速度;QA 关卡仍会运行。
  • 监管行业: 将 ## Compliance 中要求的屏幕措辞放入图形或结尾卡片,并确保屏幕上所有数字均来自 sources.txt。
  • 新图形模板: 将它们添加到 scripts/mg/kit.html,并在 references/project-config.md 中记录。
  • 学习改进: 当用户报告 QA 遗漏的跳过或重复时,在修复视频前记录案例,并将你学到的关于他们剪辑偏好的知识添加到 brand/performance-learnings.md。SRT 是从他们自己的语音中转写的,因此 voice-loop 技能可以从中学习。

已知不足

  • take 查找器可能会错过措辞变化较大的重录;QA 关卡的重读规则是最后防线。在更改 nin 或修剪后,请阅读 build/edl.json 并检查你接触过的每个接缝。
  • 残留词检查按文本匹配保留的 take 的边缘词,因此废弃 take 中听起来像保留 take 第一个词的那个词可能会以“即兴”注释的形式通过。需要手动通过 build/edl.json 将每个此类注释映射到源时间。
  • QA 关卡中没有自动唇形同步检查:对每个最终渲染运行 lipsync.py。
  • 多机位拍摄的机位选择由人工完成(在 picks 中设置 "cam"),除非你提供 gaze.json;详情请参阅 references/multicam-and-long-form.md。
  • 未内置逐字“卡拉 OK”字幕;可以作为想法提供,但切勿在未询问的情况下更改字幕样式。

此技能中的文件

文件何时打开
references/project-config.md编辑 project.json、graphics.json、cues、封面变体或 picks 时
references/edit-rules.md评估剪辑、字幕、图形或封面时
references/whisper-pitfalls.md验证 takes、修剪和 QA 注释时
references/style-notes.md编排剪辑(镜头多样性、切出、钩子卡片、封面)时
references/multicam-and-long-form.md处理第二个机位、无人机、16:9 长视频、章节时
references/audio-and-sync.md处理差劲的音频、延迟的音频、背景噪声、响度时
references/project-template.json查看起始的 project.json 时
setup.sh、vedit.py doctor首次在一台机器上运行时

了解更多

含有示例的更详细指南位于 https://builtnotboosted.com/skills/video-editing

Individual skills in this repo

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

builtnotboosted/image-generation

Produces finished social images with any image model (Google Gemini image, "Nano Banana", as the worked example) - feed statics, carousel slides, short-form video covers, YouTube and article thumbnails, local listing cards and animated statics. Bakes the headline into the scene instead of pasting text on top, keeps text inside the profile-grid safe zone, locks the likeness of real people to their reference photos, hits exact platform sizes, writes alt text and re-judges every re-roll on the filed file. Use when someone says "make an image for this post", "create a thumbnail", "make a cover from my video", "design a carousel", "animate this static", "the image model won't do 4:5", "my headline is getting cut off in the grid", or when a content pack needs its visuals.

builtnotboosted/review-loop

The quality gate every piece of content passes before it is filed, scheduled or posted. Runs a self-critique, then an independent review by a fresh subagent that sees only the finished work and the criteria (never the builder's reasoning), then fix and re-judge until there is a clean pass. Covers what to do when a piece can't pass unattended (hold, flag, ship the rest). Use when someone says "review this", "check this before it goes out", "QA the pack", "is this ready to post", "get a second pair of eyes on this", "proofread the captions", or when any other Built Not Boosted skill hands work over for checks.

builtnotboosted/scheduling

Gets finished posts into a social media scheduler (or posted by hand) safely. Queue-only with explicit timezone offsets, live dedup against scheduled and already-published posts, media readiness checks, correct post types (shorts, reels, carousels, first comments, manual-posting reminders), alt text, a link gate that sends copy back for a rewrite rather than stripping it, and confirmation before anything goes live. Writes and keeps a scheduling manifest for each pack. Works with any scheduler; Publer is the worked example. Use when someone says "schedule this", "queue these posts", "put this in Publer", "book in this week's content", "post this on Tuesday at 7", "move that post", "what's already scheduled", or hands over a finished content pack to go out.

builtnotboosted/video-scripting

Writes video scripts that sound like the person who will say them, for shorts (Reels, TikTok, YouTube Shorts) and long-form YouTube. Warm hook rather than a shout, who-am-I and follow early, a retention shape that delays the answer, a soft earned close, length that follows the story, real-problem substance, reactive scripts for news and data releases. Output is teleprompter-ready (think-breaks, shot reminders) with short edit notes for the video-editing skill. Use when someone says "write me a script", "script a reel about", "I need a short on", "plan a YouTube video", "turn this post into a video", "react to today's news on video", "what should I say on camera", or before a filming session.

相关技能