mcpField
R
review-video

review-video

github.com/dojocodinglabs创意与媒体16662 次安装2 周前更新
代码仓库

关于 review-video

用于 Remotion 视频的审片技能,先检查渲染帧,再借助 TwelveLabs 分析完整视频,并据此迭代修复。适合需要结构化视频反馈的制作流程。

主要功能

  1. 01抽样渲染并检查画面
  2. 02上传视频至 TwelveLabs
  3. 03按评分标准分析视频
  4. 04将时间戳转换为帧与场景
  5. 05根据反馈迭代修复

适用场景

  1. 01检查字幕溢出和画面缺失
  2. 02评估节奏、配音与音效
  3. 03定位片头钩子和结尾 CTA

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dojocodinglabs/remotion-superpowers --skill review-video

安装后在 Claude Code 中输入/review-video确认已加载。

详细介绍

审查视频 — AI 驱动的视频反馈循环

你正在审查一段 Remotion 视频并提供专业反馈:先查看几帧渲染画面,再让 TwelveLabs“观看”完整渲染视频。由此形成完整的制作闭环——预览、审查、改进、重复。

加载 remotion-production 技能以使用 video-analysis 规则。渲染遵循官方 remotion-render 技能。

**此处允许渲染。**调用 /review-video 即表示明确请求渲染以供审查,因此无需再次询问。

工作流

1. 快速检查画面(成本低,本地进行)

上传任何内容之前,先渲染几张静帧并自行查看,具体方式见官方 remotion-render:

npx remotion render [CompositionId] out/review-frames --frames=0,45,90,150,240 --image-format=png

选择能覆盖开场钩子、每个场景中间位置、最繁忙的画面(字幕、叠加内容)以及最后一帧的画面。读取 PNG 并检查:

  • 空白或内容为空的画面、缺失的资源(缺失的 staticFile() 会显示为空白或报错)
  • 文本可读性、溢出情况和安全区域(官方 remotion-create/video-layout.md)
  • 字幕相对于平台 UI 的位置(captions-workflow 规则)

如果这些画面显示出明显问题,请先修复(参见第 6 步),然后重复此步骤。这比完整渲染后再上传到 TwelveLabs 便宜得多。

2. 渲染完整视频

查找现有渲染文件:

ls -t out/ 2>/dev/null | grep -E '\.(mp4|webm|mov)$'

如果没有渲染文件,或自生成以来代码已发生变化,现在就进行渲染:

npx remotion render [CompositionId] out/video.mp4
3. 将渲染视频上传到 TwelveLabs
create-asset:
  file: [absolute path to the render, e.g. /path/to/project/out/video.mp4]

保留返回的资源 ID。无需索引。如果分析调用提示资源尚未就绪,请等待几秒后重试。

4. 分析 — 导演审查

运行一次 sync-analyse-video 调用,以 JSON 格式返回完整审查结果(渲染时长超过 1 小时:使用相同的 prompt 和 jsonSchema 调用 async-analyse-video,然后轮询 get-analyse-task):

sync-analyse-video:
  assetId: [asset ID]
  modelName: "pegasus1.5"
  temperature: 0.2
  prompt: "You are a video director reviewing a [duration]s [platform] video at [WxH]. Intent: [one-line brief]. Script: [narration, per scene]. Score each dimension 1-10 and list concrete fixes with timestamps in seconds. Check: framing and composition; whether on-screen text is readable and on screen long enough; transitions; blank, frozen or glitchy frames; pacing (scenes too long or too short); whether the voiceover matches what's on screen; SFX timing; music mood and level under the voice; whether the first 3 seconds hook; whether the CTA is clear."
  jsonSchema: [the rubric below]

始终传入 modelName: "pegasus1.5":服务器的默认模型已从 API 中移除。

评审标准(jsonSchema):

