Communitygithub.com

johnnyfekete/video-organize

组织原始素材用于脚本化视频。本地转录每个录音,查找每个镜头并与故事板场景匹配,评分完整性、破损词汇和音频,读取现场判定,推荐最佳镜头或两个镜头的补丁,根据故事板的B-roll备注编录B-roll,生成TAKES.md并提供使用电影风格名称重命名的功能。

video-organize 是什么?

video-organize是一个AI代理技能,用于在脚本化视频制作中自动组织原始素材。它能本地转录所有录音,将每个录制与故事板场景匹配,并进行完整性、音频质量和文字破损的评分。该技能依赖resolve-bridge、ffmpeg以及本地Whisper转录工具(或自定义转录命令)。支持生成详细的TAKES.md报告,显示每个场景的推荐镜头、评分原因、补丁建议以及无可用镜头的场景。工作流包括初始计数、运行转录和评分、用户辅助描述B-roll帧及其与故事板的匹配、处理镜头选择问题,最后提供安全的重命名操作(使用S02A_T03_original格式)。该技能设计为在video-setup之后、video-assemble之前使用,无需时间线,甚至可在Resolve关闭时工作。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/johnnyfekete/resolve-video-skills/tree/HEAD/skills/video-organize

在你喜欢的 AI 中提问

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

文档

video-organize 是做什么的?

在video-setup之后、video-assemble之前运行。无需时间线,可在Resolve关闭时工作。需要旁边安装resolve-bridge技能(或设置RVS_BRIDGE)、ffmpeg以及uv(用于本地Whisper)或RVS_TRANSCRIBE_CMD中的转录命令。

以python3 <本技能文件夹>/scripts/organize.py --workdir <文件夹> <命令>方式运行脚本。

故事板格式

纯Markdown,每个场景一块。场景ID来自标题。

## S01
Setup: counter top

Let me start with a confession: AI helped me plan this video.

## S03
Voiceover: yes
B-roll: showing AI researching something funny

Setup、Voiceover和B-roll是可选的。块中的其他所有内容都是口播文本。仅包含B-roll:的块是纯B-roll场景。没有标题的纯脚本将每个段落视为一个场景。如果没有故事板,镜头按相似文本分组(G01、G02),在TAKES.md顶部会有警告,并且不会进行针对脚本的评分或重命名提议。

工作流

  1. 设置检查。 运行video-setup的check。如果没有记录故事板,它会发出警告,并且.edit/config.json中应包含storyboard、approve_phrases和reject_phrases(旧的phrases列表仅作为注释显示:询问哪些短语是批准、哪些是拒绝的,并用setup.py write保存)。
  2. 先计数。 询问素材文件夹,然后:
    python3 scripts/organize.py --workdir <folder> run --footage <footage folder> [--storyboard FILE] [--every 2]
    
    不加--yes会打印计数结果(录音数、时长、场景数)并停止。与用户确认文件夹是否正确。
  3. 运行。
    python3 scripts/organize.py --workdir <folder> run --footage <footage folder> --yes
    
    转录(已转录且未更改的录音将被跳过)、查找并评分镜头、提取B-roll帧、写入TAKES.md并记录问题(无可用镜头的场景、未拍摄的B-roll、无人能修补的破损片段)。
  4. 你的部分:描述B-roll。 运行后会列出每个B-roll录音的一个帧文件夹(每样一个JPEG,第N帧位于N x every秒处)。对于每个文件夹:
    • 打开帧,按时间戳描述屏幕上显示的内容;
    • 将描述匹配到故事板的B-roll:备注:场景、开始时间、结束时间及原因;
    • 写入负载,然后记录它:
      {"<recording path>": {"frames": {"0": "a person typing", "2": "close-up of a screen"},
                            "matches": [{"scene": "S04", "start": 2, "end": 6, "why": "screen close-up"}]}}
      
      python3 scripts/organize.py --workdir <folder> describe payload.json
      
    仅描述你所看到的。不要凭空捏造匹配。
  5. 你的部分:镜头字母问题。 当运行无法判断一个场景的两个文件是否为同一机位设置时,它会列出一个带有帧差异的问题。询问用户,然后记录每个答案:
    python3 scripts/organize.py --workdir <folder> answer S02 <file> B
    
  6. 显示TAKES.md。 每个场景一个章节,首先是推荐的镜头、其评分和原因、补丁(标记有两个镜头ID,始终是一个建议)、未匹配的剪辑以及无镜头的场景。向用户朗读问题。
  7. 修正。 当用户偏好另一个镜头时("use S02A-T03"):
    python3 scripts/organize.py --workdir <folder> pick S02A-T03
    
    用户的选取在重新运行时保留。report重新写入TAKES.md而不更改其他内容。
  8. 重命名。 由organize.py rename提供(先显示提议,仅在用户批准完整列表后使用--apply,--undo可撤销)。显示完整的旧名到新名列表,并且仅在明确同意时应用。绝不以任何其他方式重命名。已放置在打开的Resolve项目时间线上的剪辑会被跳过并列出原因,因为重新链接已使用的剪辑可能会丢失其剪切和调色;如有必要,请在Resolve中手动重命名这些剪辑。如果项目包含复合剪辑、多机位剪辑或Fusion剪辑(其内容无法列出),则每个导入的剪辑都会被跳过。--apply会应用上次显示的提议,如果提议发生变化则拒绝。在Resolve关闭时,--apply和--undo需要--never-imported(素材从未被导入);如果Resolve处于打开状态,仍会检查已使用的剪辑。
  9. 完成。 运行本身会记录组织步骤,因此没有其他需要记录的内容。指向video-assemble(尚未构建)作为下一步。

名称

情况名称
TAKES.md中的镜头IDS02A-T03
包含一个镜头的文件S02A_T03_IMG_5419.MOV
包含同一镜头多个镜次的文件S02A_T01-T03_IMG_5420.MOV
包含多个场景的文件S03A_S05A_S06A_IMG_5422.MOV
场景的第二个机位设置S02B_T01_IMG_5430.MOV

每个镜头都有一个字母。不同字母表示不同的机位设置,而不是重拍。B-roll和未匹配的文件保留原名。

规则

  • 原始素材不会被移动或覆盖。只有通过批准的rename才能重命名。
  • 评分范围为0到100,并始终显示原因。现场拒绝的优先级高于评分,批准的优先级最高。画外音场景主要根据声音进行判断。
  • 补丁在自然停顿处至少替换一个完整的概念剪辑,绝不替换单个单词。
  • 工作文件存放在<文件夹>/.edit/organize/中(不要手动编辑)。video-assemble仅读取这些文件。

Individual skills in this repo

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

相关技能