# Video Replication Sop Cy

> 视频复刻生产 SOP，基于参考视频按固定 7 步流程（Step 0-6）复刻出完整分镜包。 当用户说"视频复刻"、"复刻视频"、"拉片"、"视频分镜"、"复刻SOP"、 "视频复刻SOP"、"复刻这个视频"、"帮我拉片"、"分镜复刻"时触发。 当用户给出一个视频链接并希望将其拆解为可独立生产的 10 秒分镜段时， 也应该触发此技能。此技能覆盖从拉片到分镜图生成的完整流程， 不包含配音/BGM/合成等后期步骤。

- Skill: `cy-chenyue/video-replication-sop-cy` (Agent Skill)
- Install (CLI): `npx skillmds@latest add cy-chenyue/video-replication-sop-cy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cy-chenyue/video-replication-sop-cy/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: cy-chenyue (https://skillmd.com/u/cy-chenyue)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/cy-chenyue/video-replication-sop-cy

---


# 视频复刻生产 SOP

基于参考视频稳定复刻，输出一段段固定 10 秒的分镜，用于 AI 生成分镜图片和对应视频。

## 核心原则

- **Gemini CLI 提取视频内容，本 SOP 定义完整生产流程** — 调用 Gemini CLI 直接看视频获取详细内容，再按本技能定义的 Step 0-6 流程输出生产级分镜脚本
- **角色/风格/场景一致** — 所有产出必须贴合原视频视觉风格
- **每段可独立生产** — 分镜脚本每个时间片都是一条完整的 AI 生成 prompt，拿出来就能直接用

## 总流程（固定顺序，不能跳步）

```
Step 0｜环境检查与准备
→ Step 1｜下载视频 + Gemini 全量分析
→ Step 2｜角色卡文字版（基于 Gemini 分析，用户确认锁定）
→ Step 3｜分镜脚本（核心产出，每个时间片 = AI 生成 prompt）
→ Step 4｜角色卡图片版
→ Step 5｜分镜图生成
→ Step 6｜一致性质检
```

每一步完成后告知用户当前进度，等待确认后再进入下一步。

---

### Step 0｜环境检查与准备

在开始之前，检查所有必需工具是否已安装，缺少的自动安装。

#### 0.1 工具检查与安装

逐个检查以下工具，未安装的提示用户并执行安装：

| 工具 | 用途 | 检查命令 | 安装命令 |
|------|------|---------|---------|
| yt-dlp | 视频下载 | `which yt-dlp` | `brew install yt-dlp` 或 `pip install yt-dlp` |
| ffmpeg | 截帧 / 拼联系图 | `which ffmpeg` | `brew install ffmpeg` |
| whisper | 语音转写（ASR） | `which whisper` | `pip install openai-whisper` |
| gemini | 视频内容理解 | `which gemini` | `npm install -g @google/gemini-cli` |

```bash
# 一键检查脚本
for tool in yt-dlp ffmpeg whisper gemini; do
  if command -v "$tool" &>/dev/null; then
    echo "✅ $tool 已安装: $(command -v "$tool")"
  else
    echo "❌ $tool 未安装"
  fi
done
```

如果有工具未安装，告知用户缺哪些，并询问是否自动安装。

#### 0.2 API Key 配置

Gemini CLI 需要 API Key 才能运行。检查是否已配置：

```bash
# 检查 Gemini API Key
if [ -n "$GEMINI_API_KEY" ]; then
  echo "✅ GEMINI_API_KEY 已配置"
else
  echo "❌ GEMINI_API_KEY 未配置"
  echo "请设置: export GEMINI_API_KEY=你的密钥"
  echo "获取地址: https://aistudio.google.com/apikey"
