关于 shot-list
shot-list 是将剧本整理为可打印 PDF 镜头清单的协作规划技能。它可解析多种剧本格式,提取场景信息,并逐场景规划镜头覆盖。
主要功能
- 01解析 Fountain、FDX、TXT、PDF 和 DOCX
- 02提取场景、角色、动作与时长
- 03逐场景规划镜头覆盖
- 04提供景别、运镜和角度参考
- 05生成可打印的 PDF 镜头清单
适用场景
- 01根据剧本准备镜头清单
- 02讨论场景覆盖与视觉选择
- 03创建可打印的制作文档
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jakerains/ agentskills --skill shot-list安装后在 Claude Code 中输入/shot-list确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.claude-plugin/plugin.jsonreferences/coverage_patterns.mdshot_terminology.mdscripts/generate_shot_list_pdf.pyparse_screenplay.py详细介绍
镜头清单生成器
解析剧本,协作确定镜头,并生成可供制作使用的 PDF 镜头清单。
工作流概览
- 解析剧本 → 提取场景、地点、角色和动作
- 协作规划 → 与用户逐场讨论镜头选择
- 生成 PDF → 创建专业、可打印的镜头清单
第 1 步:解析剧本
支持格式:.fountain、.fdx、.txt、.pdf、.docx
场景提取模式
从剧本中提取:
- 场景编号(如果缺少,则自动生成)
- 场景标题(INT./EXT.、地点、时间)
- 场景中的角色
- 关键动作节拍(需要拍摄覆盖的故事时刻)
- 页数/时长估算
Fountain/文本解析
import re
def parse_screenplay(text):
"""Extract scenes from screenplay text."""
scenes = []
scene_pattern = r'^((?:INT\.|EXT\.|INT\./EXT\.|I/E\.)\s+.+)$'
lines = text.split('\n')
current_scene = None
scene_num = 0
for i, line in enumerate(lines):
line = line.strip()
if re.match(scene_pattern, line, re.IGNORECASE):
if current_scene:
scenes.append(current_scene)
scene_num += 1
current_scene = {
'number': scene_num,
'heading': line,
'characters': set(),
'action_beats': [],
'content': []
}
elif current_scene:
current_scene['content'].append(line)
if line.isupper() and len(line) > 1 and len(line) < 40:
if not any(t in line for t in ['CUT TO', 'FADE', 'DISSOLVE']):
current_scene['characters'].add(line.split('(')[0].strip())
if current_scene:
scenes.append(current_scene)
for s in scenes:
s['characters'] = list(s['characters'])
return scenes
第 2 步:协作规划镜头
解析完成后,展示场景并讨论拍摄覆盖。针对每个场景,询问:
- 情绪弧线是什么?(影响构图选择)
- 焦点人物是谁?(决定拍摄覆盖的优先级)
- 有哪些关键时刻?(需要特定镜头的节拍)
- 有哪些实际限制?(地点、设备、时间)
- 视觉风格参考是什么?(电影/剧集灵感)
镜头类型参考
| 类型 | 代码 | 用途 |
|---|---|---|
| 全景/建立镜头 | WS | 地点、群像 |
| 全身镜头 | FS | 全身、动作 |
| 中景 | MS | 对话、互动 |
| 中近景 | MCU | 情绪对话 |
| 近景 | CU | 反应、情绪 |
| 大特写 | ECU | 关键细节 |
| 过肩镜头 | OTS | 对话覆盖 |
| 双人镜头 | 2S | 成对角色 |
| 插入镜头 | INS | 道具、细节 |
| 主观镜头 | POV | 角色视角 |
摄影机运动参考
| 运动 | 代码 | 效果 |
|---|---|---|
| 固定 | STATIC | 稳定感 |
| 摇摄 | PAN | 水平跟随 |
| 俯仰 | TILT | 展现高度 |
| 移动 | DOLLY | 靠近/远离 |
| 跟拍 | TRACK | 跟随动作 |
| 升降 | CRANE | 史诗感 |
| 手持 | HH | 紧张感、活力 |
| 斯坦尼康 | STEDI | 流畅跟拍 |
角度参考
| 角度 | 效果 |
|---|---|
| 平视 | 中性 |
| 低角度 | 力量感 |
| 高角度 | 脆弱感 |
| 荷兰角 | 不安感 |
第 3 步:编写镜头条目
shot_entry = {
'scene': 1,
'shot': 'A',
'setup': 1,
'shot_type': 'MS',
'framing': 'Medium on Sarah',
'angle': 'Eye Level',
'movement': 'STATIC',
'lens': '50mm',
'description': 'Sarah enters, sees the letter',
'characters': ['SARAH'],
'notes': 'Practical window light'
}
覆盖模式
主镜头 → 中景 → 近景 → 插入镜头
第 4 步:生成 PDF
使用 scripts/generate_shot_list_pdf.py 生成专业成品。
PDF 列
| 列 | 内容 |
|---|---|
| 镜头编号 | 场景.镜头 ID |
| 设置 | 摄影机设置 |
| 类型 | 镜头类型代码 |
| 构图 | 描述 |
| 运动 | 摄影机运动 |
| 动作 | 发生的内容 |
| 备注 | 技术说明 |
输出至 /mnt/user-data/outputs/shot_list_{project}.pdf
参考资料
references/shot_terminology.md- 完整术语表references/coverage_patterns.md- 常见拍摄覆盖策略
评论
支持 Markdown