Communitygithub.com

分镜板

将短视频脚本逐字拆分为镜头,生成包含时间线、画面描述、字幕和音效的分镜板,并输出可在浏览器中预览的HTML和PNG帧。

分镜板 是什么?

该技能专为内容创作者设计,能自动将一段完整的短视频脚本(如Reels、TikTok、Shorts)拆解为详细的拍摄计划。它逐字分割脚本到每个镜头,自动分配镜头类型(如面部特写、屏幕录制、B-roll),计算每个镜头的时长(基于3.4词/秒的语速),并生成9:16竖版帧画面。技能还支持个性化设置:通过分析用户上传的3-5个示例视频,学习其独特的风格(如剪辑节奏、字幕样式、色彩方案、片头片尾习惯),并生成一个可自定义的主题CSS文件,确保输出的分镜板与用户的实际内容风格一致。最终产物包括一个可交互的HTML分镜板、每帧的PNG图片和联系表,同时可直接作为后续通过AI逐帧制作视频图形的提示词。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Chefy3x/storyboard-skill/tree/main/storyboard

在你喜欢的 AI 中提问

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

预览

来自技能 README

分镜板 preview
分镜板 preview

文档

分镜板 是做什么的?

分镜板是一支视频的拍摄方案和剪辑方案。当用户能够从上到下读懂它、按场景拍摄、然后把每个镜头交给剪辑(或交给 Claude)并且对画面上有什么、文字说什么、声音是什么了如指掌时,就完成了。

保持精简。 只需要镜头和场景,没有别的。不需要弧线图、不需要逐个镜头的转场、不需要品牌套件、不需要检查清单。如果用户想要更多,他们会问。

首次运行:引导设置

当 ~/.claude/storyboard-profile/profile.md 不存在时、刚安装完技能后、或者用户要求设置或重新学习他们的风格时,运行设置。一步一步地引导他们:用一句话说明这一步的目的,执行它,并在需要询问的地方停下来等待。保持每条消息都简短;大多数做这事的人是创作者,不是开发者。

  1. 欢迎。 一条简短的消息:技能的作用(输入脚本,每行输出一帧画面,然后 Claude 据此构建图形)以及设置大约需要五分钟。然后说第一件事是需要看看他们的视频。

  2. 检查工具。 检查 Python 3、Google Chrome(或 Chromium / Edge)和 ffmpeg。yt-dlp 是用于链接的额外工具。对于任何缺失的工具,给出其系统的安装命令(例如 Mac 上 brew install ffmpeg,Windows 上 winget install ffmpeg)并主动提出运行它。在 Chrome 和 ffmpeg 正常工作之前不要继续。

  3. 询问他们的情况。 一条消息,每行回答一个问题:他们的昵称和平台、内容是关于什么的、视频通常有多长、以及他们如何结尾(评论关键词、关注、个人简介链接)。

  4. 索要他们的视频。 这是重要的一步,所以要解释原因:他们的分镜板应该看起来像他们自己的视频,而不是模板。请他们提供 3 到 5 个最能展示他们风格的已发布视频,如果他们有屏幕录制或图形相关内容,最好包含一个。他们可以将文件拖入聊天(这会粘贴路径)或粘贴链接。如果安装了 yt-dlp,就用它下载链接;如果链接无法下载,就索要文件。将所有内容放入 ~/.claude/storyboard-profile/source/。

  5. 研究视频。 对于每个视频:

    • 帧: ffmpeg -i v1.mp4 -vf "fps=1,scale=360:-2" -q:v 4 source/v1_%03d.jpg,然后查看它们。
    • 剪辑点: ffmpeg -i v1.mp4 -vf "select='gt(scene,0.1)',showinfo" -f null - 2>&1 | grep -o "pts_time:[0-9.]*" 可以给出剪辑时间,这样你就能了解平均镜头长度。说话头部中的跳切几乎不改变画面,会被漏掉,所以要用 1 fps 的帧数来对比检查。
    • 话语: 如果安装了 whisper(或其他转录工具),则转录它。如果没有,从帧上读取烧录的字幕,或者请他们粘贴脚本。

    记录你实际看到的内容,而不是猜测:镜头类型的混合(面部 vs 屏幕 vs B-roll 的比例)、平均镜头长度、取景(中景还是特写、他们坐的位置、背景)、前两秒如何吸引人、屏幕上的文字(字体粗细、大小写、颜色、高亮样式、位置)、字幕样式、主要颜色、重复出现的图形或叠加层、声音习惯,以及行动号召如何落地的。

  6. 挑选他们的面部静止帧。 选择一个清晰且没有烧录字幕的他们对镜头说话的画面,裁剪成 9:16 (ffmpeg -ss <t> -i v1.mp4 -frames:v 1 -vf "crop=ih*9/16:ih,scale=540:960" face.jpg) 并保存为 ~/.claude/storyboard-profile/face.jpg。从现在起,每个面部镜头都使用它。

  7. 写入配置文件。 将 ~/.claude/storyboard-profile/profile.md 保存为包含 创作者(步骤 3)、镜头(类型混合、平均长度、取景)、钩子、屏幕文字、字幕、颜色、声音、行动号召 和 重复图形 的章节。然后写入 ~/.claude/storyboard-profile/theme.css,用他们的外观覆盖套件变量:

    :root { --ink: #111; --accent: #ff5a1f; --on-accent: #fff; --bg: #f4f1ea;
            --grid: rgba(0,0,0,.05); --font: "Montserrat", sans-serif; }
    

    使用他们已经安装的字体;如果他们的字体没有,选择最接近的已安装字体。

  8. 向他们展示并确认。 构建一个样本帧(他们的标题样式叠加在他们的面部静止帧上),渲染它,展示它,并附上配置的三行总结,然后询问哪里不对。不断修改直到他们说看起来像他们的内容。

  9. 交班。 告诉他们设置完成以及下一步该做什么:“粘贴一个脚本并说‘storyboard this’。” 只要他们的风格改变,他们可以随时重新运行设置。

