Communitygithub.com

剪辑蒙太奇

将用户拍摄的视频片段编辑为适用于TikTok、Reels和Shorts的竖屏剪辑:选取每个片段的最佳瞬间、卡点剪辑、添加字幕、标签和结束卡片。

剪辑蒙太奇 是什么?

该技能(Clip Montage)主要用于将用户手机拍摄的短视频、音乐或录音,自动编辑成一个9:16的竖屏蒙太奇视频,可直接发布到TikTok、Instagram Reels和YouTube Shorts。它能智能选取每个片段的最佳瞬间,按故事顺序排列,自动卡点剪辑,添加开场钩子、镜头标签和行动号召(CTA),同时保留关键片段中的原始声音(如对话、欢呼声等)并逐字添加字幕。用户还可以添加画外音,并与字幕同步。整个编辑过程完全在本地机器上完成,无需云处理或付费积分,除非用户需要AI驱动的照片转视频镜头(如Figma Weave),且用户需先确认拥有付费计划。该技能支持在Claude Code、Cursor、Codex等AI代理平台上运行,并提供了详细的编辑流程,包括检查客户配置、获取素材、查看剪辑帧、编写脚本、渲染初稿以及根据用户反馈进行多版本迭代编辑,确保最终成品符合用户需求。

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

在你喜欢的 AI 中提问

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

文档

剪辑蒙太奇 是做什么的?

目的

将用户在手机上拍摄的短视频,以及他们拥有的任何音乐或录音,编辑成一个可直接发布的9:16竖屏蒙太奇:

  • 每个片段的最佳瞬间,按讲述故事的顺序排列;
  • 卡点剪辑;
  • 第一个镜头设置钩子,每个镜头都有标签,结尾有行动号召(CTA);
  • 在重要时刻保留片段原始声音(如某人说话、滋滋声、欢呼声),并逐词添加字幕;
  • 在整个视频下方添加用户的画外音,并配有同步字幕。

然后,与用户逐一版本地进行编辑,直到用户满意(例如“用她笑的那部分”、“先放厨房”、“放大片段声音,不要音乐”),同时不丢失之前的版本。

这是蒙太奇的默认设置,且完全免费。 所有渲染都在本机使用插件的 scripts/video/ 工具完成(montage.js 根据简短脚本构建页面,render.js 生成MP4)。无需账户,无积分消耗,且没有任何内容离开本机。真实素材也是对地点或产品最真实的呈现:不涉及任何AI生成内容。

哪些需要付费,以及何时提及:

用户拥有的素材处理方式费用
视频(可包含照片、音乐、录音)使用本技能免费
仅有照片,但用户可以拍摄几个视频片段要求提供片段,然后使用本技能免费
仅有照片,且无法拍摄视频片段使用 montage-video 进行本地运动(平移、推进、3D运动)免费
仅有照片,且用户希望有真正的镜头运动(新角度)montage-video 的“AI镜头运动”,仅当用户表示拥有付费计划(如Figma Weave的付费Figma计划、Higgsfield)时,先报价并获得批准后再运行付费积分

切勿在此技能中运行付费视频模型。除非用户已明确表示拥有付费计划并愿意使用,否则切勿报价。

分步流程