fi
```

如果未配置，引导用户获取并设置 API Key，设置完成后再继续。

#### 0.3 工作目录

在当前目录下创建项目文件夹，所有产出文件统一放在这里：

```bash
mkdir -p ./video-replication && cd ./video-replication
```

**所有工具就绪、API Key 配置完成后，告知用户环境准备完毕，进入 Step 1。**

---

### Step 1｜下载视频 + Gemini 全量分析

这一步完成所有素材提取和内容分析，后续步骤全部基于这里的输出。

#### 1.1 下载视频

```bash
# 用 yt-dlp 下载视频到本地
yt-dlp -o "./video.mp4" "视频链接"
```

#### 1.2 Gemini 视频分析（核心）

用 Gemini CLI 直接分析视频文件，一次性提取所有内容：

```bash
gemini "$(cat <<'PROMPT'
你是一名专业分镜师，需要把视频画面描述到画师可以直接画出来的程度。

请对这个视频进行完整详细的分析，输出以下所有内容：

## 一、全局画面风格

- 画风类型：（3D动画 / 2D动画 / 写实 / 半写实 / 水彩 / 赛博朋克 等）
- 色调倾向：（冷色调 / 暖色调 / 高饱和 / 低饱和 / 偏青 / 偏橙 等）
- 光线特征：（自然光 / 室内暖光 / 顶光 / 侧光 / 逆光 / 阴天漫射 等）
- 画面质感：（细腻写实 / 卡通渲染 / 油画质感 / 胶片颗粒 等）
- 整体氛围：（古风 / 现代 / 奇幻 / 日常 / 末日 等）
- 画面比例：（16:9 / 9:16 / 4:3 / 1:1 / 2.35:1 等，基于视频实际画面判断）
- 参考关键词（英文，5-8个，可直接用于AI图片生成）

## 二、整体剧情

- 故事梗概：谁、在哪里、发生了什么、结果怎样（用具体画面描述）
- 叙事结构：开端/发展/高潮/结尾分别在哪个时间段
- 反转点：剧情走向变化的关键时刻
- 关键视觉元素：贯穿全片的重要道具、动作、场景

## 三、角色列表

为视频中出现的每个角色输出完整描述：
- 称呼/身份
- 性别、民族、年龄感
- 脸型、体型、气质
- 发型（长度、颜色、样式）
- 服装（材质、颜色、款式、磨损程度）
- 在剧情中的作用
- 情绪基调

## 四、逐段详细画面分析（每10秒一段）

将视频按每10秒切分为一段，对每一段输出以下内容。
⚠️ 这是最重要的部分，必须极其详细，让没看过视频的人读完能在脑中完整还原画面。

每段格式：

### S01（0:00-0:10）

按画面变化切分时间片（不固定时长），每个时间片用一段**连贯的叙事文字**描述画面，台词直接融入动作和剧情中，不要单独列出。

示例写法：
> 0-3.5s：男主（东亚男性，约25岁，短发约3cm，灰色粗布棉袄）蹲在雪地上，右手前伸持烤鸭（棕褐油亮，约30cm长）递向白狐（纯白皮毛，小型犬体型）。白狐低头咬住鸭腿。两人相距约半臂。无台词，环境音为风声。场景：雪地树林，白雪覆盖。镜头：中近景固定。光线：冷蓝灰漫射自然光。
>
> 3.5-7s：白衣女性（白色及踝长裙，黑色长发至腰，约20出头）从院门走入，目光直视男主方向，嘴型张开说出"你怎么又在这？"，眉头微皱、步速偏快。男主站起转身面向她，双手自然下垂。两人相距约2米。场景：土墙院落。镜头：中景推至中近景。光线：自然侧光偏暖。

每个时间片必须包含以下所有要素，融合在连贯的描述中（不要分条列出）：
- 角色完整外观（性别、年龄感、发型、服装材质颜色、体型）
- 台词融入动作（谁说了什么 + 说的时候什么表情动作，无台词写环境音）
- 动作具体到身体部位（哪只手、什么方向、什么角度）
- 空间关系（距离、朝向）
- 场景环境
- 镜头（景别、机位、运动方式）
- 光线色调
- 道具（材质、颜色、大小、状态）

