这是一个面向 口播、教程、访谈、播客切片、录屏演示 / facecam demo 的 AI 视频剪辑生产线:给它原始口播音频/视频、transcript、B-roll、摄像头小窗或素材目录,它可以把“还没整理的素材”推进到 可发布的小红书 / 抖音 / 视频号短视频。
它不是一个单点 FFmpeg 脚本,而是一条完整工作流:转写 → 长视频择段 → 清稿 → 去口头禅/停顿 → 重组故事 → 分镜 → B-roll/生图/生成视频规划 → 字幕与声音设计 → 渲染前预检 → 单次编码渲染 → 质检 → 多平台导出 → 标题文案 → 续跑交接。适配 小红书 / 抖音 / 微信视频号 的比例、节奏、字幕、文案和常见审核风险。
- 把口播短视频从“素材堆”推进到“发布包”:转写、清稿、分镜、素材清单、渲染配置、字幕 sidecar、QA、标题正文和标签都能落成可审计 artifact。
- 针对中文社媒口播做过生产化调参:Heavy CJK 字幕、1.25x 主输出、响度规范化、平台违禁词 lint、章节卡、贴纸、BGM/SFX cue、三平台导出都不是通用 demo。
- 生成式素材有明确审批和台账:Codex
image_gen/ GPT Image 2 提示词、Dreamina/Veo/LTX/Wan/Sora 视频提示词、provider 决策、submit_id轮询下载和本地落盘 gate 都先记录再执行。 - 适合交给强推理模型做长流程代理执行:在 GPT-5.5 和 Claude Opus 4.8 这类面向复杂专业任务、agent 工作流的模型下,本 skill 对 口播类短视频 至少可以替代 80% 的常规视频剪辑工作。
这里的“80%”是按口播短视频生产来评估的:它已经覆盖素材整理、ASR、清稿、粗剪、字幕、B-roll/图像/生成视频规划、声音 cue、渲染前预检、渲染、质检、多平台导出和发布文案。剩下通常需要人工负责的是选题判断、最终审美取舍、品牌口吻、客户确认、复杂手工精修、调色混音和需要逐帧 keyframe 的高级特效。
做得比较完整的地方:
- 定位清楚:口播、教程、访谈、录屏和长视频切短视频是高重复剪辑场景,脚本化收益高。
- 流水线完整:从 transcript 到 publish gate 的 artifact 很全,失败点可复查,不依赖聊天上下文记忆。
- 风险控制到位:内容合规、素材授权、隐私遮挡、生成任务审批、渲染 QA、pipeline manifest 都有阻塞门禁。
- 本地优先:核心剪辑、渲染、质检不需要云端服务;外部生成任务只做规划、审批和台账。
需要用户知道的边界:
- 不应包装成全类型剪辑替代品:电影感剪辑、MV、广告大片、复杂调色混音和精细动效仍需要专业人工。
- AI 生成素材不等于自动可用:Dreamina/Veo/Sora 等结果必须经过下载、授权、视觉连续性和 QA 检查。
- 平台规则不是法律意见:
content_guard.py能拦常见风险词,但最终发布仍要人审。 - README 和 SKILL 偏长:功能很全,但新用户需要先走推荐入口,不适合从完整脚本文档硬读。
当前版本已经加入可选的视频理解层:基础流程不依赖机器视觉模型,安装 ultralytics 后可以用 YOLO 对抽样帧做物体检测,并把结果整理成统一的 video_understanding.v1。
extract_keyframes.py会抽关键帧和时序图,帮助 agent/用户快速看懂一段视频的视觉内容。scene_boundaries.py用 FFmpeg scene score 做视觉场景边界检测,供长视频拆条和 highlight snap 使用。video_understanding.py会按固定间隔和场景边界抽帧;--detector yolo会运行 Ultralytics YOLO,输出frames[]、detections[]、tracks[]、scene_tags[]和 review Markdown。media_library.py会读取视频元数据、文件名、标签、素材来源和关联 transcript,用透明分数推荐本地 B-roll。smart_reframe.py可以读取video_understanding.json,按人脸、人物、主体、物体等权重生成竖屏/方屏重构图计划。privacy_redact.py可以读取同一份检测框或人工框,对人脸、车牌、屏幕敏感区域生成 blur/pixelate/mask 计划。
这个设计是有意的:YOLO/RT-DETR/MediaPipe 等模型会带来模型下载、GPU/Metal/CUDA 兼容和速度问题;对大量口播视频来说,ASR + 关键帧 + 场景边界已经能覆盖主要剪辑决策。因此本项目把 YOLO 做成“需要时打开”的增强能力,而不是强制依赖。
video_understanding.py 的工作方式:
- 先用 FFmpeg 按场景边界和固定间隔抽帧,避免对每一帧跑模型。
- 如果安装了
ultralytics,用 YOLO 检测person、phone、laptop、screen/tv、car、bottle/cup等短视频常见对象。 - 用采样帧上的 bbox 做轻量 IoU/中心点关联,合并成
tracks[],用于判断主体是否移动、是否大面积占画、是否适合自动重构图。 - 输出统一的
video_understanding.v1:frames[]:时间戳、关键帧路径、场景 id。detections[]:label、bbox、confidence、source model。tracks[]:主体轨迹、出现时间段、中心点、面积变化、运动强度。scene_tags[]:人物、屏幕、产品、街景、车辆、手部演示等可检索标签。warnings[]:未启用 detector、未检测到对象、低置信度检测等。
- 下游复用这个 JSON:
smart_reframe.py做主体感知裁切,privacy_redact.py做隐私遮挡,media_library.py写入视觉标签,storyboard_assets.py选择更匹配的 B-roll,pipeline_manifest.py可把未复核的视觉检测列为 gate。
常用方式:
# 可选:只有需要 YOLO 检测时安装
pip install ultralytics
python3 scripts/scene_boundaries.py origin/talking.mp4 \
--output work/scene_boundaries.json \
--markdown work/scene_boundaries.md
python3 scripts/video_understanding.py origin/talking.mp4 \
--output work/video_understanding.json \
--markdown work/video_understanding.md \
--frames-dir work/video_frames \
--scene-boundaries work/scene_boundaries.json \
--detector yolo \
--model yolo11n.pt \
--sample-interval 2 \
--max-frames 32 \
--strict
python3 scripts/smart_reframe.py origin/talking.mp4 \
--detections work/video_understanding.json \
--platform douyin \
--output work/reframe_douyin.json \
--markdown work/reframe_douyin.md如果不想安装 YOLO,也可以只生成抽样帧和 review shell:
python3 scripts/video_understanding.py origin/talking.mp4 \
--output work/video_understanding.json \
--markdown work/video_understanding.md对于需要更细的逐帧动态跟踪的素材,可以把 Ultralytics model.track(..., tracker="bytetrack.yaml")、BoT-SORT 或 Norfair 的结果转换成同一份 detections[] / tracks[] JSON 再交给本项目。当前内置版本优先服务口播剪辑:抽帧检测 + 轻量轨迹已经足够支持主体裁切、隐私遮挡提示和 B-roll 标签。
口播音频 + 无声素材
│
├─→ transcribe.py 转写 + 词级时间戳 + 口误标记
│ (mlx-whisper / faster-whisper / openai-whisper)
│
├─→ video_understanding.py 抽样帧 + 可选 YOLO 物体检测
│ frames / detections / tracks / scene_tags
│
├─→ highlight_picker.py 长视频精华候选 / brief-query 定向找片段
│ 输出 score / hook / reason / render_config
│
├─→ rough_cut.py ASR 粗剪 → 去纯口头禅 / 相邻重复句
│ 输出可审计 cut list,可选单次 concat 渲染
│
├─→ rewrite_script.py LLM 重组为 5 段式 (hook/pain/turn/value[]/cta)
│ ↑ 8 hook 模板 + 5 CTA 模板 + 3 故事结构
│
├─→ content_guard.py 80+ 条平台雷区 lint (HARD-BLOCK / SOFT-WARN)
│ 极限词 / 导流 / 医美 / 财富诱导 ...
│
├─→ auto_enrich.py 调度 B-roll / 章节卡 / 贴纸 / BGM 卡点
│ │ transition / entity match / silence boundary / beat snap
│ │
│ └─→ imagegen_hint.py 抽象概念检测 → gpt-image-2 提示词
│ ↓ (Codex 内置 imagegen 工具直接执行;无 API key)
│ Codex imagegen 注意力机制 / 复利 / 信息茧房 等自动配图
│
├─→ audio_cue_sheet.py transcript → BGM / SFX 音频设计清单
│ 本地素材优先 / 生成审批 / pipeline gate
│
├─→ storyboard_plan.py transcript/clean_script → shot cards
│ 生成路由 / 连续性锚点 / Dreamina 额度提醒
│
├─→ video_prompt_pack.py Dreamina/Veo/LTX/Wan/Sora 提示词包
│ 角色/品牌一致性 / image-to-video / paid approval gate
│
├─→ generation_task_log.py 异步生成任务台账
│ submit_id / 轮询 / 下载 / 本地落盘 gate
│
├─→ storyboard_assets.py shot cards → 素材任务清单 / ready 预检
│ imagegen / Dreamina / motion / broll 状态表
│ 可选接入 media_library.py recommend 排名候选素材
│
├─→ stock_material_plan.py stock B-roll 搜索规划
│ Pexels / Pixabay / Coverr 查询计划 + 素材登记提示
│
├─→ screen_focus.py 录屏点击/热点 → focus_events 聚焦计划
│ render_final 自动放大、标记、标签
├─→ pip_overlay.py 录屏 + facecam → pip_overlays 小窗计划
│ render_final 单次编码合成 PIP camera
│
├─→ jump_cut.py 自适应静音检测 → cut list → 去停顿成片 + 切点音频 fade
│ └─→ timeline_view.py 切点 filmstrip + waveform 人工复核图
│
├─→ edit_preflight.py render_config/enrich_plan/cut list 渲染前预检
│ 缺文件、空剪辑、非法时间段、危险参数 gate
│
├─→ render_final.py 单次编码渲染 + enrich_plan 自动接入
│ B-roll / 章节卡 / 贴纸 / 生成图 / 点击聚焦 / PIP camera + Heavy 字幕 + 响度规范化
│ 可选 --versioned-output:输出 _V<N>,避免覆盖旧成片
│
├─→ render_qa.py 渲染后黑屏/静帧/静音/尺寸质检 + review packet
│ └─→ timeline_view.py QA 可疑区间可视化复盘
│
├─→ subtitle_pack.py SRT / VTT / ASS / JSON 字幕交付包
│ 支持 render_config 串接、加速倍率、片头 offset 对齐
│
├─→ import_capcut_subtitles.py
│ 剪映/CapCut 自动字幕 → transcript / gap cut list
│
├─→ project_resume.py 续跑上下文包 / agent handoff / 可选 CLAUDE.md
│
├─→ export_edl.py render_config / cut list → EDL + manifest
├─→ export_fcpxml.py render_config / cut list → FCPXML + manifest
│ 交给 Premiere / Final Cut Pro / Resolve
│
├─→ multi_export.py 小红书 3:4 / 抖音 9:16 / 视频号 ≤60s
│
└─→ generate_caption.py 标题 + 200-500 字正文 + 3-6 tags + 发布时段建议
适用场景:daily 短视频、口播为主的内容(创业/AI/职场/效率/Vlog)、要发小红书/抖音/视频号 不适用:电影感剪辑、纯音乐 MV、需要精细 keyframe 控制的特效视频
# 1. 装好依赖(macOS Apple Silicon 为例)
brew install ffmpeg
pip install mlx-whisper Pillow
# 2. 克隆
git clone https://github.com/maxazure/video-editing-skill ~/projects/video-editing-skill
cd ~/projects/video-editing-skill
# 3. 环境自检(应该全 ✅ 或 ⚠️ 可选项)
python3 scripts/utils.py
# 4. 跑一遍测试套件确认 OK
pytest tests/ # 394 个测试,约 5 秒每天做一条视频的完整模板:docs/prompts/15-xhs-daily-tech-video.md
| 依赖 | 用途 | 装法 |
|---|---|---|
ffmpeg |
一切视频/音频处理 | macOS: brew install ffmpeg · Linux: apt install ffmpeg |
python3 ≥3.10 |
跑脚本 | 系统 / pyenv / brew |
| Whisper | 语音识别 | 见下表 |
| 平台 | 推荐引擎 | 安装命令 |
|---|---|---|
| Apple Silicon (M1/M2/M3/M4) | mlx-whisper |
pip install mlx-whisper |
| NVIDIA GPU (CUDA) | faster-whisper |
pip install faster-whisper |
| Intel / AMD / CPU only | faster-whisper (CPU) |
pip install faster-whisper |
| 后备 | openai-whisper |
pip install openai-whisper |
中国用户走清华镜像:
pip install mlx-whisper -i https://pypi.tuna.tsinghua.edu.cn/simpleNVIDIA GPU 配置详见本文末尾的 Linux GPU 配置 段。
| 依赖 | 启用 | 缺时回落 |
|---|---|---|
Pillow |
章节卡 PNG 渲染(auto_chapter_cards) | 不能跑章节卡 |
librosa |
BGM 真实节拍检测 | 用 120 bpm 固定网格 |
pyyaml |
profile YAML 读取加速 | 用内置 fallback parser |
spacy + zh_core_web_sm |
高级 B-roll 命名实体识别(V3.2+ 路线图) | 用关键词列表匹配 |
| 运行环境 | 路径 | 凭证 |
|---|---|---|
| Codex CLI(推荐) | 用 Codex 内置 imagegen 工具,自动路由 gpt-image-2 |
无需 OpenAI API key |
| Claude Code / 其他 | 用 OpenAI Python SDK(openai.images.generate),或任何能调 gpt-image-1.5/2 的工具 |
需要 OPENAI_API_KEY |
生图优先使用 Codex 内置 image_gen 工具,即 OpenAI GPT Image 2(gpt-image-2)。
本 skill 只负责产出提示词(imagegen_hint.py)+ 提供模板库(prompts/imagegen_templates.yaml)—— 不内置 OpenAI 客户端。在 Codex 里 agent 直接调内置 imagegen;其他环境用户自行接入。
完整规则详见 docs/prompts/19-imagegen.md。
scripts/content_guard.py · 详细文档
80+ 条 regex 检查 4 类硬性违规 + 3 类软性警告:
| 级别 | 类别 | 例子 |
|---|---|---|
| 🚫 HARD | 广告法极限词 | 最 / 第一 / 唯一 / 万能 / 全网最低 / 遥遥领先 |
| 🚫 HARD | 导流外站 | 微信 / VX / wx / +V / 加微 / QQ / 手机号 / 抖音 / 二维码 |
| 🚫 HARD | 医美/医疗 | 治愈 / 根治 / 祛斑 / 抗衰 / 水光针 / 热玛吉 / 医生同款 |
| 🚫 HARD | 财富诱导 | 年入 X 万 / 躺赚 / 财富自由 / 稳赚不赔 / 零成本 / 暴利 |
| 标题/正文 | 标题 >20 字、!!! 连用、emoji 占比 >30%、正文 >800 字 |
被 render_final.py / rewrite_script.py / generate_caption.py 自动调用——HARD 违规导出退出码 2。
scripts/rewrite_script.py · hook 模板 · CTA 模板
- 8 个钩子模板:反常识、痛点共鸣、数字成绩、悬念问句、身份标签、反差对比、利益承诺、场景代入
- 5 个 CTA 模板:按小红书 CES 权重(关注 8 > 评论/分享 4 > 收藏/点赞 1)排序
- 3 种故事结构:
pain_solve(干货)/story_reversal(故事)/listicle(盘点)
不绑定任何 LLM 提供商——脚本输出 prompt,你喂给 Claude / ChatGPT,把返回 JSON 喂回脚本验证 + 物化为 clean_script.md。
| 模块 | 触发逻辑 |
|---|---|
auto_broll.py |
转折词(但是/然而/关键是/重点来了)/ 实体匹配素材库 / 长镜头守卫 |
auto_chapter_cards.py |
## 章节标题 / 静音 ≥1.5s 边界 / Pillow PNG 渲染 |
beat_sync.py |
librosa beat_track + ±200ms snap(缺时回落固定网格) |
auto_stickers.py |
情绪关键词→emoji 池(excited 🚀✨🔥 / doubt 🤔 / data 📈 等) |
auto_enrich.py |
编排上面四个,输出综合 plan JSON(含 imagegen cues) |
render_final.py --enrich-plan work/enrich_plan.json 会把 plan 里的 B-roll、章节卡、贴纸和已生成图片 cue 自动接回单次渲染;--enrich-plan 可重复传入,用来叠加 screen_focus_plan.json 这类独立计划。没有实际文件的 imagegen cue 会保留为提示,不会阻塞导出。
scripts/video_understanding.py · 详细文档
为口播、访谈、产品演示和户外素材补上结构化视觉线索:先按时间和场景边界抽帧;需要时再用 Ultralytics YOLO 识别人、手机、电脑、屏幕、车辆、杯子等常见对象;最后输出可审计的 video_understanding.v1。
常用:
python3 scripts/video_understanding.py origin/talk.mp4 \
--output work/video_understanding.json \
--markdown work/video_understanding.md
pip install ultralytics
python3 scripts/video_understanding.py origin/talk.mp4 \
--scene-boundaries work/scene_boundaries.json \
--detector yolo \
--model yolo11n.pt \
--output work/video_understanding.json \
--markdown work/video_understanding.md \
--strict输出可以直接交给 smart_reframe.py --detections 做主体感知裁切,也可以交给 privacy_redact.py --detections 做隐私遮挡计划。ultralytics 不是必装依赖;没有 detector 时仍然能生成抽样帧和 review shell。
scripts/highlight_picker.py · 详细文档
长视频拆短视频时,先从 transcript.json 生成可发布候选,输出透明 score、signals、warnings、hook_text、reason 和可选 render_config。默认模式会找 hook/value/duration 表现好的短视频片段;如果用户已经知道要找什么,加 --brief 或 --query 做 prompt-based clipping。
常用:
python3 scripts/highlight_picker.py \
--transcript work/long_transcript.json \
--brief "产品发布 用户反应 价格对比" \
--scene-boundaries work/scene_boundaries.json \
--video origin/long-talk.mp4 \
--output work/brief_highlights.json \
--markdown work/brief_highlights.md \
--render-config work/brief_render_config.json \
--platform douyin \
--num-clips 3 \
--strict--brief 会把自然语言意图拆成英文关键词和中文短语片段,写入每条 candidate 的 brief_match.score 与 matched_terms,但仍保留原来的自包含结尾、弱 hook、时长偏离等 warning。适合“找产品 reveal / 用户强反应 / 教程关键步骤 / 失败教训”这类定向剪片。
借鉴 agent 视频编辑工具对 color grading / filters 的重视,但保持本项目的单次编码原则:先生成 bounded color_grade.v1 调色计划和 Markdown review,最终由 render_final.py --color-grade 在字幕前接入同一条 FFmpeg filter graph。
常用:
python3 scripts/color_grade.py \
--preset screen \
--output work/color_grade.json \
--markdown work/color_grade.md
python3 scripts/render_final.py \
--config work/render_config.json \
--color-grade work/color_grade.json \
--output output/tutorial_master.mp4内置 natural、warm、cool、punchy、soft、cinematic、screen 七个 preset;自定义 brightness、contrast、saturation、gamma、temperature、tint、sharpness 会被限制在保守范围内,--strict 在参数被 clamp 时返回 2。若主片已经渲染完,也可以用 color_grade.py --input output/master.mp4 --render-output output/master_grade.mp4 做单独复版;日常推荐仍是在 render_final.py 里一次编码完成。
scripts/audio_cue_sheet.py · 详细文档
借鉴 OpenMontage / vibeframe / Claude Code Video Toolkit 这类 agentic video 项目对 narration、music、SFX、成本和 review report 的一等公民设计,但保持本项目轻量:只读 transcript 和本地素材目录,不生成音乐、不提交 TTS、不消耗 provider credits。
常用:
python3 scripts/audio_cue_sheet.py \
--transcript work/transcript.json \
--asset-root media/bgm \
--asset-root media/sfx \
--output work/audio_cue_sheet.json \
--markdown work/audio_cue_sheet.md
python3 scripts/audio_cue_sheet.py \
--transcript work/transcript.json \
--asset-root media \
--require-local-music \
--require-local-sfx \
--output work/audio_cue_sheet.json \
--markdown work/audio_cue_sheet.md \
--strict输出 audio_cue_sheet.v1:voice_track 记录主口播响度目标,music[] 给出全片 BGM mood / BPM / prompt / 本地候选或生成需求,sfx[] 根据“但是 / 重点 / 完成 / 风险”等触发词排 whoosh、ping、chime、warning tick。--strict 会在要求本地 BGM/SFX 但素材缺失时返回 2;pipeline_manifest.py 会自动识别 audio_cue_sheet.json 并把 summary.blocking > 0 列为 blocking gate。
scripts/storyboard_plan.py · scripts/video_prompt_pack.py · scripts/storyboard_assets.py · 分镜文档 · 视频提示词包文档 · 素材清单文档
借鉴 GitHub 上视频生成类项目的 storyboard / shot continuity / provider routing 思路,但保持本项目的轻量原则:脚本只做本地规划,不提交任何付费生成任务。
| 输出 | 说明 |
|---|---|
storyboard_plan.json |
每个 shot 的时间码、source segments、section、narration、keywords、visual first/motion/last frame |
generation_route |
codex_imagegen / dreamina_video / remotion_hyperframes / media_library_broll + fallback + why |
continuity.anchors |
系列色彩、比例、字幕安全区、上一镜头引用、关键词线索 |
storyboard_plan.md |
适合人工 review 的 shot cards,含 prompt 和检查项 |
video_prompt_pack.json |
每个 shot 的 Dreamina/即梦 Seedance、Veo、LTX、Wan、Sora 提示词、参考图路径、负面提示词和审批状态 |
storyboard_assets.json |
每个 shot 对应素材是否 ready、需要生成/审批/渲染/搜索;B-roll 可带 candidate_scores 排名理由 |
常用:
python3 scripts/storyboard_plan.py \
--transcript work/transcript.json \
--clean-script work/clean_script.md \
--output work/storyboard_plan.json \
--markdown work/storyboard_plan.md \
--max-shots 8 \
--target-aspect 9:16
python3 scripts/storyboard_assets.py \
--storyboard-plan work/storyboard_plan.json \
--asset-root work \
--media-library . \
--output work/storyboard_assets.json \
--markdown work/storyboard_assets.md路由规则:抽象概念优先 codex_imagegen;数字/指标优先 remotion_hyperframes;动作/场景变化推荐 dreamina_video 但只标记为需确认,因为 Dreamina/即梦生成可能消耗 credits;其他先走本地素材库 B-roll。传 --media-library <project_dir> 时,storyboard_assets.py 会从 media_index.json / media_index.db 里按标签、文件名、时长和画幅推荐候选,并在 Markdown 表里显示分数。storyboard_assets.py --strict 会在素材未 ready 时返回退出码 2,适合渲染前拦截。生图优先使用 Codex 内置 image_gen 工具,即 OpenAI GPT Image 2(gpt-image-2)。
scripts/video_prompt_pack.py · 详细文档
借鉴 GitHub 上视频生成 skill 对多模型提示词、角色参考 sheet、image-to-video 和 provider 成本审批的做法,但保持本项目 artifact-first:只把 storyboard_plan.json 转成 video_prompt_pack.v1 和 Markdown review,不提交 Dreamina/Veo/LTX/Wan/Sora 任务,不消耗 credits。
常用:
python3 scripts/video_prompt_pack.py \
--storyboard-plan work/storyboard_plan.json \
--asset-root work \
--character "same Chinese founder-host, navy jacket" \
--brand-anchor "palette=charcoal,white,signal yellow" \
--output work/video_prompt_pack.json \
--markdown work/video_prompt_pack.md \
--strict
python3 scripts/video_prompt_pack.py \
--storyboard-plan work/storyboard_plan.json \
--asset-root work \
--provider dreamina_seedance \
--animate-stills \
--approved \
--output work/video_prompt_pack.json \
--markdown work/video_prompt_pack.md输出 global.character_sheet_prompt、items[].prompt、items[].negative_prompt、items[].reference.expected_path/resolved_path、items[].approval_status 和 summary.blocking。--strict 会在 generated-video provider 还没有 --approved 时返回 2;pipeline_manifest.py 会自动识别 video_prompt_pack.json 并把未清零的 summary.blocking 列为 blocking gate。Dreamina/即梦、Veo、LTX、Wan、Sora 等视频生成可能消耗 credits,提交前先确认并保持小批量。
scripts/generation_task_log.py · 详细文档
借鉴 PixVerse skills 的 task polling / asset download 能力和 Claude Code Video Toolkit 的跨会话项目状态管理,但保持本项目本地化:只记录异步生成任务状态,不提交 paid jobs。
常用:
python3 scripts/generation_task_log.py import-provider-decision \
--provider-decision work/provider_decision.json \
--log work/generation_tasks.json \
--markdown work/generation_tasks.md \
--strict
python3 scripts/generation_task_log.py add \
--log work/generation_tasks.json \
--provider dreamina \
--task-id "<submit_id>" \
--shot-id shot_002 \
--expected-path work/generated_video/shot_002.mp4 \
--status submitted \
--markdown work/generation_tasks.md \
--strict
python3 scripts/generation_task_log.py update \
--log work/generation_tasks.json \
--provider dreamina \
--task-id "<submit_id>" \
--status downloaded \
--asset-path work/generated_video/shot_002.mp4 \
--markdown work/generation_tasks.md输出 generation_task_log.v1:tasks[].provider_task_id 保存 Dreamina submit_id / provider task id,poll_command / download_command 保存下一步命令,readiness 区分 needs_approval / pending / processing / needs_download / missing_asset / failed / ready。--strict 会在 summary.blocking > 0 时返回 2;pipeline_manifest.py 会自动识别 generation_tasks.json 并把未清零的异步任务列为 blocking gate。
借鉴终端视频编辑工具里的 transcript-aware B-roll 选择思路,但只做本地索引和透明打分,不下载 stock、不调用外部视觉模型。推荐结果会保留 score、reasons、absolute_path,方便 agent 或人工先确认再接入 render_config / enrich_plan。
常用:
# 先建立或刷新素材库索引
python3 scripts/media_library.py init .
python3 scripts/media_library.py scan .
# 给某个分镜或口播段找 B-roll 候选
python3 scripts/media_library.py recommend "AI workflow dashboard" \
--project-dir . \
--category broll \
--target-duration 3 \
--target-aspect 9:16 \
--json
# 让 storyboard_assets 的素材预检表直接带候选排名
python3 scripts/storyboard_assets.py \
--storyboard-plan work/storyboard_plan.json \
--asset-root work \
--media-library . \
--output work/storyboard_assets.json \
--markdown work/storyboard_assets.md
# 本地素材不够时,先规划 stock 查询,不直接联网下载
python3 scripts/stock_material_plan.py \
--subject "AI workflow automation" \
--script work/transcript.json \
--provider pexels \
--provider pixabay \
--provider coverr \
--media-library . \
--output work/stock_material_plan.json \
--markdown work/stock_material_plan.md
# 下载/自有素材确认授权后,登记到素材库和 provenance 元数据
python3 scripts/media_library.py import /path/to/downloaded.mp4 \
--project-dir . \
--category broll \
--copy \
--provider pexels \
--source-url "https://www.pexels.com/video/demo-123/" \
--creator "Demo Creator" \
--license "Pexels License" \
--tag "workflow,dashboard"打分规则:tag 命中权重大于文件名命中,其次是路径、metadata、关联 transcript;category=broll、视频类型、时长覆盖 cue、画幅接近目标比例会加分;默认过滤索引里已经不存在的文件,--include-missing 可用于清理 stale index。本地素材不足时,用 stock_material_plan.py 生成 Pexels / Pixabay / Coverr 查询计划;下载或客户给的素材再用 media_library.py import / annotate 写入 provider、source URL、creator、license 等元数据,供 asset_provenance.py 发布门禁复核。
scripts/screen_focus.py · 详细文档
借鉴 Screen Studio/Recordly/JianYing 类工具里的自动点击放大体验,但保持本项目的轻量方式:不录屏、不申请桌面权限,只把手工或工具导出的点击/热点事件转成可审计 focus_events enrich plan。
常用:
python3 scripts/screen_focus.py \
--events work/clicks.json \
--screen-width 1920 \
--screen-height 1080 \
--output work/screen_focus_plan.json \
--markdown work/screen_focus_plan.md
python3 scripts/render_final.py \
--config work/render_config.json \
--enrich-plan work/screen_focus_plan.json \
--output output/tutorial_master.mp4focus_events[] 支持像素或 0-1 坐标、duration、zoom、transition、marker_color 和 label;render_final.py 会在对应时间段淡入放大裁切画面,并把 label 合并为 timed badge,适合软件教程、产品演示和操作录屏。
借鉴 Loop 这类录屏编辑工具把 screen、microphone 和 optional camera 合成一个短反馈闭环的做法,但保持本项目的 artifact-first 方式:先把 facecam/camera 录制转成 pip_overlays[] 计划,复核 Markdown 后再交给 render_final.py --enrich-plan 单次编码合成,不混入 camera audio。
常用:
python3 scripts/pip_overlay.py \
--camera origin/facecam.mp4 \
--segment "0,18,bottom_right" \
--segment "18,42,top_right" \
--sync-offset 0.18 \
--width-ratio 0.24 \
--output work/pip_overlay_plan.json \
--markdown work/pip_overlay_plan.md
python3 scripts/render_final.py \
--config work/render_config.json \
--enrich-plan work/screen_focus_plan.json \
--enrich-plan work/pip_overlay_plan.json \
--output output/tutorial_master.mp4pip_overlays[] 支持每段独立 position、source_start、sync_offset、width_ratio、margin_ratio、opacity 和 transition;render_final.py 会随 --primary-speed / --speed 同步压缩 camera 小窗时间线,避免变速输出时讲解人画面和主画面错位。
scripts/subtitle_pack.py · 详细文档
借鉴 VideoLingo / Twick / ffsubsync 这类字幕工具对“可上传字幕文件、单行可读切分、时间线对齐”的重视,但保持本项目轻量:不重新转写、不调翻译/配音服务,只把现有 transcript.json 或 render_config.json 变成可校对、可上传的 sidecar 字幕包。
常用:
python3 scripts/subtitle_pack.py \
--transcript work/day58_transcript.json \
--output-dir output/subtitles \
--basename day58 \
--formats srt vtt ass json
python3 scripts/subtitle_pack.py \
--config work/render_config.json \
--output-dir output/subtitles \
--basename day58_master \
--speed 1.25 \
--offset 2.0--transcript 默认保留原始时间码;--config 默认按 render_final.py 的 clips 顺序串接时间线。--speed 对齐 --primary-speed,--offset 对齐封面/片头秒数;中文默认 18 字单行、英文默认 42 字单行,也可用 --max-chars 覆盖。
scripts/import_capcut_subtitles.py · 详细文档
借鉴 SmartCut / CapCut 自动字幕工作流:先在剪映里用 Auto Captions 生成或人工校对字幕,再把字幕轨导回本项目,生成兼容 rewrite_script.py、rough_cut.py、subtitle_pack.py 的 transcript.json。需要按字幕间隙做初剪时,同一个脚本也能输出 keep_segments cut list,交给 timeline_view.py 或 export_edl.py 复核。
常用:
python3 scripts/import_capcut_subtitles.py \
--draft ~/Movies/JianyingPro/User\ Data/Projects/com.lveditor.draft/day58 \
--transcript work/capcut_transcript.json \
--cut-list work/capcut_gap_cut.json \
--markdown work/capcut_subtitles.md \
--gap-threshold 1.0
python3 scripts/import_capcut_subtitles.py \
--srt exports/capcut_auto_captions.srt \
--transcript work/capcut_transcript.json \
--srt-output output/subtitles/capcut_clean.srt默认只读取剪映草稿里的 subtitle 材料,避免把封面标题/贴纸文字误当口播字幕;如果某个草稿把自动字幕保存成普通文字轨,可加 --include-overlays。--cut-list 是“字幕间隙代理”的保守粗剪,最终渲染前仍应跑 timeline_view.py --cut-list 人工复核。
借鉴 FireRed-OpenStoryline 的 ASR speech rough cut 思路,但保持本项目的本地可审计方式:不调用 LLM,直接利用 transcribe.py --detect-fillers 的结果和相邻 transcript 相似度,先输出计划,再选择是否渲染。
| 能力 | 说明 |
|---|---|
| 纯口头禅移除 | 读取 filler_words[].is_filler_only,也能用内置中英文 filler 词表兜底 |
| 相邻重复句检测 | 用归一化文本相似度识别口误重说,默认保守阈值 0.88 |
| 可审计计划 | 输出 decisions / removed_segments / keep_segments / speedup_ratio |
| 单次编码渲染 | 复用 jump_cut.py 的 concat 渲染命令,不产生多代中间文件 |
常用:
python3 scripts/rough_cut.py --transcript work/transcript.json --cut-list work/rough_cut.json
python3 scripts/rough_cut.py --transcript work/transcript.json --input origin/talking.mp4 --output output/talking.roughcut.mp4 --cut-list work/rough_cut.json
python3 scripts/timeline_view.py origin/talking.mp4 --cut-list work/rough_cut.json --output-dir output/verify/rough_cut借鉴视频生成/剪辑类 skill 里常见的 remove_silence / jumpcut 闭环,但默认先产出可审计 cut list,避免直接误切人声:
| 能力 | 说明 |
|---|---|
| 自适应阈值 | 先跑 loudnorm=print_format=json,用 input_thresh 作为 silencedetect 阈值 |
| 可审计 cut list | 输出 detected_silences / removed_segments / keep_segments / speedup_ratio |
| 安全 padding | 默认每个切点保留 0.08s,避免咬字被切掉 |
| 防爆音 fade | 默认每个保留片段加 30ms 音频淡入/淡出;--fade-duration 0 可关闭 |
| 单次编码渲染 | 用 trim/atrim + concat 一次输出,不产生中间重编码文件 |
常用:
python3 scripts/jump_cut.py input/talking.mp4 --dry-run --cut-list output/talking.jumpcut.json
python3 scripts/timeline_view.py input/talking.mp4 --cut-list output/talking.jumpcut.json --output-dir output/verify/cuts
python3 scripts/jump_cut.py input/talking.mp4 --output output/talking.jumpcut.mp4 --cut-list output/talking.jumpcut.json --fade-duration 0.03scripts/timeline_view.py · 详细文档
借鉴视频剪辑类 skill 的 timeline_view 工作台:在跳切前后或 QA 报警区间生成一张 PNG,上半部分是 filmstrip,下半部分是 waveform,方便快速判断“切点是否咬字、画面是否突跳、静音是否自然”。
常用:
python3 scripts/timeline_view.py output/day58_master.mp4 --at 42.5 --radius 1.5 --output output/verify/42_5s.png
python3 scripts/timeline_view.py origin/talking.mp4 --cut-list work/jumpcut.json --output-dir output/verify/cuts --limit 12scripts/imagegen_hint.py · scripts/prompts/imagegen_templates.yaml · 详细文档
抽象概念(注意力机制 / 复利 / 信息茧房 / 长尾效应 …)自动检测 + 适配 gpt-image-2 七槽位提示词结构。
- Codex 环境:检测到的 prompt 直接喂给 Codex 内置
imagegen工具——无需 OpenAI API key,Codex 自动路由到 gpt-image-2 - 其他环境:用 OpenAI Python SDK 自己接(
openai.OpenAI().images.generate(...),需OPENAI_API_KEY)。本 skill 只产 prompt,不内置客户端 - 内置 7 个 sample:注意力机制 / 信息茧房 / 复利 / 长尾效应 / 数据柱状图 / 章节标题卡 / 早晨笔记本 B-roll(每个都带双语 prompt + why-it-works)
- 5 个 structure 槽位:chapter_background / chapter_title_card / broll_fallback / data_visualization / abstract_concept
- gpt-image-2 规则全部编码:引号 = 精确文字渲染、约束写进 prose(无 negative-prompt 字段)、具体相机+光圈+光照(避免 "AI 味")、默认拒绝人脸/人手特写、中文标题不走 gpt-image-2
scripts/edit_preflight.py · 详细文档
借鉴 agent 视频编辑工具的 structured preflight / risky-parameter guardrails 思路,但保持本项目本地 artifact-first:先检查 render_config.json、enrich_plan.json 和 rough/jump cut list,再决定是否允许进入 FFmpeg 渲染。
常用:
python3 scripts/edit_preflight.py \
--config work/render_config.json \
--enrich-plan work/enrich_plan.json \
--output work/edit_preflight.json \
--markdown work/edit_preflight.md \
--strict输出 edit_preflight.v1,会检查空剪辑、缺视频/图片/音频文件、transcript + segment_id 不匹配、非法时间段、overlay 超出输出时间线、PIP/focus 参数风险。pipeline_manifest.py 会识别 edit_preflight.json,如果 summary.blocking > 0 就把它列为 blocking gate。它不解码、不渲染、不上传;渲染后仍然要跑 render_qa.py。
| 默认行为 | 触发命令 / 配置 |
|---|---|
| Heavy 字幕字体(Source Han Sans Heavy / STHeiti Medium) | find_chinese_font() 自动选 |
响度规范化 dynaudnorm + acompressor + loudnorm |
默认开启,--no-loudnorm 关 |
| 速度直接生效(不留 1.0× 副本) | --primary-speed 1.25 |
| 受众档位预设(节奏/字幕密度/BGM 增益) | --profile tech_pro |
| 内部 token 拦截 | 自动;任何 1.25x/mlx-whisper/loudnorm 出现在画面文本字段都退出 |
| 平台 lint | 自动;--no-content-guard 关 |
| 字幕风格 | --subtitle-style normal/karaoke/bold_pop/neon/minimal/yellow_pop |
| 自动丰富接入 | --enrich-plan work/enrich_plan.json,可重复传入 |
| 点击聚焦 | --enrich-plan work/screen_focus_plan.json,读取 focus_events[] |
| 调色接入 | --color-grade work/color_grade.json 或 config "color_grade": "screen" |
| 版本化输出 | --versioned-output 或 config "versioned_output": true |
scripts/render_final.py · 详细文档
借鉴 GitHub 上视频技能的“每次渲染保留新版本”工作流:--versioned-output 会把请求的 output/day58_master.mp4 写到下一个 output/day58_master_V<N>.mp4,避免 ffmpeg -y 覆盖上一版成片。--formats 会跟随实际版本文件生成 day58_master_V3_vertical.mp4 这类多比例输出。
常用:
python3 scripts/render_final.py \
--config work/render_config.json \
--enrich-plan work/enrich_plan.json \
--output output/day58_master.mp4 \
--versioned-output \
--formats vertical horizontal配置式开启:
{
"versioned_output": true,
"clips": [
{"video": "origin/talking.mp4", "segment_id": 1, "transcript": "work/transcript.json"}
]
}scripts/export_edl.py · scripts/export_fcpxml.py · 详细文档
借鉴自动剪辑/生成类项目常见的“先产 timeline,再交给专业剪辑软件继续精修”工作流:export_edl.py 可把本项目的 render_config.json 或 rough_cut.py / jump_cut.py 产生的 keep_segments 导出成单轨 CMX 3600 风格 EDL;export_fcpxml.py 导出 Final Cut Pro / DaVinci Resolve 更友好的单 spine FCPXML。两者都会写 JSON manifest,保留绝对源路径和精确秒数。
常用:
python3 scripts/export_edl.py \
--config work/render_config.json \
--output work/day58_edit.edl \
--fps 30 \
--title DAY58_EDIT
python3 scripts/export_edl.py \
--cut-list work/rough_cut.json \
--output work/rough_cut.edl \
--fps 30
python3 scripts/export_fcpxml.py \
--config work/render_config.json \
--output work/day58_edit.fcpxml \
--fps 30 \
--width 1080 \
--height 1920适合把自动粗剪交给 Premiere / Final Cut Pro / DaVinci Resolve 做调色、混音、精剪或协作复核。EDL 更通用,FCPXML 对 FCP / Resolve 更直接;复杂字幕、overlay、章节卡和 B-roll 仍以 render_final.py / export_capcut.py 为准。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
KyaniteLabs/mcp-video |
把 FFmpeg 工具包装成 structured tools,并强调 preflight validation / risky edit parameter guardrails,避免 silent bad media output | 新增本地 edit_preflight.py,专注渲染前 artifact 预检,不引入 MCP server |
browser-use/video-use |
把 production-correctness rules 和确认后再执行作为硬规则,减少 agent 直接改坏时间线 | preflight 在 render_final.py 前输出 JSON/Markdown review,供人/agent 先修再渲染 |
video-db/skills |
以 See → Understand → Act 的视频工作流提供搜索、编辑、字幕和导出能力,并返回可复核结果 | 本项目继续本地优先,只检查已有 render_config / enrich_plan / cut list |
wizenheimer/vibestudio |
透明、traceable 的本地 FFmpeg tool workflow,便于 agent 审计输入输出 | preflight 不解码、不渲染,只做结构、路径、时间和参数检查 |
hiteshK03/video-production-skill |
视频生产 skill 教 agent 在多工具之间选择正确顺序和参数 | daily workflow 现在把 preflight 放在 content guard 后、render_final 前 |
新增/调整能力:新增 scripts/edit_preflight.py,输出 edit_preflight.v1 JSON 和 Markdown,可检查 render_config.clips[] 非空、视频/图片/音频路径存在、direct start/end 或 transcript + segment_id 时间段合法、B-roll/image/PIP overlay 路径和时间线边界、focus 像素坐标是否缺 source_width/source_height、PIP width_ratio/opacity/source_start 等风险参数,以及 rough/jump cut keep_segments[]。pipeline_manifest.py 新增 edit_preflight artifact 类别;只要项目里已有 unresolved edit_preflight.json 且 summary.blocking > 0,manifest 会把它列为 blocking gate。新增 docs/prompts/53-edit-preflight.md,并更新 daily workflow、提示词目录、SKILL 和 README。
使用方式:渲染前跑 python3 scripts/edit_preflight.py --config work/render_config.json --enrich-plan work/enrich_plan.json --output work/edit_preflight.json --markdown work/edit_preflight.md --strict。如果有多个计划文件可重复传 --enrich-plan,如果要检查 rough/jump cut 结果可加 --cut-list work/jump_cut.json。脚本不会渲染、上传、下载或提交任何付费生成任务;渲染后仍需跑 render_qa.py。
验证结果:新增 tests/test_edit_preflight.py 7 项,并更新 tests/test_pipeline_manifest.py;.venv/bin/python -m pytest tests/test_edit_preflight.py tests/test_pipeline_manifest.py -q 通过 25 passed in 0.24s;.venv/bin/python scripts/edit_preflight.py --help smoke 通过;.venv/bin/python -m compileall scripts tests 通过;.venv/bin/python /Users/maxazure/.codex/skills/.system/skill-creator/scripts/quick_validate.py /Users/maxazure/projects/video-editing-skill 通过 Skill is valid!;git diff --check 通过;最终全量 .venv/bin/python -m pytest tests -q 通过 394 passed in 3.94s。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
browser-use/video-use |
把“每个 segment 边界加 30ms audio fade 防爆音”列为 production-correctness hard rule | jump_cut.py 默认给每个保留片段加 30ms fade-in/out,减少 concat 切点 pop |
WyattBlue/auto-editor |
自动静音剪辑支持 margin、audio/motion edit methods,并把 dead space removal 作为 first pass | 本项目保留现有自适应静音阈值和 --pad,只补缺失的音频边界处理,不引入复杂表达式 DSL |
GoogleCloudPlatform/vertex-ai-creative-studio genmedia-video-editor |
把视频生成、叠图、拼接、GIF、音视频同步拆成明确工具能力 | 本项目继续使用本地 FFmpeg CLI,把 fade 放进现有 single-pass filtergraph |
SamurAIGPT/AI-Youtube-Shorts-Generator |
长视频转短视频强调 Whisper、highlight ranking、auto crop 和 JSON 输出 | 本项目已有 highlight/reframe 路线,本次只修补最终 jump-cut 听感缺口 |
jianchang512/pyvideotrans / krillinai/KrillinAI |
多语转写、翻译、配音和音画同步说明音频链路质量会直接影响发布体验 | 本次不新增配音服务,只确保自动去停顿成片的切点音频更稳 |
新增/调整能力:scripts/jump_cut.py 新增 --fade-duration,默认 0.03 秒。渲染时每个 keep_segments[] 音频片段会在同一个 atrim/asetpts filter chain 中追加 afade=t=in 和 afade=t=out,不增加中间文件、不改变单次 concat 编码模型。短片段会自动把 fade 限制到片段时长的一半;需要完全硬切原声时可传 --fade-duration 0。cut list JSON 新增 fade_seconds 字段,方便后续 EDL/FCPXML/复核时知道实际音频边界策略。README、SKILL、docs/prompts/21-jump-cut.md、docs/prompts/15-xhs-daily-tech-video.md 和提示词索引已同步。
使用方式:先审查切点仍用 python3 scripts/jump_cut.py input/talking.mp4 --dry-run --cut-list output/talking.jumpcut.json;确认后渲染用 python3 scripts/jump_cut.py input/talking.mp4 --output output/talking.jumpcut.mp4 --cut-list output/talking.jumpcut.json --fade-duration 0.03。如需旧行为,传 --fade-duration 0。
验证结果:新增/更新 tests/test_jump_cut.py 3 项覆盖默认 fade、关闭 fade、短片段 fade clamp;.venv/bin/python -m pytest tests/test_jump_cut.py -q 通过 8 passed in 0.04s;相关回归 .venv/bin/python -m pytest tests/test_jump_cut.py tests/test_export_edl.py tests/test_export_fcpxml.py -q 通过 19 passed in 0.17s;合成 1.2 秒 FFmpeg smoke 成功输出 MP4 且 cut list 含 fade_seconds: 0.03;.venv/bin/python -m compileall scripts tests 通过;.venv/bin/python /Users/maxazure/.codex/skills/.system/skill-creator/scripts/quick_validate.py /Users/maxazure/projects/video-editing-skill 通过 Skill is valid!;git diff --check 通过;全量 .venv/bin/python -m pytest tests -q 通过 386 passed in 4.41s。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
digitalsamba/claude-code-video-toolkit |
project.json 跟踪 scenes/audio/sessions/phase,并把计划与实际文件 reconcile 后生成项目级 CLAUDE.md |
新增本地 project_resume.py,复用现有 gate,不引入项目数据库 |
HKUDS/ViMax |
Agent Loop + TUI 支持 session resume、context compaction 和工作目录 artifacts | 输出 project_resume.v1 + Markdown,让压缩上下文后的 agent 先读文件状态 |
SamurAIGPT/Generative-Media-Skills |
agent-native CLI、结构化 JSON 输出、semantic exit codes 和 recipe 化工作流 | project_resume.py --strict 在 blocked stage 返回 2,适合自动化收尾 |
JossBen/mcp-video-editing-assistant |
视频编辑助手把 timeline/workflow 学习状态持久化到 JSON | 本项目继续只读本地 artifacts,生成可恢复 handoff,不绑定 Resolve/MCP |
SamurAIGPT/AI-Youtube-Shorts-Generator |
LLM highlight detection、Whisper 和 auto-crop 证明长视频生产链需要可恢复状态 | 本项目已有 highlight/render/publish artifacts,本次补跨会话续跑入口 |
新增/调整能力:新增 scripts/project_resume.py,可扫描项目目录并复用 pipeline_manifest.py 的 gate,输出 project_resume.v1、Markdown resume 和可选项目级 CLAUDE.md。内容包括 phase、recommended_first_action、next_actions[]、latest_artifacts[]、ready artifacts、关键 gate snapshot、guardrails 和可直接交给下一位 agent 的 suggested_prompt。新增 docs/prompts/52-project-resume.md,更新 daily workflow、提示词目录、SKILL 和 README。另将 SKILL.md frontmatter 规范化:移除旧的顶层 argument-hint,并把过长 description 压缩到 skill 校验器允许范围。
使用方式:自动化收尾或跨会话接手前跑 python3 scripts/project_resume.py --project-dir work/day58 --target-stage publish_ready --output work/day58/project_resume.json --markdown work/day58/project_resume.md --agent-note work/day58/CLAUDE.md --strict。如果只想写默认项目级 agent note,可用 --agent-note 不带路径,脚本会写到 --project-dir/CLAUDE.md。脚本不渲染、不上传、不提交任何付费生成任务。
验证结果:新增 tests/test_project_resume.py 5 项;.venv/bin/python -m pytest tests/test_project_resume.py tests/test_pipeline_manifest.py -q 通过 22 passed in 0.27s;.venv/bin/python scripts/project_resume.py --help smoke 通过;.venv/bin/python -m compileall scripts tests 通过;.venv/bin/python /Users/maxazure/.codex/skills/.system/skill-creator/scripts/quick_validate.py /Users/maxazure/projects/video-editing-skill 通过 Skill is valid!;git diff --check 通过;最终全量 .venv/bin/python -m pytest tests -q 通过 384 passed in 4.40s。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
tadaspetra/loop |
录屏工具把 screen、microphone、optional camera、实时 transcript 和 PIP camera preview 放在同一编辑闭环里 | 新增本地 PIP overlay plan,不引入 Electron/录屏端依赖 |
browser-use/video-use |
强调 audio-primary、transcript-driven edits,并把 overlay animations 当成 agent 可执行能力 | PIP 继续挂在 transcript/render_config 驱动的 render_final.py --enrich-plan |
GoogleCloudPlatform/vertex-ai-creative-studio genmedia-video-editor |
把 image/video overlay 坐标、尺寸和 ffmpeg compositing 做成明确工具能力 | 本项目新增 timed video PIP overlay,保留单次编码原则 |
FireRedTeam/FireRed-OpenStoryline |
natural-language editing agent 强调 human-in-the-loop 和可复用 style/skills | PIP 先生成 JSON/Markdown review,再由用户/agent 复核后渲染 |
bilibili/carocut |
多 agent + Remotion 的视频制作助手说明 creator workflow 需要可组合的画面层 | 本项目仍用轻量 CLI artifact,不把 Remotion 变成 PIP 必需依赖 |
新增/调整能力:新增 scripts/pip_overlay.py,可把 facecam/camera 视频转成 pip_overlay_plan.v1,输出 pip_overlays[] 与 Markdown 复核表;支持多段 --segment "start,end[,position]"、--sync-offset、--source-start、--width-ratio、--margin-ratio、--opacity 和 --transition。render_final.py --enrich-plan 现在会合并 pip_overlays[],把 camera 小窗作为 timed video overlay 接入 B-roll/image/focus 之后、字幕之前,并在 --primary-speed / --speed 输出中同步压缩 PIP 时间线;camera audio 默认忽略,避免污染主口播/BGM 音频链路。
使用方式:先跑 python3 scripts/pip_overlay.py --camera origin/facecam.mp4 --segment "0,18,bottom_right" --segment "18,42,top_right" --sync-offset 0.18 --output work/pip_overlay_plan.json --markdown work/pip_overlay_plan.md;渲染时重复传入 enrich plan,例如 python3 scripts/render_final.py --config work/render_config.json --enrich-plan work/enrich_plan.json --enrich-plan work/screen_focus_plan.json --enrich-plan work/pip_overlay_plan.json --output output/tutorial_master.mp4。详细说明见 docs/prompts/51-pip-overlay.md。
验证结果:新增 tests/test_pip_overlay.py 8 项;.venv/bin/python -m pytest tests/test_pip_overlay.py tests/test_render_enrich_plan.py tests/test_screen_focus.py -q 通过 19 passed in 0.26s;.venv/bin/python -m compileall scripts tests 通过;.venv/bin/python scripts/pip_overlay.py --help 和 .venv/bin/python scripts/render_final.py --help smoke 验证通过;2 秒 FFmpeg 变速合成 smoke 验证 pip_overlays[] 可渲染为有效 MP4;最终全量 .venv/bin/python -m pytest tests -q 通过 379 passed in 4.01s。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
SamurAIGPT/Clip-Anything |
“describe what you want” 的 prompt-based clipping 很适合从长视频定向找时刻 | 在已有 highlight_picker.py 中新增 --brief/--query,不引入外部 API |
SamurAIGPT/AI-Youtube-Shorts-Generator |
长视频转短视频输出 highlights/score/hook/reason JSON,并强调 highlight selection criteria | 本项目已有 score/hook/reason;本次补 brief relevance 和 brief_match 字段 |
gyoridavid/short-video-maker |
面向 TikTok/Reels/Shorts 的 MCP + REST 自动生成链路,说明 agent/API 双接口对视频生产有价值 | 本项目继续保持 CLI artifact-first;--render-config 直接交给 render_final.py |
Anil-matcha/AI-B-roll |
用 AI B-roll 增强短视频可看性,强调按内容补画面 | 本项目已有 auto_enrich.py / storyboard_assets.py,本次不新增付费 B-roll API |
digitalsamba/claude-code-video-toolkit |
把 voiceover、music、image/video generation 和 review 工具拆成 agent 可调用脚本 | 本项目已有音频 cue、视频 prompt pack 和生成任务台账,本次只补定向择段缺口 |
新增/调整能力:scripts/highlight_picker.py 新增 --brief / --query,可把“产品发布 用户反应”“find the product reveal”这类自然语言意图拆成英文关键词和中文短语片段,并把 brief_match.score 纳入原有 hook/value/duration/completeness 打分。输出 JSON 和 Markdown 会显示 brief_match.matched_terms、score_breakdown.brief 和弱匹配 warning;--render-config 也会保留 brief_match 供后续渲染/复核。
使用方式:常规自动找精华仍用 python3 scripts/highlight_picker.py --transcript work/long_transcript.json --output work/highlights.json --markdown work/highlights.md --platform douyin --strict;定向找片段用 python3 scripts/highlight_picker.py --transcript work/long_transcript.json --brief "产品发布 用户反应 价格对比" --video origin/long-talk.mp4 --output work/brief_highlights.json --markdown work/brief_highlights.md --render-config work/brief_render_config.json --platform douyin --num-clips 3 --strict。详细说明见 docs/prompts/31-highlight-picker.md。
验证结果:新增/更新 tests/test_highlight_picker.py 2 项 brief/query 覆盖;.venv/bin/python -m pytest tests/test_highlight_picker.py -q 通过 9 passed in 0.07s;.venv/bin/python scripts/highlight_picker.py --help smoke 验证 --brief/--query 参数正常;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过;完整 .venv/bin/python -m pytest tests -q 通过 371 passed in 3.71s。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
WyattBlue/auto-editor |
自动剪辑后可导出 Premiere / Resolve / Final Cut Pro / Shotcut / Kdenlive 时间线 | 在已有 EDL handoff 外补 FCPXML,延续同一份剪辑计划 |
leeyc09/Silence-Cutter |
静音移除后直接输出 FCPXML,并强调 word-boundary / 字幕同步 | 本项目继续使用已有 rough/jump cut list;FCPXML 只做非破坏式 NLE 交接 |
AKMessi/vex |
typed shorts/edit plan、质量门禁、候选片段评分和 NLE handoff 思路清晰 | 复用本项目 manifest / QA / timeline_view gate,不新增云端依赖 |
browser-use/video-use |
transcript-first、EDL、render self-eval 的 agent 剪辑循环 | FCPXML 继续从 transcript/render_config/cut-list artifact 派生,保持可审计 |
KyaniteLabs/mcp-video |
把 FFmpeg、字幕、质量检查、repurpose package 包装为 typed/guardrailed 工具 | 本项目保持脚本式接口,但为 NLE handoff 增加更强格式覆盖 |
新增/调整能力:新增 scripts/export_fcpxml.py,可读取 render_config.json、rough_cut.py 或 jump_cut.py 的 keep_segments,生成单 spine FCPXML 和 <output>.json manifest;支持 --fps、--width、--height、--title、--source 和 --fcpxml-version。export_edl.py 保留,二者共享同一套 segment/event 解析。
使用方式:从成片配置导出用 python3 scripts/export_fcpxml.py --config work/render_config.json --output work/day58_edit.fcpxml --fps 30 --width 1080 --height 1920;从粗剪 cut list 导出用 python3 scripts/export_fcpxml.py --cut-list work/rough_cut.json --output work/rough_cut.fcpxml --fps 30。详细说明见 docs/prompts/27-export-edl.md。
验证结果:新增 tests/test_export_fcpxml.py 4 项;.venv/bin/python -m pytest tests/test_export_fcpxml.py -q 通过 4 passed in 0.06s;相关回归 .venv/bin/python -m pytest tests/test_export_fcpxml.py tests/test_export_edl.py tests/test_pipeline_manifest.py -q 通过 28 passed in 0.29s;完整 .venv/bin/python -m pytest tests -q 通过 369 passed in 4.76s;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
mrbuslov/capcut-ai-editor |
直接读取 CapCut 自动字幕,用字幕间隙和重复表达做 talking-head 智能粗剪 | 新增本地反向导入,不直接改草稿;输出 transcript 和可复核 cut list |
danyfernandes/capcut-srt-extractor-python |
从 CapCut 工程取回 SRT,解决剪映字幕难交付的问题 | 支持草稿 draft_content.json 和外部 SRT 两种入口 |
mutonby/openshorts |
长视频切短视频流水线重视 Auto Subtitles、hook overlays 和发布前资产交付 | 本项目保持本地 transcript/artifact 交付,不接入云端发布 API |
JiamanJemma/video-post-production-kit |
talking-head + screen recording 后期流程强调字幕校对和多轨可复核 | 新增 Markdown review + gap cut list,先复核再渲染/交给 NLE |
jurczykpawel/reelstack |
把外部生成器/编辑器当作内容来源,生产线负责统一 timing、caption、branding | 剪映可作为字幕校对入口,回流后继续走本项目统一 pipeline |
新增/调整能力:新增 scripts/import_capcut_subtitles.py,可从剪映/CapCut 草稿目录、draft_content.json 或 SRT 导入字幕,输出兼容本项目的 capcut_subtitle_transcript;可选 --cut-list 会按字幕间隙生成 keep_segments,供 timeline_view.py、export_edl.py 或后续粗剪流程复核;默认只导入 subtitle 材料,避免封面标题/贴纸文字混入 transcript,必要时用 --include-overlays 兜底。
使用方式:从剪映草稿导入用 python3 scripts/import_capcut_subtitles.py --draft ~/Movies/JianyingPro/User\ Data/Projects/com.lveditor.draft/day58 --transcript work/capcut_transcript.json --cut-list work/capcut_gap_cut.json --markdown work/capcut_subtitles.md --source-media origin/talking.mp4;从 SRT 导入用 python3 scripts/import_capcut_subtitles.py --srt exports/capcut_auto_captions.srt --transcript work/capcut_transcript.json --srt-output output/subtitles/capcut_clean.srt。详细示例见 docs/prompts/50-import-capcut-subtitles.md。
验证结果:新增 tests/test_import_capcut_subtitles.py 5 项;.venv/bin/python -m pytest tests/test_import_capcut_subtitles.py -q 通过 5 passed in 0.05s;完整 .venv/bin/python -m pytest tests -q 通过 365 passed in 4.87s;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过;.venv/bin/python scripts/import_capcut_subtitles.py --help smoke 验证 CLI 参数正常。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
Huanshere/VideoLingo |
关注字幕切分、对齐、单行字幕、翻译/配音交付质量 | 新增本地字幕包导出;本次不引入翻译/配音依赖 |
smacke/ffsubsync |
把字幕文件和视频对齐当作独立交付能力 | 支持 --speed / --offset,让 sidecar 字幕对齐最终成片 |
ncounterspecialist/twick |
AI captions + timed tracks 可接入编辑器/SDK | 输出 SRT/VTT/ASS/JSON,方便平台上传、网页播放和人工校对 |
vericontext/vibeframe |
agent-native 项目产物保留 build/review report | JSON manifest 保留 cue 来源、时序参数和 warning |
harry0703/MoneyPrinterTurbo |
topic-to-video 流水线包含字幕、素材和 BGM 交付 | 本项目已有完整短视频流水线,本次补齐平台字幕 sidecar |
新增/调整能力:新增 scripts/subtitle_pack.py,可从 transcript.json 或 render_config.json 导出 SRT、VTT、ASS 和 JSON manifest;默认中文 18 字单行、英文 42 字单行,优先按标点/词边界切分;如果 transcript 带 words[],会用词级时间戳生成更准的 cue;--config 会按最终 clips 串接时间线,--speed 和 --offset 用来对齐 render_final.py --primary-speed 和片头封面秒数。
使用方式:原始转写字幕用 python3 scripts/subtitle_pack.py --transcript work/day58_transcript.json --output-dir output/subtitles --basename day58 --formats srt vtt ass json;最终成片字幕用 python3 scripts/subtitle_pack.py --config work/render_config.json --output-dir output/subtitles --basename day58_master --speed 1.25 --offset 2.0。详细示例见 docs/prompts/29-subtitle-pack.md。
验证结果:新增 tests/test_subtitle_pack.py 4 项;.venv/bin/python -m pytest tests/test_subtitle_pack.py -q 通过 4 passed in 0.06s;完整 .venv/bin/python -m pytest tests -q 通过 218 passed in 3.28s;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过;.venv/bin/python scripts/subtitle_pack.py --help smoke 验证 CLI 参数正常。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
calesthio/OpenMontage |
agentic production pipeline、质量门禁、artifact 交付清晰 | 保持本地 JSON/Markdown artifact,不引入云端生成依赖 |
vericontext/vibeframe |
media/、storyboard、build/review report 串成 agent-native 项目循环 |
storyboard_assets.py --media-library 把素材索引结果写进 readiness manifest |
AKMessi/vex |
transcript-aware B-roll / generated visual scoring,强调先规划再合成 | 新增透明 score / reasons 的本地候选排名 |
DojoCodingLabs/remotion-superpowers |
stock footage、视频 review loop、短视频 preset 集成 | 本项目只推荐本地素材;下载/生成仍走已有 storyboard / Dreamina / imagegen 路由 |
新增/调整能力:scripts/media_library.py 新增 recommend 子命令,可从 media_index.json / media_index.db 中按查询词、tag、文件名、metadata、关联 transcript、时长覆盖和目标画幅给本地素材打分;scripts/storyboard_assets.py 新增 --media-library,会把 media_library_broll shot 的 ranked B-roll 候选写入 candidate_paths 和 candidate_scores,Markdown 复核表会显示候选分数。
使用方式:先用 python3 scripts/media_library.py scan . 建索引,再跑 python3 scripts/media_library.py recommend "AI workflow dashboard" --project-dir . --category broll --target-duration 3 --target-aspect 9:16 --json;分镜预检时加 --media-library .,例如 python3 scripts/storyboard_assets.py --storyboard-plan work/storyboard_plan.json --asset-root work --media-library . --output work/storyboard_assets.json --markdown work/storyboard_assets.md。
验证结果:新增 tests/test_media_library_recommend.py 3 项,并更新 tests/test_storyboard_assets.py;.venv/bin/python -m pytest tests/test_media_library_recommend.py tests/test_storyboard_assets.py -q 通过 9 passed in 0.11s;完整 .venv/bin/python -m pytest tests -q 通过 214 passed in 2.21s;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过;python3 scripts/media_library.py recommend --help smoke 验证 CLI 参数正常。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
video-db/skills |
视频理解后返回可搜索 moment、可播放 evidence clip 和可分享输出 | 新增本地 QA review packet,不引入外部服务 |
remotion-dev/skills |
把渲染后检查做成明确的 inspect/fix 闭环 | render_qa.py 现在可直接生成 Markdown/JSON 复核包 |
heygen-com/skills |
通过可复用状态文件把 avatar/video/translate 串成生产链 | 本项目继续沿用 JSON/Markdown artifact 串联,不新增供应商状态 |
libtv-labs/libtv-skills / Wan-Video/Wan-skills |
异步生成、轮询和下载结果的任务化交付 | 本次先补渲染后 evidence handoff;生成任务仍交给 storyboard/Dreamina 路由 |
新增/调整能力:scripts/render_qa.py 增加 --review-dir,可把黑屏、静帧、静音检测出的可疑区间汇总成 render_qa_review.json 和 render_qa_review.md;加 --review-clips 时会为每个可疑区间抽取带上下文的短 MP4 到 clips/。新增 build_review_segments() / write_review_packet(),便于自动化流水线复用。
使用方式:python3 scripts/render_qa.py output/day58_master.mp4 --platform douyin --json output/day58_qa.json --review-dir output/verify/day58_qa --review-clips;只想生成复核表、不抽视频片段时去掉 --review-clips。可用 --review-padding 1.0 调整前后文秒数,用 --max-review-segments 12 控制证据数量。
验证结果:新增/更新 tests/test_render_qa.py,.venv/bin/python -m pytest tests/test_render_qa.py -q 通过 9 passed in 0.02s;完整 .venv/bin/python -m pytest tests -q 通过 210 passed in 2.20s;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过;2 秒黑屏/静音合成视频 smoke 验证 --review-dir --review-clips 会写出 Markdown、JSON 和 2 个证据 MP4。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
luoluoluo22/jianying-editor-skill |
剪映自动化覆盖录屏、智能变焦、红圈提示这类教程视频高频需求 | 新增本地 screen_focus.py,不依赖剪映桌面控制 |
njraladdin/screen-demo |
Screen Studio 替代品,强调录屏后的 zoom animation、cursor tracking、背景包装 | 新增点击/热点 → zoom cue 的可审计计划 |
webadderall/Recordly |
自动 zoom suggestions、cursor polish、styled frame,面向产品 walkthrough | focus_events[] 可叠加到现有 enrich-plan 渲染链路 |
Itz-Hex/hypr-obs-mouse-follow |
OBS 录制时跟随鼠标并平滑放大,适合教程录屏 | 本项目改为后期渲染时裁切放大,避免录制端绑定 |
新增/调整能力:scripts/screen_focus.py 可读取 JSON/CSV/inline 点击事件,把像素或 0-1 坐标标准化为 screen_focus_plan.v1,输出 focus_events[] 和 Markdown 复核表;render_final.py --enrich-plan 现在可重复传入,并能把 focus_events 转成 timed zoom crop、提示框和可选 label badge。
使用方式:先跑 python3 scripts/screen_focus.py --events work/clicks.json --screen-width 1920 --screen-height 1080 --output work/screen_focus_plan.json --markdown work/screen_focus_plan.md;渲染时追加 --enrich-plan work/screen_focus_plan.json,或和 work/enrich_plan.json 一起重复传入。
验证结果:新增 tests/test_screen_focus.py 6 项通过;相关回归 tests/test_render_enrich_plan.py 5 项通过;完整 .venv/bin/python -m pytest tests -q 通过 208 passed in 3.10s;python3 -m compileall scripts tests 通过;git diff --check 通过;inline --event smoke 输出了有效 screen_focus_plan.v1,2 秒合成视频实测 focus_events 可成功渲染为有效 MP4。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
hoodini/ai-agents-skills 的 Yuv-Viral-Video |
明确要求每次输出 _V<N>,旧成片不被覆盖 |
新增 render_final.py --versioned-output |
video-db/skills |
“See → Understand → Act”、搜索/编辑/导出一体化 | 已有 transcribe/enrich/render/QA 链路,暂不引入外部服务 |
higgsfield-ai/skills |
生成后评分与 branded video mode | 本项目已有平台 lint 与 caption 规则,后续可加 hook/retention 评分 |
smixs/visual-skills |
视频生成强调 shot card、连续性与模型路由 | 本项目已有 gpt-image-2 路由;视频生成路由保持 Dreamina/即梦外部 skill |
新增/调整能力:next_versioned_output_path() 会扫描同目录已有 *_V<N>.mp4,自动选下一个版本;CLI 增加 --versioned-output,配置文件支持 "versioned_output": true;多平台 --formats 改为基于实际版本主文件导出。
使用方式:在最终渲染命令加 --versioned-output,或在 render config 写入 "versioned_output": true。
验证结果:新增/相关测试 12 项通过;完整 .venv/bin/python -m pytest tests -q 通过 180 项;python3 -m compileall scripts tests 通过;真实 1 秒 ffmpeg 合成验证了 master.mp4 会输出为 master_V1.mp4。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
calesthio/OpenMontage |
provider scoring、pipeline manifest、decision log、post-render gates | 新增本地 shot-card 路由,不直接接云端 provider |
HKUDS/ViMax |
shot-level storyboard、first/last frame、motion description、continuity | 新增 first/motion/last frame 和 continuity anchors |
trilogy-group/ttv-pipeline |
keyframe/chaining mode、长视频分段、backend fallback | 新增 route fallback 与 Dreamina 额度提醒 |
vericontext/vibeframe |
brief → storyboard/design → validate/build 的 agent-native 项目循环 | 新增 storyboard_plan.md 供 agent/human review |
dseditor/AI-storyboard-generator |
cut count、图片/视频重生成、ComfyUI 工作流配置 | 新增 --max-shots 和每镜头 prompt card |
Forget-C/Jellyfish |
shot preparation、候选资产确认、统一 readiness state、任务状态 | 新增 storyboard_assets.py 素材 readiness manifest |
samagra14/mediagateway |
多 provider 状态、gallery 管理、成本统计 | 新增 paid_credit_tasks 与 needs_approval 状态 |
aaurelions/vidosy |
JSON 驱动视频结构与 media assets 约定 | 新增 work/imagegen / work/generated_video / work/motion 默认路径 |
新增/调整能力:scripts/storyboard_plan.py 可把 transcript.json 和可选 clean_script.md 转为 storyboard_plan.json / storyboard_plan.md,为每个 shot 标注时间码、叙事段落、画面语言、生成路由、fallback、连续性锚点和 review checks;scripts/storyboard_assets.py 可把分镜转成素材 readiness manifest,标出 ready / candidate_found / needs_generation / needs_approval / needs_render / search_needed,其中 dreamina_video 只做规划并明确提示可能消耗 credits。
使用方式:先跑 python3 scripts/storyboard_plan.py --transcript work/transcript.json --clean-script work/clean_script.md --output work/storyboard_plan.json --markdown work/storyboard_plan.md --max-shots 8 --target-aspect 9:16,再跑 python3 scripts/storyboard_assets.py --storyboard-plan work/storyboard_plan.json --asset-root work --output work/storyboard_assets.json --markdown work/storyboard_assets.md --strict 做渲染前素材预检。
验证结果:新增 tests/test_storyboard_plan.py 5 项和 tests/test_storyboard_assets.py 5 项通过;.venv/bin/python -m pytest tests/test_storyboard_assets.py tests/test_storyboard_plan.py -q 通过 10 项;完整 .venv/bin/python -m pytest tests -q 通过 190 passed in 1.51s;python3 -m compileall scripts tests 通过。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
FireRedTeam/FireRed-OpenStoryline |
ASR speech rough cut:按时间戳去口头禅、卡壳和重复表达,并把结果交给后续 timeline | 新增本地 rough_cut.py,用 transcript/filler metadata 生成可审计 cut list |
WyattBlue/auto-editor |
自动剪辑输出可交换时间线,强调先生成 timeline 再渲染/交给 NLE | rough_cut.py 先产 decisions / keep_segments,再可选渲染 |
AcademySoftwareFoundation/OpenTimelineIO |
editorial timeline interchange 与 adapter 生态 | 本次暂不引入 OTIO 依赖,保留 JSON cut list 作为轻量交换层 |
calesthio/OpenMontage |
pipeline artifact / review gate / tool contract | 新增 rough cut 计划里的 review_hint,继续走 timeline_view 人工复核 |
新增/调整能力:scripts/rough_cut.py 可读取 transcript.json,自动移除纯口头禅片段和相邻重复句,输出 rough_cut.json,其中包含每个删除决策、合并后的移除区间、保留区间、预计输出时长和节奏压缩比例;传入 --input/--output 时可直接复用现有 concat 渲染能力。
使用方式:先跑 python3 scripts/transcribe.py origin/voice.wav --language zh --word-timestamps --detect-fillers,再跑 python3 scripts/rough_cut.py --transcript work/transcript.json --cut-list work/rough_cut.json 审查计划;确认后用 python3 scripts/rough_cut.py --transcript work/transcript.json --input origin/talking.mp4 --output output/talking.roughcut.mp4 --cut-list work/rough_cut.json 渲染。
验证结果:新增 tests/test_rough_cut.py 5 项通过;python3 -m compileall scripts tests 通过;完整 .venv/bin/python -m pytest tests -q 通过 195 passed in 1.42s;docs/prompts/26-rough-cut.md 记录完整使用方式。
本次联网研究的 GitHub 参考:
| 来源 | 值得借鉴的优点 | 本项目处理 |
|---|---|---|
WyattBlue/auto-editor |
自动剪辑后可导出 Premiere / Resolve / Final Cut Pro / Shotcut / Kdenlive 等时间线 | 新增本地 EDL handoff,不改变现有渲染链路 |
AcademySoftwareFoundation/OpenTimelineIO |
editorial timeline interchange,支持 FCP XML / AAF / CMX 3600 EDL 等 adapter 生态 | 不引入重依赖,先实现单轨 CMX 3600 风格 EDL + manifest |
Memories-ai-labs/vea-open-source |
agent 产出 FCPXML,并可交给 DaVinci Resolve 渲染 | 本项目补上 NLE 交接产物,保留专业软件精修入口 |
geerlingguy/final-cut-it-out |
用 ffmpeg 检测 silence 后在 Final Cut Pro 时间线上移除片段 | 本项目保持非破坏式:先导出 EDL/manifest,由人确认后进 NLE |
新增/调整能力:scripts/export_edl.py 可读取 render_config.json、rough_cut.py 或 jump_cut.py 的 keep_segments,生成单轨 EDL 和 <output>.json manifest;支持 --fps、--title、--source 和可选 --include-transcript-comments。
使用方式:从成片配置导出用 python3 scripts/export_edl.py --config work/render_config.json --output work/day58_edit.edl --fps 30;从粗剪 cut list 导出用 python3 scripts/export_edl.py --cut-list work/rough_cut.json --output work/rough_cut.edl。
验证结果:新增 tests/test_export_edl.py 7 项通过;完整 .venv/bin/python -m pytest tests -q 通过 202 passed in 3.18s;python3 -m compileall scripts tests 通过;git diff --check 通过;research archive validator 通过(4 个 repo、4 份 file tree)。
借鉴 Remotion/视频生成类技能常见的“render → inspect → fix”闭环,以及 VideoDB 类项目的 playable evidence handoff,渲染完成后用 ffprobe/ffmpeg 自动检查并可生成复核包:
| 检查 | 目的 |
|---|---|
| video/audio stream | 防止导出空壳、无声视频 |
| duration / dimensions / fps | 防止平台尺寸错、时长异常 |
blackdetect |
发现误裁、素材丢失导致的黑屏 |
freezedetect |
发现长时间卡帧/静帧 |
silencedetect |
发现人声链路丢失或长静音 |
常用:
python3 scripts/render_qa.py output/day58_master.mp4 --platform douyin --json output/day58_qa.json
python3 scripts/render_qa.py output/day58_xhs.mp4 --platform xhs
python3 scripts/render_qa.py output/day58_master.mp4 \
--platform douyin \
--json output/day58_qa.json \
--review-dir output/verify/day58_qa \
--review-clips
python3 scripts/timeline_view.py output/day58_master.mp4 --at 42.5 --radius 1.5 --output output/verify/qa_42_5s.png--review-dir 会写 render_qa_review.json 和 render_qa_review.md,把黑屏、静帧、静音的可疑区间按 FAIL/WARN 排序;--review-clips 会额外抽取短 MP4 证据片段。只需要审阅清单时不加 --review-clips。
scripts/multi_export.py · 详细文档
| 平台 | 尺寸 | 时长 | 说明 |
|---|---|---|---|
| 小红书 / RED | 1080×1440 (3:4) | — | 占满 feed 缩略图 (+40% 显示面积) |
| 抖音 / TikTok | 1080×1920 (9:16) | — | 全屏沉浸 |
| 微信视频号 | 1080×1920 (9:16) | ≤60s | 自动截断;社交链分发 |
无 LLM 依赖,纯规则:
- 标题 ≤18 字,前 18 字含 2 个 TF-IDF 关键词
- 正文 200-500 字,每 ~60 字一个 emoji(
📌✨💡🔥👇✅🚀📈) - 3-6 个 # tag,混合垂类 + 长尾(避免纯热词堆叠被判搬运)
- 发布时段建议来自所选 audience profile
scripts/publish_package.py · 详细文档
借鉴 vidpipe / OpenShorts / youtube-shorts-pipeline 这类项目的发布队列和多平台分发思路,但保持本项目本地优先:不登录平台、不调用上传 API,只把发布必需物料和 gate 状态整理成可审计的 JSON + Markdown。
常用:
python3 scripts/publish_package.py \
--project-dir work/day58 \
--platforms xhs douyin wxch \
--output work/day58/publish_package.json \
--markdown work/day58/publish_package.md \
--strict输出 publish_package.v1,包含每个平台的 MP4、封面图、SRT/VTT、标题、正文、tags、发布时间建议、上传 checklist、章节文本和 pipeline_manifest 阻塞状态。--strict 会在缺少平台视频、caption 不完整、或已有 gate blocked 时返回 2;pipeline_manifest.py 也会识别 publish_package.json 并把 summary.blocking > 0 列为 blocking gate。
scripts/project_resume.py · 详细文档
借鉴 agent-native 视频工具的 project state / resume note 思路,但保持本项目本地 artifact-first:复用 pipeline_manifest.py 的 gate 判断,把状态、阶段、缺件、最近 artifacts 和下一步动作整理成可交给下一位 agent 的 JSON + Markdown。
常用:
python3 scripts/project_resume.py \
--project-dir work/day58 \
--target-stage publish_ready \
--output work/day58/project_resume.json \
--markdown work/day58/project_resume.md \
--agent-note work/day58/CLAUDE.md \
--strict输出 project_resume.v1,包含 phase、recommended_first_action、next_actions[]、latest_artifacts[]、关键 gate snapshot 和一句 suggested_prompt。--agent-note 可写出项目级 CLAUDE.md;不传路径时默认写到 --project-dir/CLAUDE.md。脚本不渲染、不上传、不提交任何生成任务,适合自动化收尾、上下文压缩后续跑和跨 agent 交接。
预设镜头节奏、字幕密度、BGM 增益、目标比例:
tech_pro— AI/创业/效率向(90s 默认,每 2.5s 切镜,BGM -16dB,3:4 小红书首选)lifestyle— vlog/穿搭/家居向(60s 默认,每 2.0s 切镜,BGM -10dB)
字体预设(5 套)在 profiles/_fonts.yaml:得意黑 / 阿里妈妈数黑体 / 阿里妈妈方圆体 / 思源黑体 Heavy / 奶酪体。
完整命令链见 docs/prompts/15-xhs-daily-tech-video.md。
简化版(每天替换 <NN> 和 <主题>):
DAY=NN
WORK=~/Movies/xiaohongshu/day$DAY
SKILL=~/projects/video-editing-skill
# 1. 转写
python3 $SKILL/scripts/transcribe.py $WORK/origin/voice.mp3 \
--word-timestamps --detect-fillers
# 1b. 可选:按 ASR 去纯口头禅/重复句,先审查 cut list 再渲染
python3 $SKILL/scripts/rough_cut.py \
--transcript $WORK/work/transcript.json \
--cut-list $WORK/work/rough_cut.json
# 2. 重组(手动喂 prompt 给 LLM,落地 JSON 后回放)
python3 $SKILL/scripts/rewrite_script.py \
--transcript $WORK/work/transcript.json --emit-prompt > $WORK/work/prompt.md
# ...LLM 输出 work/llm.json 后...
python3 $SKILL/scripts/rewrite_script.py \
--transcript $WORK/work/transcript.json \
--llm-output $WORK/work/llm.json \
--output $WORK/work/clean_script.md
# 3. 自动丰富(plan 里会有 broll / stickers / chapter_cards / imagegen 四列)
python3 $SKILL/scripts/auto_enrich.py \
--transcript $WORK/work/transcript.json \
--clean-script $WORK/work/clean_script.md \
--bgm $WORK/origin/bgm.mp3 \
--output $WORK/work/enrich_plan.json
# 3b. 先生成分镜 shot cards,审查 B-roll / 生图 / 生成视频 / 动效路由
python3 $SKILL/scripts/storyboard_plan.py \
--transcript $WORK/work/transcript.json \
--clean-script $WORK/work/clean_script.md \
--output $WORK/work/storyboard_plan.json \
--markdown $WORK/work/storyboard_plan.md \
--max-shots 8 \
--target-aspect 9:16
# 3c. 可选:把分镜转成 Dreamina/Veo/LTX/Wan/Sora 视频生成提示词包
python3 $SKILL/scripts/video_prompt_pack.py \
--storyboard-plan $WORK/work/storyboard_plan.json \
--asset-root $WORK/work \
--output $WORK/work/video_prompt_pack.json \
--markdown $WORK/work/video_prompt_pack.md \
--strict
# 3d. 素材任务清单与预检:哪些已 ready,哪些要生图/审批/渲染/搜索
python3 $SKILL/scripts/storyboard_assets.py \
--storyboard-plan $WORK/work/storyboard_plan.json \
--asset-root $WORK/work \
--output $WORK/work/storyboard_assets.json \
--markdown $WORK/work/storyboard_assets.md
# 3e. 如果 imagegen[] 或 storyboard_assets 里的 needs_generation 非空,在 Codex 里直接调内置 imagegen 工具
# 生图优先使用 Codex 内置 `image_gen` 工具,即 OpenAI GPT Image 2(`gpt-image-2`)。
# 把每条 prompt_en 用 imagegen 生成 1024x1536,存到 $WORK/work/imagegen/
# 不需要 OPENAI_API_KEY;详见 docs/prompts/19-imagegen.md
# 如果 storyboard_assets 里有 needs_approval,提交 Dreamina/即梦前先确认,因为可能消耗 credits。
# 3f. 可选:软件教程/产品演示录屏,导入点击热点并生成自动聚焦计划
python3 $SKILL/scripts/screen_focus.py \
--events $WORK/work/clicks.json \
--screen-width 1920 \
--screen-height 1080 \
--output $WORK/work/screen_focus_plan.json \
--markdown $WORK/work/screen_focus_plan.md
# 3g. 可选:录屏另有 facecam/camera,生成 PIP 小窗计划
python3 $SKILL/scripts/pip_overlay.py \
--camera $WORK/origin/facecam.mp4 \
--segment "0,42,bottom_right" \
--sync-offset 0.18 \
--output $WORK/work/pip_overlay_plan.json \
--markdown $WORK/work/pip_overlay_plan.md
# 3h. 可选:生成调色计划,最终渲染时用 --color-grade 接入单次编码
python3 $SKILL/scripts/color_grade.py \
--preset screen \
--output $WORK/work/color_grade.json \
--markdown $WORK/work/color_grade.md
# 4. 渲染前预检:先挡住缺文件、空剪辑、坏时间段和危险 overlay 参数
python3 $SKILL/scripts/edit_preflight.py \
--config $WORK/work/render_config.json \
--enrich-plan $WORK/work/enrich_plan.json \
--output $WORK/work/edit_preflight.json \
--markdown $WORK/work/edit_preflight.md \
--strict
# 5. 渲染
# 如果生成了 screen_focus_plan.json,可额外追加:
# --enrich-plan $WORK/work/screen_focus_plan.json
# 如果生成了 pip_overlay_plan.json,可额外追加:
# --enrich-plan $WORK/work/pip_overlay_plan.json
# 如果生成了 color_grade.json,可额外追加:
# --color-grade $WORK/work/color_grade.json
python3 $SKILL/scripts/render_final.py \
--config $WORK/work/render_config.json \
--enrich-plan $WORK/work/enrich_plan.json \
--profile tech_pro \
--primary-speed 1.25 \
--subtitle-style karaoke \
--output $WORK/output/day${DAY}_master.mp4
# 6. 主片质检
python3 $SKILL/scripts/render_qa.py \
$WORK/output/day${DAY}_master.mp4 --platform douyin \
--json $WORK/output/day${DAY}_master_qa.json \
--review-dir $WORK/output/verify/day${DAY}_qa \
--review-clips
# 6b. 如果 QA 有 WARN/FAIL,先看 review packet;想抽查关键切点再生成可视化复盘图
python3 $SKILL/scripts/timeline_view.py \
$WORK/output/day${DAY}_master.mp4 --at 42.5 --radius 1.5 \
--output $WORK/output/verify/day${DAY}_42_5s.png
# 6c. 可选:导出平台可上传字幕 sidecar
python3 $SKILL/scripts/subtitle_pack.py \
--config $WORK/work/render_config.json \
--output-dir $WORK/output/subtitles \
--basename day${DAY}_master \
--speed 1.25 \
--offset 2.0
# 7. 多平台
python3 $SKILL/scripts/multi_export.py \
$WORK/output/day${DAY}_master.mp4 --output-dir $WORK/output/
# 7b. 可选:交给专业剪辑软件继续精修/调色/混音
python3 $SKILL/scripts/export_edl.py \
--config $WORK/work/render_config.json \
--output $WORK/work/day${DAY}_edit.edl \
--fps 30
python3 $SKILL/scripts/export_fcpxml.py \
--config $WORK/work/render_config.json \
--output $WORK/work/day${DAY}_edit.fcpxml \
--fps 30 \
--width 1080 \
--height 1920
# 8. 平台导出质检
python3 $SKILL/scripts/render_qa.py \
$WORK/output/day${DAY}_xhs.mp4 --platform xhs
python3 $SKILL/scripts/render_qa.py \
$WORK/output/day${DAY}_douyin.mp4 --platform douyin
python3 $SKILL/scripts/render_qa.py \
$WORK/output/day${DAY}_wxch.mp4 --platform wxch
# 9. 文案
python3 $SKILL/scripts/generate_caption.py \
--script $WORK/work/clean_script.md --profile tech_pro \
--output $WORK/output/day${DAY}_caption.json
# 10. 发布前 gate 汇总 + 最终上传包
python3 $SKILL/scripts/pipeline_manifest.py \
--project-dir $WORK \
--target-stage publish_ready \
--output $WORK/work/pipeline_manifest.json \
--markdown $WORK/work/pipeline_manifest.md \
--strict
python3 $SKILL/scripts/publish_package.py \
--project-dir $WORK \
--platforms xhs douyin wxch \
--output $WORK/work/publish_package.json \
--markdown $WORK/work/publish_package.md \
--strict
# 10b. 可选:自动化收尾或跨会话接手前生成续跑上下文包
python3 $SKILL/scripts/project_resume.py \
--project-dir $WORK \
--target-stage publish_ready \
--output $WORK/work/project_resume.json \
--markdown $WORK/work/project_resume.md \
--agent-note $WORK/CLAUDE.md \
--strictpytest tests/ # 394 测试,约 5 秒按模块跑:
pytest tests/test_content_guard.py -v # 80+ 规则的 38 个测试
pytest tests/test_rewrite_script.py -v # Story Engine
pytest tests/test_auto_broll.py -v # B-roll 调度
pytest tests/test_multi_export.py -v # 多平台比例转换
pytest tests/test_render_qa.py -v # 渲染后质检
pytest tests/test_render_enrich_plan.py -v # enrich_plan 自动接入渲染
pytest tests/test_rough_cut.py -v # ASR 粗剪:口头禅/重复句 cut list
pytest tests/test_timeline_view.py -v # 切点/QA 可视化复盘图
pytest tests/test_generate_caption.py -v # 文案合成
pytest tests/test_imagegen_hint.py -v # gpt-image-2 提示词检测
pytest tests/test_storyboard_plan.py -v # 分镜 shot cards + 生成路由
pytest tests/test_video_prompt_pack.py -v # 视频生成提示词包 + 审批 gate
pytest tests/test_generation_task_log.py -v # 异步生成任务台账 + 下载 gate
pytest tests/test_video_understanding.py -v # 抽样帧 + 可选 YOLO 检测 artifact
pytest tests/test_storyboard_assets.py -v # 分镜素材 readiness manifest
pytest tests/test_export_edl.py -v # NLE handoff EDL + manifest
pytest tests/test_export_fcpxml.py -v # NLE handoff FCPXML + manifest
pytest tests/test_screen_focus.py -v # 录屏点击聚焦计划 + render 接入
pytest tests/test_subtitle_pack.py -v # SRT/VTT/ASS/JSON 字幕交付包
pytest tests/test_audio_cue_sheet.py -v # BGM/SFX 音频设计清单
pytest tests/test_color_grade.py -v # 调色计划 + render_final 接入
pytest tests/test_edit_preflight.py -v # 渲染前结构/路径/参数预检 gate
pytest tests/test_publish_package.py -v # 最终上传包 + gate 状态汇总
pytest tests/test_project_resume.py -v # 续跑上下文包 + agent handoff本次联网研究的 GitHub 参考:
| 来源 | 看到的优点 | 本项目吸收方式 |
|---|---|---|
browser-use/video-use |
输出固定落在项目 edit/ 目录,渲染前后有自评和持久化上下文 |
本项目保持 artifact-first,把发布前物料汇总为 publish_package.v1,不依赖聊天上下文 |
htekdev/vidpipe |
idea / platform / publish-by / output structure 进入内容生产管理 | publish_package.py 输出平台级 checklist、caption copy 和发布时间提示 |
mutonby/openshorts |
YouTube Studio、title/description/chapter、社交自动发布和排期是一等能力 | 本项目先做本地发布包,不引入账号 token 或第三方上传 API |
rushindrasinha/youtube-shorts-pipeline |
research → script → visuals → voice → captions → assemble → upload 的完整链路 | 在 multi_export / caption / subtitle_pack / pipeline_manifest 之后新增最终上传 handoff |
Bomx/super-video-maker-skill |
paid-call、source deck、timestamp、layout、technical QC 都作为质量 gate | publish_package.py 读取或构建 pipeline gate,把 blocked 状态带到上传包 |
新增/调整能力:新增 scripts/publish_package.py,支持 xhs、douyin、wxch、youtube_shorts、tiktok、instagram_reels;自动发现平台 MP4、封面、SRT/VTT、caption JSON、章节文本和 pipeline manifest,输出 publish_package.json 与 Markdown checklist。pipeline_manifest.py 新增 publish_package artifact 类别;如果发布包 summary.blocking > 0,会作为 blocking gate。README、SKILL、docs/prompts/49-publish-package.md、提示词目录和 daily workflow 已更新。
使用方式:常规发布前跑 python3 scripts/publish_package.py --project-dir work/day58 --platforms xhs douyin wxch --output work/day58/publish_package.json --markdown work/day58/publish_package.md --strict;如果平台文件不在默认位置,用 --video xhs=/path/to/xhs.mp4 --video youtube_shorts=/path/to/shorts.mp4 覆盖。脚本不上传、不登录平台、不调用外部 API,适合手工上传或把 JSON 交给发布 connector。
验证结果:新增 tests/test_publish_package.py 7 项,更新 tests/test_pipeline_manifest.py;.venv/bin/python -m pytest tests/test_publish_package.py tests/test_pipeline_manifest.py -q 通过 24 passed in 0.36s;.venv/bin/python -m compileall scripts tests 通过;.venv/bin/python scripts/publish_package.py --help、.venv/bin/python scripts/pipeline_manifest.py --list-categories | rg publish_package smoke 通过;git diff --check 通过;最终全量 .venv/bin/python -m pytest tests -q 通过 360 passed in 5.76s。
本次联网研究的 GitHub 参考:
| 来源 | 看到的优点 | 本项目吸收方式 |
|---|---|---|
KyaniteLabs/mcp-video |
把 color grading、effects、preflight guardrails、repurposing manifest 放进 agent tool surface | 新增 bounded color_grade.py,不让 agent 手写不受控 FFmpeg filter |
browser-use/video-use |
把 color grade 与 transcript/cut/subtitles 并列为 conversational video editing 能力 | 在本 skill 的实际渲染链中加入 --color-grade,而不是只写成提示词建议 |
wizenheimer/vibestudio |
视频 filters / color correction 作为本地、可追踪命令能力 | 输出 JSON + Markdown + FFmpeg filter,保持可审计和本地优先 |
aicw-io/aicw-video |
先预览/确认 range、caption、privacy、format,再渲染 | 调色先产 color_grade.v1 review artifact,再由 render_final.py 接入 |
新增/调整能力:新增 scripts/color_grade.py,支持 natural、warm、cool、punchy、soft、cinematic、screen 七个 preset;自定义 brightness、contrast、saturation、gamma、temperature、tint、sharpness 会被 clamp 到保守范围,--strict 在 clamp 时返回 2。render_final.py 新增 --color-grade,可读取 preset、FFmpeg 单链 filter 或 color_grade.v1 JSON,并在 B-roll/image/focus 之后、字幕/HUD 前应用,避免二次压缩改变字幕颜色。pipeline_manifest.py 新增 color_grade artifact 类别;README、SKILL、docs/prompts/48-color-grade.md 和提示词目录已更新。
使用方式:先跑 python3 scripts/color_grade.py --preset screen --output work/color_grade.json --markdown work/color_grade.md;最终渲染加 python3 scripts/render_final.py --config work/render_config.json --color-grade work/color_grade.json --output output/tutorial_master.mp4。如果只是给已完成 master 做复版,可用 python3 scripts/color_grade.py --preset cinematic --input output/master.mp4 --render-output output/master_grade.mp4 --output work/color_grade.json --markdown work/color_grade.md。
验证结果:新增 tests/test_color_grade.py 7 项,更新 tests/test_pipeline_manifest.py;.venv/bin/python -m pytest tests/test_color_grade.py tests/test_pipeline_manifest.py -q 通过 22 passed in 0.31s;.venv/bin/python -m compileall scripts tests 通过;.venv/bin/python scripts/color_grade.py --help、.venv/bin/python scripts/render_final.py --help、.venv/bin/python scripts/pipeline_manifest.py --list-categories | rg color_grade smoke 通过;git diff --check 通过;最终全量 .venv/bin/python -m pytest tests -q 通过 351 passed in 3.88s。
本次联网 research 参考:
| 来源 | 看到的要点 | 本项目吸收方式 |
|---|---|---|
| Ultralytics YOLO Predict 文档 | Results.boxes 提供 xyxy、conf、cls、可选 id 等字段 |
video_understanding.py --detector yolo 直接解析这些字段,输出统一 detections[] |
| Ultralytics YOLO Track 文档 | Ultralytics 支持 BoT-SORT / ByteTrack 等 tracker,可用 tracker YAML 配置 | README 说明高动态素材可用 model.track(..., tracker="bytetrack.yaml") 作为同一 JSON 的更密集上游 |
| Norfair 文档 | Norfair 可以给任意 detector 增加轻量多目标跟踪 | 本项目内置先做抽样帧 bbox 轻量关联;需要严格 MOT 时可用 Norfair 输出外部 tracks |
新增/调整能力:新增 scripts/video_understanding.py,支持默认无 detector 抽样帧、--detector yolo 可选 Ultralytics YOLO 检测、--external-detections 合并已有检测 JSON、按场景边界和固定间隔抽帧、生成轻量 tracks[]、scene_tags[]、warnings[] 和 Markdown review。pipeline_manifest.py 新增 video_understanding artifact 类别,可作为可选或显式 required gate 被发现。README、SKILL、docs/prompts/47-video-understanding.md、smart reframe 和 privacy redaction 文档都已更新为同一条视觉理解路径。
使用方式:无 detector 时用 python3 scripts/video_understanding.py origin/talk.mp4 --output work/video_understanding.json --markdown work/video_understanding.md;启用 YOLO 时先 pip install ultralytics,再加 --detector yolo --model yolo11n.pt --scene-boundaries work/scene_boundaries.json --strict;下游用 smart_reframe.py --detections work/video_understanding.json 做主体感知裁切,或用 privacy_redact.py --detections work/video_understanding.json 生成隐私遮挡计划。
验证结果:新增 tests/test_video_understanding.py 8 项,更新 tests/test_pipeline_manifest.py;.venv/bin/python -m pytest tests/test_video_understanding.py tests/test_smart_reframe.py tests/test_privacy_redact.py tests/test_pipeline_manifest.py -q 通过 36 passed in 1.12s;.venv/bin/python scripts/video_understanding.py --help、.venv/bin/python scripts/pipeline_manifest.py --list-categories | rg video_understanding smoke 通过;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过;最终全量 .venv/bin/python -m pytest tests -q 通过 343 passed in 3.63s。
本次联网研究的 GitHub 参考:
| 项目 | 看到的优点 | 本项目吸收方式 |
|---|---|---|
PixVerseAI/skills |
把 task status / wait 和 asset download 拆成独立 capability,适合异步生成和批量任务 | 新增本地 generation_task_log.py,保存 task id、轮询命令、下载命令和 blocking 状态 |
digitalsamba/claude-code-video-toolkit |
用项目状态跟踪 scenes、asset status、phase,方便跨会话续作 | generation_tasks.json 成为可恢复 artifact,并由 pipeline_manifest.py 汇总发布前状态 |
znyupup/ai-video-editing-skill |
自动剪辑 workflow 强调素材理解、预览确认、再渲染 | 本次先补生成素材的 review/落盘闭环;交互式 dashboard 暂不引入 |
GoogleCloudPlatform/vertex-ai-creative-studio |
视频生成和 FFmpeg 合成工具链分工明确 | 本项目继续保持 provider 生成与本地渲染分离,只记录生成任务,不提交 provider job |
新增/调整能力:新增 scripts/generation_task_log.py,支持 add、update、import-provider-decision、report 四个子命令;可记录 Dreamina/即梦 submit_id、PixVerse task id 或其他 provider id,自动生成 Dreamina query_result 轮询/下载命令,导入 provider JSON 状态,并计算 readiness 与 summary.blocking。pipeline_manifest.py 新增 generation_task_log 可选 gate,发现 generation_tasks.json 中存在未审批、未完成、未下载、失败或本地文件丢失的任务时会阻塞发布清单。新增 docs/prompts/46-generation-task-log.md,并更新 daily workflow、SKILL、提示词目录和 README 能力说明。
使用方式:从 provider 决策初始化台账用 python3 scripts/generation_task_log.py import-provider-decision --provider-decision work/provider_decision.json --log work/generation_tasks.json --markdown work/generation_tasks.md --strict;提交 Dreamina/即梦后保存任务用 python3 scripts/generation_task_log.py add --log work/generation_tasks.json --provider dreamina --task-id "<submit_id>" --shot-id shot_002 --expected-path work/generated_video/shot_002.mp4 --status submitted --markdown work/generation_tasks.md --strict;下载完成后用 python3 scripts/generation_task_log.py update --log work/generation_tasks.json --provider dreamina --task-id "<submit_id>" --status downloaded --asset-path work/generated_video/shot_002.mp4 --markdown work/generation_tasks.md。
验证结果:新增 tests/test_generation_task_log.py 7 项,更新 tests/test_pipeline_manifest.py;.venv/bin/python -m pytest tests/test_generation_task_log.py tests/test_pipeline_manifest.py -q 通过 20 passed in 0.21s;.venv/bin/python -m compileall scripts tests 通过;.venv/bin/python scripts/generation_task_log.py --help、.venv/bin/python scripts/generation_task_log.py add --help、.venv/bin/python scripts/pipeline_manifest.py --list-categories | rg generation_task_log smoke 通过;git diff --check 通过;第一次全量测试因 macOS subprocess.Popen 临时返回 BlockingIOError: Resource temporarily unavailable 导致 5 个旧 CLI smoke 失败,单独重跑这 5 项通过 5 passed in 0.28s,随后最终全量 .venv/bin/python -m pytest tests -q 通过 334 passed in 3.30s。
本次联网研究的 GitHub 参考:
| 项目 | 看到的优点 | 本项目吸收方式 |
|---|---|---|
Square-Zero-Labs/video-prompting-skill |
支持 Seedance、LTX、Sora、Veo、Wan 等模型指南,并把 character sheet 作为 image-to-video 前置工作流 | 新增 provider-specific prompt pack,包含角色/风格 reference sheet、参考图路径和模型化 prompt |
browser-use/video-use |
强调确认策略、执行、迭代、持久化,以及字幕/剪辑等 production-correctness hard rules | video_prompt_pack.py --strict 在 paid video generation 未审批时返回 2,生成前先持久化 review artifact |
digitalsamba/claude-code-video-toolkit |
用项目状态跟踪 scenes、audio、phase、asset status,适合跨会话续作 | 新增 video_prompt_pack.json/.md 作为可恢复 artifact,并接入 pipeline_manifest.py gate |
calesthio/OpenMontage |
provider 选择、创意审批、自检和成本意识都进入生产流程 | prompt pack 记录 approval_status、negative prompt、review checks 和 summary.blocking |
SamurAIGPT/AI-Youtube-Shorts-Generator |
长视频转短视频时输出 JSON,保留分数、hook、reason 等下游可自动化字段 | 本项目继续保持 JSON + Markdown 双输出,方便 agent 和人工同时复核 |
新增/调整能力:新增 scripts/video_prompt_pack.py,可从 storyboard_plan.json 生成 video_prompt_pack.v1,自动/指定输出 Dreamina/即梦 Seedance、Veo、LTX、Wan、Sora、Codex imagegen、Remotion 或本地 B-roll 的提示词;支持 --character、--brand-anchor、--animate-stills、--approved、--strict;新增 docs/prompts/45-video-prompt-pack.md,更新 daily workflow、SKILL、提示词目录;pipeline_manifest.py 新增 video_prompt_pack 可选 gate,发现 summary.blocking > 0 会阻塞发布清单。
使用方式:普通 review 用 python3 scripts/video_prompt_pack.py --storyboard-plan work/storyboard_plan.json --asset-root work --output work/video_prompt_pack.json --markdown work/video_prompt_pack.md --strict;要把 Codex imagegen still route 转成 image-to-video 提示词,加 --animate-stills;确认 Dreamina/即梦或其他 provider credits 后加 --approved 再进入提交/下载流程。
验证结果:新增 tests/test_video_prompt_pack.py 5 项,更新 tests/test_pipeline_manifest.py;.venv/bin/python -m pytest tests/test_video_prompt_pack.py tests/test_pipeline_manifest.py -q 通过 17 passed in 0.23s;完整 .venv/bin/python -m pytest tests -q 通过 326 passed in 3.78s;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过;.venv/bin/python scripts/video_prompt_pack.py --help 和 .venv/bin/python scripts/pipeline_manifest.py --list-categories smoke 验证正常。
本次联网研究的 GitHub 参考:
| 项目 | 看到的优点 | 本项目吸收方式 |
|---|---|---|
calesthio/OpenMontage |
把 music、audio mixer、sound-design、预算和 stage gate 明确写进生产流程 | 新增本地 audio_cue_sheet.py,把 BGM/SFX 缺口变成 review artifact |
vericontext/vibeframe |
storyboard cue、music/SFX/narration 生成和 build/review report 统一走 JSON | 输出 audio_cue_sheet.v1,保留 cue 来源、状态、route、approval note 和 next actions |
digitalsamba/claude-code-video-toolkit |
把 voiceover、music、SFX、timing sync 作为项目阶段管理 | 先规划音频,再让 pipeline_manifest.py 拦截未解决音频任务 |
AIDC-AI/Pixelle-Video |
自动短视频流程显式处理 narration、BGM 和音频/视频时长匹配 | voice_track 记录口播主轨时长和响度目标,BGM/SFX 作为次级音频层审查 |
新增/调整能力:新增 scripts/audio_cue_sheet.py,可从 transcript.json 生成 BGM mood、BPM 范围、music prompt、SFX cue、生成审批和本地素材缺口;扫描 --asset-root 下的 .mp3/.wav/.m4a/.flac/.ogg 等音频,优先匹配本地 BGM/SFX;新增 docs/prompts/43-audio-cue-sheet.md;pipeline_manifest.py 新增 audio_cue_sheet 可选 gate,发现 summary.blocking > 0 会阻塞发布清单。
使用方式:普通 review 用 python3 scripts/audio_cue_sheet.py --transcript work/transcript.json --asset-root media/bgm --asset-root media/sfx --output work/audio_cue_sheet.json --markdown work/audio_cue_sheet.md;发布前严格门禁加 --require-local-music --require-local-sfx --strict。如果需要生成音乐或音效,先确认 provider credits 和素材授权,再提交生成任务。
验证结果:新增 tests/test_audio_cue_sheet.py 7 项,更新 tests/test_pipeline_manifest.py;.venv/bin/python -m pytest tests/test_audio_cue_sheet.py tests/test_pipeline_manifest.py -q 通过 18 passed in 0.22s;完整 .venv/bin/python -m pytest tests -q 通过 312 passed in 3.65s;.venv/bin/python -m compileall scripts tests 通过;git diff --check 通过;.venv/bin/python scripts/audio_cue_sheet.py --help smoke 验证 CLI 参数正常。
- 调研来源:GitHub 搜索并对比
znyupup/ai-video-editing-skill的edit_plan.json + Dashboard、FireRedTeam/FireRed-OpenStoryline的节点化 workflow schema、taylorzhou16/video-gen的 storyboard JSON / 一致性 review,以及6missedcalls/video-editing-skill的轻量 ffmpeg 编排。 - 新增能力:
render_final.py新增--enrich-plan,可直接读取auto_enrich.py输出,把 B-roll cue 转成定时视频 overlay,把章节卡/贴纸转成 ASS badge,把带实际文件路径的 imagegen cue 转成定时图片 overlay;同时修复text_badges已检查但未写入字幕 ASS 的问题,普通字幕和 karaoke 字幕都支持 badge。 - 使用方式:
python3 scripts/render_final.py --config work/render_config.json --enrich-plan work/enrich_plan.json --output output/master.mp4。broll[].suggested_asset、chapter_cards[].png、imagegen[].image_path/generated_path支持相对enrich_plan.json的路径;没有生成文件的 imagegen cue 只提示,不阻塞。 - 验证结果:新增
tests/test_render_enrich_plan.py5 项通过;相关回归tests/test_auto_enrich.py tests/test_render_guard_integration.py tests/test_render_content_guard_integration.py tests/test_audio_chain.py tests/test_primary_speed.py共 15 项通过;全量.venv/bin/python -m pytest tests通过176 passed in 1.94s;python3 -m compileall scripts tests通过;合成 4 秒视频实测--enrich-plan成功应用 1 个 B-roll、1 个章节卡图片 overlay、1 个 badge 并输出有效 MP4。
- 新增能力:参考 GitHub 上
browser-use/video-use的timeline_view复盘工作台、remotion-dev/skills的单帧/预览验证习惯,以及Agents365-ai/video-podcast-maker的 Remotion Studio 预览迭代思路,新增scripts/timeline_view.py。 - 使用方式:单点复盘用
python3 scripts/timeline_view.py output/master.mp4 --at 42.5 --radius 1.5 --output output/verify/42_5s.png;跳切批量复盘用--cut-list work/jumpcut.json --output-dir output/verify/cuts。 - 验证结果:
pytest tests/test_timeline_view.py -v通过 7 项;python3 -m compileall scripts tests通过;合成 4 秒视频实测--at输出 1600×1120 PNG,--cut-list批量输出 2 张 PNG;全量.venv/bin/python -m pytest tests通过171 passed in 1.65s。
| # | 主题 | 何时用 |
|---|---|---|
| 01 | 口播素材处理 | 第一次入门,完整 V2 流程 |
| 06 | 多平台导出(V2 版) | 简易多比例(V3 推荐看 17) |
| 14 | 导出剪映/CapCut | 想在剪映里继续手工调 |
| 15 | V3 完整流水线 | 每天做一条小红书视频 — 推荐入口 |
| 16 | Content Guard | 担心标题/正文限流 |
| 17 | 三平台导出 | 一次发小红书/抖音/视频号 |
| 18 | Auto-Enrich | 想让视频更"有质感" |
| 19 | AI 生图(gpt-image-2 / Codex imagegen) | 抽象概念自动配图 |
| 20 | Render QA | 渲染后机器质检 |
| 21 | Jump Cut | 自动去停顿 |
| 22 | Timeline View | 切点/可疑区间人工复盘图 |
| 23 | Versioned Output | 避免覆盖旧成片 |
| 24 | Storyboard Plan | 分镜 shot cards + 生成路由 |
| 25 | Storyboard Assets | 分镜素材任务清单 + ready 预检 |
| 26 | ASR Rough Cut | 去口头禅/重复句粗剪 |
| 27 | NLE Handoff | 导出 EDL / FCPXML 给 Premiere/FCP/Resolve |
| 28 | Screen Focus | 录屏点击/热点自动聚焦 |
| 29 | Subtitle Pack | 导出 SRT/VTT/ASS/JSON 字幕包 |
| 43 | Audio Cue Sheet | 规划 BGM/SFX 和生成审批 |
| 45 | Video Prompt Pack | 视频生成提示词包 + paid approval gate |
| 46 | Generation Task Log | 跟踪 submit_id、轮询、下载和本地落盘 |
| 49 | Publish Package | 汇总平台视频、文案、字幕和发布 gate |
| 50 | CapCut Subtitle Import | 剪映/CapCut 自动字幕反向导入 |
| 52 | Project Resume | 生成跨会话续跑上下文包 |
完整列表见 docs/prompts/README.md。
| 平台 | Whisper | 编码器 | 备注 |
|---|---|---|---|
| macOS Apple Silicon | mlx-whisper (Metal) | VideoToolbox | 主开发平台。large-v3-turbo 推荐 |
| macOS Intel | faster-whisper (CPU) | VideoToolbox | medium 模型推荐 |
| Linux + NVIDIA | faster-whisper (CUDA) | NVENC | RTX 40 系直通;50 系需 float16 |
| Linux + Intel Arc | faster-whisper (CPU) | QSV | iGPU/Arc 都走 QSV |
| WSL | faster-whisper | NVENC(如有) | Windows 字体自动从 /mnt/c |
| Windows | faster-whisper | QSV/AMF | 推荐 WSL2 |
中国用户:自动检测中国 locale,pip 走清华镜像、HuggingFace 走 hf-mirror.com,也可 --mirror 强制启用。
每个脚本一个明确职责。没有"god script"。
scripts/
├── utils.py 平台/字体/编码器自检
├── _internal_text_guard.py 内部 token 拦截器
├── transcribe.py Whisper 转写
├── video_understanding.py 抽样帧 + 可选 YOLO 检测 artifact [V3]
├── highlight_picker.py 长视频精华候选 / brief 定向找片段 [V3]
├── rough_cut.py transcript 粗剪:去口头禅/重复句 [V3]
├── extract_audio.py 音频提取
├── split_video.py 按句切片(V2 兼容)
├── media_library.py 素材库索引(CLIP-ready)
├── merge_clips.py 合并片段(V2 兼容)
├── content_guard.py 平台雷区 lint [V3]
├── rewrite_script.py Story Engine [V3]
├── auto_broll.py B-roll 调度 [V3]
├── auto_chapter_cards.py 章节卡渲染 [V3]
├── beat_sync.py BGM 卡点 [V3]
├── audio_cue_sheet.py BGM/SFX 音频设计清单 [V3]
├── auto_stickers.py 情绪→贴纸 [V3]
├── imagegen_hint.py 抽象概念→gpt-image-2 提示词 [V3]
├── auto_enrich.py 丰富度编排 [V3]
├── storyboard_plan.py 分镜 shot cards + 生成路由 [V3]
├── video_prompt_pack.py 多模型视频生成提示词包 + 审批 gate [V3]
├── generation_task_log.py 异步生成任务台账 + 下载 gate [V3]
├── storyboard_assets.py 分镜素材任务清单 + ready 预检 [V3]
├── stock_material_plan.py 远程 stock 搜索规划 [V3]
├── screen_focus.py 录屏点击/热点聚焦计划 [V3]
├── color_grade.py bounded 调色计划 + FFmpeg filter [V3]
├── edit_preflight.py 渲染前结构/路径/参数预检 gate [V3]
├── render_final.py 单次编码渲染 + enrich_plan 接入(V3 强化)
├── render_qa.py 渲染后黑屏/静帧/静音/尺寸质检 [V3]
├── timeline_view.py filmstrip+waveform 可视化复盘图 [V3]
├── subtitle_pack.py SRT/VTT/ASS/JSON 字幕交付包 [V3]
├── import_capcut_subtitles.py 剪映/CapCut 字幕反向导入 + gap cut [V3]
├── project_resume.py 续跑上下文包 + agent handoff [V3]
├── burn_subtitles.py 字幕 ASS 生成
├── generate_cover.py 封面生成
├── generate_cover_image.py Chrome-rendered 封面
├── add_chapter_bar.py 章节进度条
├── export_capcut.py 剪映工程导出
├── export_edl.py NLE handoff EDL + manifest [V3]
├── export_fcpxml.py NLE handoff FCPXML + manifest [V3]
├── generate_standup_timeline.py Remotion timeline
├── multi_export.py 三平台导出 [V3]
├── generate_caption.py 标题/正文/标签 [V3]
├── publish_package.py 最终上传包 + gate 状态汇总 [V3]
├── prompts/
│ ├── hook_templates.yaml 8 钩子模板 [V3]
│ ├── cta_templates.yaml 5 CTA 模板 [V3]
│ └── imagegen_templates.yaml gpt-image-2 提示词模板 + 7 sample [V3]
└── profiles/
├── __init__.py 加载器 [V3]
├── tech_pro.yaml AI/创业 profile [V3]
├── lifestyle.yaml vlog profile [V3]
└── _fonts.yaml 5 套字体预设 [V3]
实施记录:docs/plans/2026-05-17-v3-xhs-improvements.md
开箱即用,CUDA 12.4+ + 驱动 535+:
sudo apt install nvidia-driver-535 nvidia-cuda-toolkit
pip install faster-whisper
nvidia-smi # 验证需要最新 CUDA + 强制 float16 防止 INT8 cuBLAS 报错。scripts/utils.py 自动检测 50 系列并使用 float16 精度。
走 QSV 编码:
pip install faster-whisper # CPU 模式跑 Whisper
ffmpeg -hwaccels # 应该列出 qsv详细分卡指南:python3 scripts/utils.py 会按你的硬件给具体提示。
V3.2+ 路线图后续可能加:
- spaCy 中文 NER → 更精准的 B-roll 实体匹配(升级当前的关键词列表)
- CLIP embedding 跨段比对 → 自动匹配最贴合段落内容的素材
- librosa real beat detection 作为默认(当前回落到 120 bpm 固定网格)
- zxing-cpp QR 码扫描 + 外站 logo OCR → 画面级 Content Guard
- gpt-image-2 character anchor 一致性(多张图同一人物形象保持一致)
V3 已完成:Phase 1-5 + imagegen 集成(#9 #11 #12 #13 #14 #15 #16)。
PR 欢迎。新功能必须带测试,每个新脚本至少 5 个测试,全套应保持在轻量本地运行范围内。
MIT.
BestAI Labs · 2026