插件根目录: 如果以下路径中仍包含未展开的 CLAUDE_PLUGIN_ROOT 占位符(Claude Code会自动填充;Codex等其他代理不会),请在使用前进行解析:取 printenv CLAUDE_PLUGIN_ROOT 的输出(如果打印出路径的话),否则从本文件所在的文件夹向上查找,直到找到包含 references/brand-voice.md 的第一个文件夹,如果都不行,请询问用户该插件所在位置。在以下所有文件路径和shell命令中使用该绝对路径。下面的 VIDEO 表示 ${CLAUDE_PLUGIN_ROOT}/scripts/video。

  1. 检查配置状态。 读取 ${CLAUDE_PLUGIN_ROOT}/references/brand-voice.md。如果该文件不存在,或其第一行为 <!-- MARKETING-SKILL:UNCONFIGURED -->,请暂停并询问用户该插件的4个设置问题(优先级任务;要制作的内容类型;目标受众+语气;默认输出格式——与 /marketing-skill:marketing-setup 相同)后再继续,然后将答案保存到该文件中,并将标记改为 CONFIGURED,同时加上今天的日期。 如果文件未配置,但用户已表示要跳过设置或使用默认值,则不要询问:在此次运行中使用其占位符的默认值,用一行说明情况,并保持标记不变。

  2. 选择客户。 与 montage-video 步骤2完全相同(${CLAUDE_PLUGIN_ROOT}/skills/montage-video/SKILL.md):已保存的客户(读取配置文件和其 ## Notes)、新客户(企业名称、联系方式、所需的附加条款、Logo、颜色、他们喜欢的音乐),或用户自己的企业(省略 client:)。配置文件存放在 ${CLAUDE_PLUGIN_ROOT}/state/clients/ 中,并且不纳入git管理。

  3. 询问素材、音乐和配音。 一次消息中询问:

    • 视频片段(默认询问项)。 短的手机视频,每个3到15秒,每个房间、角度或时刻一个。如果用户尚未拍摄,请提供 montage-guide.md 中的“视频片段拍摄技巧”:竖屏拍摄,每个镜头稳定保持3到5秒,缓慢移动,光线充足,并拍摄细节特写。
    • 音乐(如果用户有的话)。 用户有权在广告中使用的曲目。来自流媒体应用或广播的歌曲不符合条件。否则:客户已保存的音效(免费生成的曲目)、Creative Commons 曲目(执行 node VIDEO/media.js search "<情绪>" --type music --out state/videos/assets --count 3),或没有音乐,以便用户在发布时在应用内添加热门音效(TikTok和Instagram的企业账户具有商业用途库)。
    • 配音(如果用户有的话)。 用户录制的画外音(一个文件即可,手机语音备忘录也可以),并逐字提供配音内容用于字幕。或者视频片段中有人对摄像头说话。或者没有:大多数蒙太奇仅使用音乐。
    • 用户希望参考的蒙太奇风格(如有): 用户发送的视频(或 brand-voice.md 中视频设置的风格参考)。运行 node VIDEO/reference.js <视频>,读取其 reference.md 并查看其镜头表;然后匹配其节奏(pace: 其典型的镜头长度,以节拍为单位,当剪辑卡在节拍上时)、快速剪辑的连拍、字幕和感觉,并用一行说明您匹配的内容。复制其剪辑方式,绝不复制其素材、音乐或文字;要求提供文件,而不是从应用内下载他人的帖子。
    • 只有照片? 询问用户是否可以拍摄一些视频片段(免费且最真实)。如果不行,则交由 montage-video 处理,它会使用免费的本地运动移动照片。仅当用户要求真正的镜头运动或新角度时,才提及AI照片转视频功能,并说明需要付费计划(Figma Weave视频模型仅在付费Figma计划上运行)。只有在用户确认拥有付费计划并批准报价后,才按照 montage-video 的“AI镜头运动”进行操作。
    • 将文件保存到磁盘。 渲染器需要文件:要求提供文件夹或文件路径。粘贴到聊天中的视频无法被渲染器读取。如果文件在Google Drive中且存在Drive连接器,请使用它将其下载到新文件夹中。
    • 仅使用用户或客户拍摄的或拥有使用许可的素材,且仅使用同意出镜的人物。
  4. 导入素材。 运行 node VIDEO/montage.js inspect <文件夹> --slug <slug>,其中slug简短且命名视频(如 maple,taco-night)。

    • 它会将每个片段复制到 state/videos/assets/<slug>-01.mp4 等文件中,保留画面和声音原样,并删除元数据(包括手机片段中的位置信息)。原始文件不受影响。
    • 它会打印每个片段的大小、形状、长度以及是否有声音,并标记长片段、横屏片段和低分辨率片段。
    • 它会生成一个编号的联系表 <slug>-contact.png 和一个初始脚本 state/videos/<日期>-<slug>.md,每个文件一个镜头。
    • 将用户的音乐复制到 state/videos/assets/<slug>-music.<ext>,将画外音复制到 state/videos/assets/<slug>-vo.<ext>。
  5. 查看每个片段。 您不能播放视频,因此需要查看帧:

    • 对每个片段运行 node VIDEO/montage.js frames <片段> --every 1(对于短而繁忙的片段,使用 --every 0.5)。它会每秒排列一帧并显示其时间,并在片段声音较大时打印提示(有人说话或值得保留的声音)。读取每个联系表。
    • 命名每个片段显示的内容,并选择其最佳瞬间:稳定、清晰、光线良好、主体明确。跳过抖动的开始、手机放下、模糊以及任何未同意出镜的人。每个选择是一个片段区间,格式为 [from: 3.5] [to: 6.5]:大多数镜头1.5到4秒合适。一个长片段可以提供来自不同时刻的两到三个镜头。
    • 横屏片段裁剪为9:16。用 [focus: x%,y%] 注明需要保持在画面内的部分(人物、产品、壁炉)。
    • 注明需要保留声音的片段([sound]):有人对摄像头说话、笑声、烤架上的滋滋声。您无法听到声音,因此需要逐字询问用户所说的内容用于字幕,并说明您保留了哪些片段的声音,以便他们检查。
    • 说明您跳过了哪些片段或瞬间及其原因,以便用户可以推翻您的决定。
    • 按照 ${CLAUDE_PLUGIN_ROOT}/references/montage-guide.md(“片段:顺序”)排列镜头顺序:最强瞬间放在最前,然后按照场所或事件的路径进行,最后以CTA结束。
  6. 一次消息中确认范围。 提出方案,并允许用户修正:

    • 长度和镜头数量: 大约15、30或60秒,以及哪些瞬间来填充。
    • 音乐: 用户的曲目、客户的音效、其他类型、Creative Commons曲目(先发送供试听),或无。
    • 配音: 用户的画外音、保留原始声音的片段,或无。
    • 屏幕文字: 钩子(来自 ${CLAUDE_PLUGIN_ROOT}/references/hooks.md 的三个选项,每个来自不同模式)、每个镜头的标签、任何状态贴纸、CTA,以及清单或产品的价格和规格。每个事实均来自用户或客户。如果缺少某信息,则询问,或省略。
  7. 编写脚本并构建页面。 编辑初始脚本。格式和每个标签均在 VIDEO/montage.js 顶部有文档说明:

    ---
    title: taco night
    client: casa-lupe
    hook: tuesday is taco night
    cta: book a table · link in bio
    music: assets/taco-night-music.mp3
    pace: 4 beats
    ---
    3. assets/taco-night-03.mp4  Fresh off the grill  [from: 1.2] [to: 4] [sound]
    1. assets/taco-night-01.mp4  Handmade tortillas  [from: 0.5] [to: 3] [focus: 40%,60%]
    2. assets/taco-night-02.mp4  Meet chef Lupe  [from: 6] [to: 10.5] [sound] [say: Every tortilla is pressed by hand, every morning.]
    4. assets/taco-night-04.mp4  The patio  [from: 2] [to: 5] [move: push-in]
    
    • 片段区间: [from:] 和 [to:] 设置区间。然后镜头将适配节拍(向上取整,因此会播放超过 [to:] 一个节拍)。对于片段,使用 pace:(以节拍为单位,而非小节):一小节会将一个3秒的区间在96BPM下向上取整为5秒。
    • 片段原始声音: [sound] 同步播放声音,音乐在其下降低音量。该片段上的 [say: ...] 表示其中所说的内容,逐字添加字幕。不会再次配音。
    • 用户的画外音: voiceover: assets/<slug>-vo.m4a 和 voiceover-text: <用户逐字内容>。画外音从0.3秒开始播放(可用 voiceover-at: 更改),音乐在其下降低音量,字幕在每个镜头上低位置运行,并且镜头会延长以覆盖画外音。不要同时使用 [say: ...] 语音行。
    • 用户的音乐: music: assets/<slug>-music.mp3。其节拍由 beats.js 读取,剪切点落在节拍上。music: none 则为在应用内添加热门音效留出空间。
    • 镜头运动: 片段本身保持其原有运动。[move: push-in]、pull-out 或 drift 会在其基础上添加缓慢缩放。pan 会滑动放大的片段,因为画面之外没有空间可平移。
    • 混合照片: 照片的处理方式与 montage-video 中相同(平移、推进、3D运动)。

    然后运行 node VIDEO/montage.js state/videos/<日期>-<slug>.md。它会在脚本旁边生成 <日期>-<slug>.html,并打印镜头表、声音、配音以及任何注释(片段短于其镜头、为读取标签而保持的镜头等),并运行 render.js --check。修复检查中列出的问题(通常是通过缩短标签),然后重新运行直到干净为止。

  8. 初稿。 自行查看 node VIDEO/render.js <页面> --slides 的每一帧:确保主体在画面内(未从横屏片段中裁剪掉)、标签可读、字幕不与标签重叠、顺序能讲述故事。然后:

    • 向用户发送幻灯片以确认顺序和文字。
    • 渲染:node VIDEO/render.js <页面> state/videos/<slug>-v1.mp4 --cover 0。它会生成MP4(1080×1920,30fps)、封面图片,并且当存在配音或带字幕的片段声音时,还会生成 .srt 字幕文件。--draft 会先生成一个快速的半尺寸版本用于检查时间。切勿发布草稿。
    • 您无法听到结果。请用户收听:音乐、每个保留的片段声音以及画外音与字幕的同步情况。
  9. 编辑直到满意。 每次请求都成为对脚本的编辑,而不是对页面的编辑,因为 montage.js 会重新计算所有时间:

    用户说脚本中的更改
    “用她笑的那部分”该镜头的 [from:] / [to:](在 --every 联系表上找到)
    “去掉抖动的部分”更晚的 [from:],或更早的 [to:]
    “厨房部分长一点”更晚的 [to:],或 [hold: 4s]
    “快一点” / “慢一点”更短的区间,pace:(例如 3 beats),或 length:
    “做成15秒”length: 15,并删除最弱的瞬间(说明哪些)
    “厨房放前面”、“交换3和5”重新排序编号行
    “保留那一段的声音” / “静音”添加或删除 [sound]
    “给他说的话加字幕”在那一段 [sound] 片段上添加 [say: <他的逐字内容>]
    “添加我的画外音”添加 voiceover: 和 voiceover-text:
    “换首歌” / “不要音乐”music: 另一个文件、一种类型,或 none
    “显示左侧”、“让她保持在画面内”添加 [focus: 25%,50%]
    “放大它”添加 [move: push-in](并添加 [focus:] 定位)
    “更平滑” / “更干脆的剪辑”添加 transition: fade,或 cut、slide、zoom、wipe、flash
    “更改文本”标签,hook:,cta:,price:,specs:
    “慢动作”不支持:无速度变化。手机慢动作模式拍摄的片段按原速播放
    “换另一种颜色/Logo/电话号码”客户配置文件中的信息,而非脚本

    每轮:编辑脚本,再次运行 montage.js,然后对于时间更改使用 --draft,对于视觉效果更改使用 --slides。将下一个版本渲染为 <slug>-v2.mp4、-v3.mp4 等。切勿覆盖之前的版本,以便用户……

…(原文截断)

Individual skills in this repo

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

相关技能