{
  "type": "object",
  "properties": {
    "overall_score": { "type": "integer", "description": "1-10" },
    "scores": {
      "type": "object",
      "properties": {
        "hook": { "type": "integer", "description": "1-10, first 3 seconds" },
        "pacing": { "type": "integer", "description": "1-10" },
        "composition": { "type": "integer", "description": "1-10, framing and layout" },
        "text_legibility": { "type": "integer", "description": "1-10, size, contrast, time on screen" },
        "transitions": { "type": "integer", "description": "1-10" },
        "audio_sync": { "type": "integer", "description": "1-10, voiceover and SFX against visuals" },
        "audio_mix": { "type": "integer", "description": "1-10, voice clarity, music level" },
        "cta": { "type": "integer", "description": "1-10, clarity of the ending" }
      },
      "required": ["hook", "pacing", "composition", "text_legibility", "transitions", "audio_sync", "audio_mix", "cta"]
    },
    "working": { "type": "array", "items": { "type": "string" } },
    "fixes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "start": { "type": "number", "description": "seconds" },
          "end": { "type": "number", "description": "seconds" },
          "dimension": { "type": "string", "enum": ["hook", "pacing", "composition", "text_legibility", "transitions", "audio_sync", "audio_mix", "cta", "glitch"] },
          "severity": { "type": "string", "enum": ["critical", "major", "minor"] },
          "issue": { "type": "string" },
          "fix": { "type": "string" }
        },
        "required": ["start", "end", "dimension", "severity", "issue", "fix"]
      }
    },
    "priority_fix": { "type": "string" }
  },
  "required": ["overall_score", "scores", "working", "fixes", "priority_fix"]
}

保存 JSON(例如 out/review-1.json),以便将下一轮与本轮进行比较,然后清理:

delete-asset:
  assetId: [asset ID]

每次审查都会上传一个新资源,资源会计入账户的存储空间。

若要仔细查看某个片段(例如修复 12-18 秒处的问题),请在删除资源前,使用该片段周围的 startTime/endTime 再次运行 sync-analyse-video(时间窗口必须至少为 4 秒)。

5. 提交审查结果

将 JSON 整理成专业的导演审查报告。把每项修复的时间戳转换为帧(Math.round(seconds * fps)),并注明所属场景,让修复能对应到代码:

🎬 Video Review: [filename]
Duration: [X]s | Resolution: [WxH]

📊 Overall Score: [overall_score]/10
   Hook [x] · Pacing [x] · Composition [x] · Text [x] · Transitions [x] · Audio sync [x] · Mix [x] · CTA [x]

✅ What's Working:
  - [working[0]]
  - [working[1]]

⚠️ Improvements Needed (by severity):
  1. [CRITICAL] [start]-[end]s (frames [a]-[b], [scene]) [issue] → [fix]
  2. [MAJOR] ...
  3. [MINOR] ...

🎯 Priority Fix:
  [priority_fix]

🔄 Next Steps:
  - [ ] [actionable task 1]
  - [ ] [actionable task 2]
  - [ ] [actionable task 3]
  Then run /review-video again.

将 AI 审查结果与第 1 步中你自己的画面检查进行交叉核对;如果两者对可见内容的判断不一致,以画面为准并说明原因。

6. 实施修复

询问用户是否要应用建议的修复。如果同意:

  1. **保留用户更改。**编辑前重新读取文件。如果用户在上次交互后更改了代码,或在 Studio 中编辑了内容,请保留这些修改并在其基础上应用修复;如果某项修复会撤销其中一项修改,请先询问。
  2. 修改代码,优先处理严重和主要问题
  3. 在 Studio 中检查(运行 npx remotion studio,或使用 --no-open 并通过应用内浏览器打开它打印的 URL)。迭代期间保持 Studio 开启。
  4. 重新渲染(第 2 步)并重新审查(第 1-5 步),验证改进情况,并将新评分与已保存的 JSON 进行比较
7. 迭代循环

持续迭代,直到用户满意或审查结果显示没有重大问题。

循环:检查画面 → 渲染 → 上传 → 按评审标准分析 → 删除资源 → 修复(在 Studio 中)→ 重新渲染 → 重复,直到质量达标。

审核清单

每次审核时,请检查以下项目:

视觉效果:

  • 无空白帧
  • 目标分辨率下文字清晰可读
  • 全程颜色统一
  • 动画流畅,无卡顿
  • 图片和素材质量高,无像素化现象

音频:

  • 配音清晰且音量适中
  • 音乐音量不会盖过人声
  • 音效时机正确
  • 音频无削波或失真
  • 开头和结尾有淡入/淡出效果

结构:

  • 开场吸引人(前 2-3 秒)
  • 叙事脉络清晰
  • 节奏适合平台和受众
  • 结尾干净利落,并附有行动号召(如适用)
  • 总时长符合目标

技术:

  • 纵横比正确(16:9 或 9:16)
  • FPS 正确(30 或 60)
  • 文件大小适合目标平台
  • 无渲染瑕疵

评论

支持 Markdown