OpenMontage 如何把参考视频转成可执行的制作方案:节奏、结构与成本分析流程
【免费下载链接】OpenMontageWorld's first open-source, agentic video production system. 12 production pipelines, 100+ tools, 700+ agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage
手里有一条让你觉得「我想要的就是这个感觉」的视频,但把它写成提示词时总是丢失节奏、结构和成本预期。OpenMontage 的参考视频工作流解决的就是这个问题:把一个视频 URL 或本地文件交给你的 AI 编码助手,系统的video_analyzer工具在本地完成下载、转录、场景检测、关键帧抽取和节奏分析,产出一份VideoAnalysisBrief;随后 Agent 对照你机器上的真实能力做审计,用成本估算器算出分项报价,给你 2-3 个有差异化的方案,先做一段 10-15 秒样例,确认后再进入完整流水线。整个流程的契约写在 skills/meta/video-reference-analyst.md,AGENT_GUIDE.md 把「make me something like this」类请求明确路由到这个技能。
适用前提:已完成make setup(或手动执行 README Quick Start 一节中的 venv、requirements.txt、npm install、piper-tts安装与.env复制),系统装有 FFmpeg,并有一个能读文件、跑 Python 的 AI 编码助手(Claude Code、Cursor、Copilot、Windsurf、Codex 均可)。参考视频可以是 YouTube/Shorts/Instagram/TikTok 链接或本地文件;注意这个技能只处理「照着这个风格做一条新的」,如果你是要剪辑已有素材,应走source_media_review与 footage-led 流水线,两者不要混用。
准备:让分析依赖就位
video_analyzer完全本地运行、不需要任何 API key,但依赖几项组件,安装说明直接写在 tools/analysis/video_analyzer.py 的install_instructions中:
- FFmpeg:必选(
brew install ffmpeg/sudo apt install ffmpeg) - yt-dlp:URL 源下载需要,
pip install yt-dlp - youtube-transcript-api:抓取 YouTube 字幕,
pip install youtube-transcript-api - faster-whisper:字幕不可用时的本地转录兜底,
pip install faster-whisper - scenedetect[opencv]:场景边界检测,
pip install scenedetect[opencv]
URL 源会以 720p 上限下载(max_resolution: "720p"),分析产物默认写入projects/_analysis/analysis_<时间戳>/目录,其中包含video_analysis_brief.json和keyframes/子目录;这是该工具声明的副作用,只写文件、不改系统状态。
第一步:触发参考分析工作流
在 AI 编码助手中把参考视频交给它,例如:
"Here's a YouTube Short I love. Make me something like this, but about quantum computing."按 AGENT_GUIDE.md 的要求,Agent 会先读 skills/meta/video-reference-analyst.md,然后执行该技能 Step 1 规定的分析调用:
video_analyzer.execute({ "source": "<url or path>", # 替换为你的视频 URL 或本地文件路径 "analysis_depth": "standard", # transcript_only / standard / deep,默认 standard "max_keyframes": 20 # 1-50,默认 20 })standard深度会依次执行:元数据抓取 → 字幕抓取(YouTube 优先走 youtube-transcript-api,失败则下载视频用 Whisper 转录)→ 场景检测(method: "content",min_scene_length_seconds: 0.5)→ 逐场景运动分类 → 场景引导的关键帧抽取 → 音频能量分析。每一步的成功与失败都会记入 brief 的_analysis_meta.steps_completed/steps_failed,后面验证时可以直接看。
读懂产出:节奏、结构与运动类型
VideoAnalysisBrief的字段契约定义在 schemas/artifacts/video_analysis_brief.schema.json。对制作方案最有决策价值的三部分:
1. 节奏档案(structure_analysis.pacing_profile)
包含cuts_per_minute(每分钟切点数)、平均/最短/最长场景时长,以及自动分类的pacing_style。分类阈值来自 video_analyzer.py 的_classify_pacing:
| 平均场景时长 | pacing_style |
|---|---|
| > 10s | slow_contemplative |
| 5-10s | steady_educational |
| 2-5s | dynamic_social |
| < 2s | rapid_fire |
2. 逐场景运动分类(motion_type+flow_variance)
工具对每个场景采样帧对,用 Farneback 稠密光流计算方差,把场景分为三类(阈值调用于 360p、0.4s 采样间隔):
- 平均光流幅值 < 0.5 →
static_image(几乎无运动) - 方差 < 2.0 →
animated_still(静帧上的推拉摇移,Ken Burns 类) - 其余 →
motion_clip(对象在独立运动,真实生成素材)
技能文档特别强调:不要猜参考片用的是生成视频还是静帧动画,直接读motion_type字段。多数场景是motion_clip就按视频生成工具规划;多数是animated_still则走图像生成 + Remotion/FFmpeg 组合路线。这一步也依赖 OpenCV(cv2),导入失败时该字段会全部退化为unknown,此时不能拿运动类型做规划依据。
3. 复制指导(replication_guidance)
自动给出suggested_pipeline(Shorts/TikTok/Instagram 源 →animation;slow_contemplative节奏 →cinematic;其余 →animated-explainer)、estimated_complexity(时长 > 300s 或场景 > 30 →complex;> 120s 或 > 15 →moderate;否则simple)、motion_required(≥ 30% 场景为motion_clip,或节奏为 dynamic/rapid 时为真)。这些字段是初筛,Agent 随后会亲自查看关键帧图像,把逐帧描述、色彩板、转场模式回填到content_analysis、style_profile和replication_guidance中,并按五要素(Subject / Subject Motion / Scene / Spatial Framing / Camera)格式化输出,供下游的 proposal、script、scene 阶段直接取用。
结果验证:工具声明的验证方式有三条——翻看keyframes/里的关键帧图像确认覆盖有代表性、把转录文本与视频听感对一遍、检查场景边界切分是否符合视觉切点。若某一步失败,按技能文档的错误处理表走:URL 下载失败则换链接或提供本地文件;无字幕则下载后走 Whisper;场景检测失败则退化为均匀帧采样;全部失败时让用户口述参考内容,转入标准创意流程。
第二步:能力审计,把需求对照到真实工具
分析完成后,Agent 会跑标准 preflight,直接可用这三条命令(在项目根目录执行):
python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.support_envelope(), indent=2))" python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.provider_menu(), indent=2))" python -c "from tools.tool_registry import registry; import json; registry.discover(); print(json.dumps(registry.capability_catalog(), indent=2))"然后把参考片的需求映射到已配置的能力上,缺口必须如实说明。技能文档给出的示例格式(文档示例):
REFERENCE NEEDS YOUR CAPABILITIES GAP ───────────────────── ───────────────────── ────────── Video clips (sci-fi) Video gen: 0/12 configured BLOCKED without key Narration (deep male) TTS: ElevenLabs available READY Background music Music: MusicGen available READY对于不可用能力,从 registry 的install_instructions读取安装说明,不硬编码 key 名或地址。有一个硬规则要注意:当 Remotion 和 HyperFrames 两个合成运行时都可用时,Agent必须把两个选项连同权衡一起呈现,等用户明确批准后才锁定render_runtime,静默默认任何一个都违反 AGENT_GUIDE.md 中的 "Present Both Composition Runtimes (HARD RULE)";只装了一个时则直接说明缺失项后继续。
第三步:成本估算流程
拿到目标时长和用户选定的工具方向后,成本不是拍脑袋报价,而是调用 tools/cost_tracker.py 的estimate_from_reference:
tracker.estimate_from_reference( video_analysis_brief=brief, # video_analyzer 产出的 brief 字典 target_duration_seconds=60, # 你要做的目标时长 tool_plan={ # 下方取值来自源码 docstring 示例,按实际选型替换 "image_generation": {"tool": "flux_fal", "cost_per_unit": 0.05}, "video_generation": {"tool": "kling_fal", "cost_per_unit": 0.30, "clip_duration_seconds": 5}, "tts": {"tool": "elevenlabs_tts", "cost_per_word": 0.00003}, "music": {"tool": "music_gen", "cost_per_track": 0.10}, }, )返回值是一份可核对的分项估算:line_items(每个类别的数量、单价、小计与basis依据说明)、total_usd、total_range_usd(low/high 区间)、sample_cost_usd(前 2 个场景的样例成本)、confidence(high/medium/low,取决于 brief 里场景与词数数据的完整度)以及assumptions(文字化的全部假设)。估算逻辑有几个关键点,都写在源码里:
- 场景数按节奏密度缩放:用参考片的
cuts_per_minute乘以目标时长,而不是线性拍脑袋;同时按pacing_style设最低场景数(rapid_fire10、dynamic_social8、steady_educational5、slow_contemplative3、variable6),快剪视频不会缩水成幻灯片。 - 运动占比决定视频生成量:运动秒数 ÷ 单片时长得出覆盖所需的 clip 数,再乘 1.3 的重试/废片缓冲。
- 旁白按词数计价:用参考片实际 WPM(无转录时默认 150)推算目标时长的词数。
- 报价是区间不是单点:low = 估算 ÷ 1.3(一次全过),high = 估算 × 1.15。
估算之外的钱由预算治理兜底:每个付费操作先estimate再reserve,执行完reconcile对账;超过单次审批阈值(默认 $0.50)或首次使用某个付费工具会暂停请求批准;总预算上限默认 $10,模式可选observe/warn/cap,cap 模式下超支直接抛BudgetExceededError。
第四步:提案、样例,然后进入流水线
提案必须带成本。Agent 给出 2-3 个差异化变体(技能文档明确禁止「碳拷贝」——参考片是灵感不是模板),每个变体包含:保留什么/改变什么、视觉方案(playbook、合成运行时、运动策略、clip 时长策略)、音频方案(旁白架构、选角、TTS 提供方)、时长按 provider 拆分的报价表,以及一条诚实评估(这个预算实际买到什么、买不到什么)。技能文档特别给出省成本策略:多数 provider 支持 5s 和 10s 片段,优先 10s 并合并叙事连贯的相邻场景——60 秒视频需要 6×10s 而不是 12×5s,成本和剪辑点都减半。provider 对比表呈现给用户选,Agent 可以给推荐和理由,但不能替用户做决定。
样例先行是强制的。用户选定变体后,Agent 先做 10-15 秒样例(开场 hook + 一个中段场景),含真实 TTS 旁白、真实生成的视觉素材、音乐片段和字幕样式预览,样例存在projects/<name>/assets/sample/sample_v{N}.mp4。即使你直接说「做完整版」,技能也要求 Agent 温和地劝阻先做样例;只有在被建议后仍坚持时才跳过。样例按反馈迭代到你批准为止。
进入流水线不可跳过。样例批准后 Agent 读取匹配的流水线清单(pipeline_defs/下的 YAML),按 research → proposal → script → scene_plan → assets → edit → compose 逐阶段执行,每个阶段前先读对应的skills/pipelines/<pipeline>/<stage>-director.md,在checkpoint_required: true处打检查点,在human_approval_default: true处等你批准。VideoAnalysisBrief 会作为 grounding 上下文随流水线各阶段传递,决策记入 decision_log。生产开始后 Backlot 看板会自动跟随,阶段、每个 provider 决策和每笔花费都实时可见:
边界与限制
- 运动分类依赖 OpenCV;缺失时
motion_type全部为unknown,此时只能靠pacing_style兜底判断,别当成确定结论用。 estimated_complexity的枚举里还有beyond_current_capability一档——分析结果若落在这一档,方案本身就不成立,换参考或降规格。- 这个流程产出的是「照着参考做一条新视频」的计划与生产;它不编辑参考片本身,也不适用于「cut this into clips」类请求(那走 clip-factory/talking-head/hybrid 等 footage-led 流水线)。
- 成本估算的
confidence字段告诉你估算的可信程度:brief 中同时有场景数据和旁白词数才是high,缺失数据时按文档如实向用户说明,而不是把low置信度当精确报价。
完成一次完整流程后,你手上应该有:一份经关键帧核对的video_analysis_brief.json、一张能力对照表、一份带区间和假设文字的分项成本估算、一段已批准的样例视频,以及一条进入流水线后的可审计决策轨迹。这些产物都是文件,随时可以回到任意检查点重看当时为什么做了那个选择。
【免费下载链接】OpenMontageWorld's first open-source, agentic video production system. 12 production pipelines, 100+ tools, 700+ agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考