**本段场景变化：**（如：雪地树林 → 土墙院落）
**本段出现角色：**（列出角色名称）
**本段关键道具：**（列出所有道具）
**本段画面风格：**（基于全局风格，结合本段实际画面描述色调/光线/氛围的变化）

---

请严格按以上格式逐段输出，每一段的详细程度必须一致，不能前面详细后面潦草。

@./video.mp4
PROMPT
)" -o json > gemini_analysis.json
```

**⚠️ 关于 Gemini 提示词的使用说明：**
- 以上是标准提示词模板，实际执行时根据视频内容微调
- `-o json` 输出 JSON 格式便于后续解析，也可以用 `-o text` 输出纯文本
- 如果视频较长（>5分钟），可以分段让 Gemini 分析，每次分析一部分
- Gemini 分析结果保存到文件，后续步骤全部基于这个文件

#### 1.3 截图 + 联系图

用 ffmpeg 提取关键帧，按 10 秒分段拼联系图，帧带编号和时间点。供用户预览和后续校验使用。

```bash
# 1. 获取视频总时长（秒）
DURATION=$(ffprobe -v error -show_entries format=duration -of csv=p=0 ./video.mp4 | cut -d'.' -f1)
echo "视频总时长: ${DURATION}s"

# 2. 每秒抽 1 帧，输出到 frames/ 目录（帧文件名带时间戳）
mkdir -p frames
ffmpeg -i ./video.mp4 -vf "fps=1" -q:v 2 frames/frame_%04d.jpg