如果它们宁愿跳过设置,则使用套件的默认外观制作分镜板,并在最后再次提供设置。

格式

每个镜头包含:

字段含义
typeface(对着镜头说话)、split(屏幕在上,面部在下方圆角框内)、screen(屏幕录制)、graphic(剪辑中构建)、b-roll(真实世界素材)
vo该镜头中说的确切脚本词句
on_screen_text烧录到帧中的文字,通常为空
edit_note一两行:屏幕上有什么、什么在移动、取景如何
sfx音效,通常为空
thesis恰好一个镜头为 true
statusreal(帧就是素材)、stand-in(展示意图)、to-capture(尚未有任何内容)

时间基于 VO 以 3.4 词/秒 计算。永远不要手动设置。

场景按拍摄地点对镜头进行分组:label、detail(要准备什么)和 shots(镜头编号)。

步骤

  1. 读取配置文件并获取脚本。 读取 ~/.claude/storyboard-profile/profile.md 并遵循它:他们的镜头长度、镜头类型混合、文字风格、行动号召。如果与下面的默认值冲突,配置文件优先。还没有配置文件?先提供设置。如果对话或文件中没有脚本,索要脚本,并记下目标长度(如果他们没有说明,则使用配置文件的通常长度)。不要编辑脚本。如果某行读起来不对,指出来并让用户修复。

  2. 逐字将脚本拆分为镜头。 合并起来,vo 字段必须严格等于脚本。不要改写、删减或添加一行。

    • 在画面变化的地方切分, 而不是在句子结尾。逗号就是很好的切分点。
    • 目标是每个镜头 2 到 6 秒(7 到 20 个词)。超过大约 8 秒,就拆分它,除非一个连续的画面确实能传达这句台词。
    • 镜头 1 包含说话者的面部(face 或 split 镜头)。第一秒出现面部能吸引住观众。
    • 标记恰好一个 thesis 镜头: 说明视频核心论点的台词。
    • 最后一个镜头:说话者的面部说出行动号召。 如果有评论关键词,它是说出来的,存在于字幕中,而不是作为一个大的屏幕药丸。
    • 变化类型。 不要连续三个 face 镜头。用 face 表达主张、旁白和行动号召;用 screen 展示任何东西。
  3. 精打细算地填写字段。

    • on_screen_text:镜头 1 的标题、列表编号(01 SCRIPT),最多一句点睛之语。其他地方留空;字幕承载其余内容。
    • edit_note:屏幕上有什么、什么在移动、以及取景(中景或特写)。隐私提示也放在这里:模糊电子邮件、裁剪显示用户名的文件路径。
    • sfx:整个视频中两到三个,只在某些东西落定时使用(开头来个提示音,某样东西上线时来个重击音)。
  4. 按拍摄地点将镜头分组为场景, 而不是按镜头顺序。

    • 面部: 每个面部镜头以及每个 split 镜头中的面部部分作为一个场景。
    • 屏幕: 每个应用或工具会话作为一个场景,全程使用相同的真实项目。
    • 离开桌面: 仅当某个 B-roll 镜头需要时。
    • detail: 要准备什么(要打开哪个项目、要运行什么、屏幕上要先清除什么)。
  5. 在用户工作目录的 storyboard/<video-slug>/ 文件夹中写入 storyboard.json(如果有更好的位置,询问一下):

    {
      "title": "AI edits my videos",
      "target_seconds": 50,
      "shots": [
        {"type": "face", "vo": "My last couple of videos were all edited by Claude.",
         "on_screen_text": "CLAUDE EDITS MY VIDEOS", "edit_note": "Mid shot, headline holds 4s.",
         "sfx": "", "thesis": false, "status": "to-capture"}
      ],
      "sittings": [
        {"label": "Face", "detail": "Same shirt and light for every face line.", "shots": [1]}
      ]
    }
    
  6. 为每个镜头构建一帧(下一节)作为 frames/f01.html、frames/f02.html 等。编号对应镜头的位置。

  7. 渲染:

    python3 <此技能的文件夹>/kit/render.py storyboard/<video-slug>
    

    它会在无头 Chrome 中渲染出 540x960 的 frames/out/fNN.png、frames/out/contact-sheet.jpg 和 board.html:每帧旁边紧贴其 VO、文字、编辑注释、音效和时间,以及场景信息。它还会输出运行时长和面部对屏幕的秒数。

  8. 检查联系表, 然后修复并重新渲染:文字是否叠在脸上、是否有重叠、文字是否在安全区内、是否有任何隐私内容。

  9. 简短报告: 镜头数、运行时长对比目标长度、面部对屏幕的秒数、以及还有哪些需要拍摄。为用户打开 board.html。

帧

尽可能使用最真实的来源,按此顺序:

  1. 真实素材。 镜头中实际网站或应用的截图(无头 Chrome 或 Playwright,桌面宽 1440,移动端宽 390),或者从用户自己的素材中截取的静止帧(ffmpeg -ss <time> -i clip.mp4 -frames:v 1 still.jpg)。将图片放入 frames/ 文件夹并按文件名引用。

  2. 构建的帧。 使用 kit/frame-kit.css 中的类,将帧编写为 HTML body 片段。片段中的 {{face}} 会变成 frames/face.jpg(如果存在的话),否则变成设置中的面部静止帧,再否则变成中性剪影。设置的 theme.css 会自动将所有帧重新样式化为他们的颜色和字体。

    类用途
    .f帧包装器,始终是外层元素
    .hl顶部的标题,<em> 标记一个关键词
    .lbl 搭配 .n + .t编号列表标签(01 SCRIPT)
    .face全帧面部(一个 <img src="{{face}}">)
    .faceboxsplit 镜头中的面部框
    .term一个 Claude Code 终端(.p 提示符,.tool 工具调用,.ok,.dim)
    .chat + .bub + .vid一个代理聊天消息,可选带视频
    .shot一个截图卡片(<div class="shot"><img src="..."></div>)
    .tbl一个数据表(.h 表头,.r 行,.r.new 新行)
    .big一个大号点睛之句
    .room一个带说明的 B-roll 占位符

    使用内联 style="top:..px" 设置垂直位置。示例片段:

    <div class="f">
      <div class="lbl"><span class="n">01</span><span class="t">SCRIPT</span></div>
      <div class="term" style="top:200px">
        <div class="bar"><i></i><i></i><i></i></div>
        <div class="p">write me a 45 second script about ...</div>
        <div class="ok">  ✓ script.md</div>
      </div>
      <div class="facebox"><img src="{{face}}"></div>
    </div>
    
  3. 用真实数据模拟 当屏幕位于你无法通过的登录后面时。不要代表用户登录。用真实数字构建屏幕并标记为占位帧。

帧规则:

  • 安全区域: 将文字保持在底部 20% 和右侧 12%(点赞和评论轨道)之外,并保持顶部 8% 空白。套件的位置已经遵守这些规则。
  • 他们的标题样式: 遵循配置文件中关于屏幕文字的说明(大小写、粗细、他们如何高亮一个词)。默认是粗体大写,一个关键词用 <em>。在全帧面部上,套件会将文字变为白色并带有柔和阴影。
  • 隐私: 任何帧中不得出现包含用户名的文件路径、电子邮件、API 密钥或 .env 内容。在表格中使用假 ID。

用于构建视频

一旦分镜板被批准,它就成了提示词。逐一构建图形:“从分镜板构建镜头 4,作为一个 9:16 运动图形:匹配帧、屏幕文字和编辑注释。”第一个版本永远不对;把它放入剪辑中,与帧进行比较,反复迭代直到匹配。

相关技能