# 3. 按 10 秒分段拼联系图（每张联系图 = 10 帧，2行x5列网格）
mkdir -p contact_sheets
TOTAL_FRAMES=$(ls frames/*.jpg | wc -l | tr -d ' ')
SEGMENT=0

for START in $(seq 1 10 $TOTAL_FRAMES); do
  END=$((START + 9))
  [ $END -gt $TOTAL_FRAMES ] && END=$TOTAL_FRAMES
  COUNT=$((END - START + 1))
  SEGMENT=$((SEGMENT + 1))
  SEGMENT_START=$(( (SEGMENT - 1) * 10 ))
  SEGMENT_END=$(( SEGMENT_START + COUNT - 1 ))

  # 用 ffmpeg 的 tile 滤镜拼成 5列x2行 网格，每帧叠加时间戳文字
  ffmpeg -y \
    $(for i in $(seq $START $END); do printf -- "-i frames/frame_%04d.jpg " $i; done) \
    -filter_complex "
      $(for i in $(seq 0 $((COUNT-1))); do
        T=$((SEGMENT_START + i))
        echo "[${i}:v]drawtext=text='${T}s':fontsize=28:fontcolor=white:borderw=2:bordercolor=black:x=10:y=10[t${i}];"
      done)
      $(for i in $(seq 0 $((COUNT-1))); do printf "[t${i}]"; done)xstack=inputs=${COUNT}:layout=$(
        for i in $(seq 0 $((COUNT-1))); do
          COL=$((i % 5))
          ROW=$((i / 5))
          [ $i -gt 0 ] && printf "|"
          printf "${COL}*w0_${ROW}*h0"
        done
      )[out]" \
    -map "[out]" contact_sheets/S$(printf "%02d" $SEGMENT)_${SEGMENT_START}-${SEGMENT_END}s.jpg
done
```

如果上面的拼图命令太复杂或报错，可以用更简单的 ImageMagick 替代方案：

```bash
# 简化方案：用 montage（ImageMagick）拼联系图
for START in $(seq 1 10 $TOTAL_FRAMES); do
  END=$((START + 9))
  [ $END -gt $TOTAL_FRAMES ] && END=$TOTAL_FRAMES
  SEGMENT=$(( (START - 1) / 10 + 1 ))
  SEGMENT_START=$(( (SEGMENT - 1) * 10 ))
  FILES=$(for i in $(seq $START $END); do printf "frames/frame_%04d.jpg " $i; done)
  montage $FILES -tile 5x2 -geometry +2+2 -title "S$(printf '%02d' $SEGMENT) | ${SEGMENT_START}s-$((SEGMENT_START + END - START))s" \
    contact_sheets/S$(printf "%02d" $SEGMENT).jpg
done
```

#### 1.4 ASR 台词时间线

用 Whisper 从音频中转录台词（精确到秒点），用于与 Gemini 结果交叉校验。如有出入，以 Gemini 为准（因为 Gemini 能结合画面理解上下文）。

```bash
# 1. 从视频提取音频（转为 16kHz wav，Whisper 处理最稳定的格式）
ffmpeg -i ./video.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 ./audio.wav

# 2. 用 Whisper 转录（medium 模型平衡速度和精度，中文视频建议指定语言）
whisper ./audio.wav --model medium --language zh --output_format srt --output_dir ./

# 输出文件：./audio.srt（带时间戳的字幕文件）
# 如果是英文或多语种视频，去掉 --language zh 让 Whisper 自动检测
# 如果机器有 GPU，medium 模型几分钟就能跑完；纯 CPU 可能较慢，可换 small 模型
```

转录完成后，将 SRT 字幕与 Gemini 分析报告中的台词进行交叉校验。

#### 输出物

- **Gemini 视频分析报告**（包含：全局风格、画面比例、整体剧情、角色列表、逐段详细画面分析）
- **截图 + 联系图**（供用户预览和校验）
- **ASR 台词时间线**（供交叉校验，与 Gemini 有出入时以 Gemini 为准）

**将 Gemini 分析报告完整输出给用户（不做删减），等待确认后再进入下一步。**

---

### Step 2｜角色卡文字版

基于 Step 1 Gemini 分析报告中的角色列表，提取并标准化每个角色的完整描述。**这一步锁定角色外观，后续分镜脚本中所有角色描述都必须与这里保持一致。**

| 字段 | 说明 |
|------|------|
| 身份与剧情作用 | 这个角色在故事里是谁、做什么 |
| 外观 | 性别、民族、年龄感、脸型、体型、气质 |
| 发型 | 长度、颜色、样式 |
| 服装 | 材质、颜色、款式、磨损程度，贴合视频风格 |
| 情绪基调 | 角色整体的情绪倾向 |
| 风格归属 | 必须贴视频视觉风格，不能跑偏 |

如果 Gemini 分析中角色描述不够详细，可以针对特定角色让 Gemini 补充分析：
```bash
gemini "请仔细观察视频中这个角色的外观细节：[角色名]。描述其发型、服装材质和颜色、体型、面部特征。 @./video.mp4"
```

**等待用户确认后再进入下一步。**

---

### Step 3｜分镜脚本

这是整个 SOP 的**核心产出**。基于 Step 1 的 Gemini 分析结果和 Step 2 锁定的角色描述，输出每段 10 秒的分镜脚本。

**目标：每个时间片就是一条完整的 AI 生成 prompt** —— 人物外观、台词、动作、场景、光线、镜头、道具全部融合在一段连贯的描述文字中，拿出来就能直接交给 AI 生成图片或视频。

**一次性输出全部段落**，不逐段确认，整体输出完成后等待用户统一确认。

#### 每段输出格式

⚠️ **关键规则：每段时间线从 0 开始**（0-10s），不使用全局时间。因为每段会独立用于生成。

```
【S01】全局 0-10s ｜ 段内 0-10s

【画面风格】写实古风 / 前段冷蓝灰雪地、后段中性偏暖院落 / 自然漫射光 / 画面质感细腻
【剧情作用】开篇建立人物关系 — 男主与白狐的温情互动，随即切入院落冲突
【段间衔接】承接：无（首段） → 引出：白衣女性与男主的正面对峙

0-5.5s：
男主（东亚男性，约25-30岁，短发耳上约3cm，中等偏结实体型，灰色粗布棉袄、
袖口有轻微磨损，深色棉裤）蹲在雪地上，左膝着地、右膝弓起，身体前倾约20度，
右手前伸持一整只烤鸭（棕褐色油亮表皮，约30cm长，完整熟食状态）递向面前的
白狐（纯白皮毛，小型犬体型，尾巴蓬松下垂）。白狐低头咬住烤鸭腿部，
头部贴近男主手掌。男主与白狐相距约半臂（0.4米），男主面朝白狐正前方。
此时无台词，环境音为风声和雪地踩踏声。
场景：雪地树林，地面白雪覆盖，背景有灰褐色树干，远处树林轻微虚化。
镜头：中近景，机位约胸口高度，固定不动，浅景深。
光线：雪地漫射自然光，整体偏冷蓝灰，雪面高亮反光打亮男主右脸。
道具：烤鸭（棕褐油亮，前臂长度，表皮完整）。

5.5-10s：
……（同样格式）
```

#### 写作标准：让 AI 读完就能画出来

每个时间片是一段**连贯的画面描述文字**，必须融合以下所有要素（缺一不可）：

1. **角色 + 完整外观** — 每个出场角色都要写：民族/性别/年龄感、脸型、体型、发型（长度+颜色+样式）、服装（材质+颜色+款式+磨损程度）。**必须引用 Step 2 角色卡的标准描述，每个时间片都完整写出，不能省略或写"同前"**
2. **台词** — 融入动作描述中，写明谁说了什么（如：嘴型张开说出"你敢还手？"）。无台词时标注"无台词"或写环境音
3. **动作 + 姿态** — 具体到身体部位：哪只手、朝什么方向、什么角度、什么幅度。用身体动作替代情感标签（不写"她很愤怒"，写"她眉头紧锁、右手食指指向对方胸口、下颌微收"）
4. **空间关系** — 人与人/物的距离（用米数或步数）、朝向、接触方式
5. **场景** — 地面材质、墙体、天空、植被、建筑等环境细节
6. **镜头** — 景别（特写/近景/中近景/中景/全景）、机位高度、运动方式（固定/推/拉/摇/跟）、构图特点
7. **光线与色调** — 光源方向、色温冷暖、明暗对比、整体色调倾向
8. **道具** — 每个出现的道具都要写：材质、颜色、大小、状态（新/旧/破损等）

#### 信息来源优先级

1. **Gemini 视频分析**（主要来源）— 画面内容、动作、场景、道具
2. **Step 2 角色卡**（角色描述锚点）— 确保角色外观一致
3. **ASR 台词时间线**（交叉校验）— 有出入时以 Gemini 为准

**禁用词表（出现即不合格）：**

> 动作性上升、动势、施压、收束、抬升、推进、前压、冲突启动、
> 对抗态、应答态、审问态、发问态、收束态、高压、紧绷、焦灼、
> 操作性道具、冲击性视觉元素、环境物件介入、场景线条压迫、
> 无强道具、道具弱化、背景弱化、主线人物、对方阵营、结果态度

**等待用户确认后再进入下一步。**

---

### Step 4｜角色卡图片版

生成角色卡图片，硬性规范：

- **纯白底** — 不能有任何背景
- **无文字/标签/边框/水印** — 干干净净只有角色
- **全身图** — 头到脚完整呈现
- **每个角色单独一张**
- **角色视觉必须贴视频风格** — 不能出现"影棚模特感"

执行顺序：先出主角色 → 用户确认 → 再出其他角色。

角色未定版之前，不推进后续大量出图。这是为了避免返工 — 角色形象一旦定了，后面所有分镜都以此为准，如果角色卡不对，后面全部要重做。

---

### Step 5｜分镜图生成（先文后图）

#### 执行流程

1. 先给该段文字脚本，**用户确认后**才生成图
2. 按下方【生图提示词组装规则】拼接完整提示词
3. 附带参考图一起发给 AI 生成工具
4. 一段一张多宫格（见下方多宫格规范）

#### 生图提示词组装规则

每段分镜图的提示词必须包含以下字段，**按顺序拼接**：

| 序号 | 字段 | 来源 |
|------|------|------|
| 1 | 画面比例 | Step 1 全局画面风格中的「画面比例」 |
| 2 | 画面风格关键词 | Step 1「参考关键词（英文）」+ 本段【画面风格】 |
| 3 | 多宫格布局 | 根据本段时间片数量决定几行几列，标注每格对应的时间编号 |
| 4 | 各格内容（逐格描述） | 每格对应一个时间片，包含以下全部子项 |
| 4a | └ 场景描述 | Step 3 分镜脚本中该时间片的场景环境 |
| 4b | └ 角色描述 | Step 2 角色卡的标准描述（每个出场角色完整写出） |
| 4c | └ 角色动作与台词 | Step 3 分镜脚本中该时间片的动作描述 |
| 4d | └ 镜头与构图 | Step 3 分镜脚本中该时间片的镜头信息 |
| 4e | └ 光线与色调 | Step 3 分镜脚本中该时间片的光线描述 |

#### 参考图附带规则

- **角色参考图**：该段分镜中出现的每个角色，都必须将其 Step 4 定版的角色卡图片作为参考图一起传给 AI 生成工具，确保人物外观一致
- **上一段分镜图**（按需）：如果当前段与上一段属于同一场景或需要保持视觉连贯，附带上一段分镜图作为参考；如果场景完全切换，则不需要引用

#### 多宫格规范

- **每段（10s）一张多宫格图**，里面按时间片分格（如 S01 有 2 个时间片就是 1x2 = 2 格）
- **每格对应一个时间片**，提示词中标注时间编号（如 `[Left cell — 0-3.5s]`）
- **整张多宫格的画面比例与原视频一致**（如原视频 16:9，则多宫格整体也是 16:9）
- **布局规则**：2 格用 1x2，3 格用 1x3，4 格用 2x2，超过 4 格用 2xN
- **提示词必须描述完整的多宫格布局**：开头写明几行几列、每格比例，然后逐格描述内容

---

### Step 6｜一致性质检

逐段检查以下维度：

- [ ] 角色（脸、性别、服装）是否漂移
- [ ] 风格是否贴原视频
- [ ] 台词与画面是否对位
- [ ] 关键元素是否缺失

不合格的段落回炉重做，直到通过。

---

## 交付格式（完整包）

最终交付给用户的完整产出清单：

1. Gemini 视频分析报告（全局风格 + 剧情 + 角色 + 逐段画面）
2. 角色卡文字版
3. 分镜脚本（每段每个时间片可独立用于 AI 生成）
4. 角色卡图片版（纯白底、无字、全身）
5. 分镜图（每段一张）
6. 一致性质检结果

---

## 执行红线

以下是绝对不能违反的规则：

1. **不跳过"先文字确认"** — 每个需要确认的步骤，必须等用户说 OK 才继续
2. **不把全局约束只写一次** — 分镜脚本每段都要写完整画面风格
3. **台词必须融入时间片** — 不能单独列台词区，必须写在动作描述中（谁说了什么）
4. **角色外观每个时间片都要写全** — 不能省略或写"同前"，因为每个时间片是独立的生成 prompt
5. **用身体动作替代情感标签** — 不写"她很愤怒"，写具体的面部表情和肢体动作
6. **不用非白底/带字角色卡** — 角色卡必须纯白底、无任何文字
7. **不在角色未定版时推进后续大量出图** — 角色卡确认后才能批量生成分镜图
8. **视频内容分析必须基于 Gemini CLI 直接看视频的结果** — 不能仅靠截图猜内容

