视频结构拆解(Video Structure Teardown)
把一条视频拆解为逐段时间轴:每个时间段「画面是什么 + 字幕/口播说了什么 + 承担什么结构功能」,最终交付 Markdown 拆解报告。
核心流程(5 步,全部有脚本兜底)
第 0 步:环境自检(每次必跑,脚本自愈)
$env:PYTHONUTF8 = "1"
python "<skill目录>\scripts\check_env.py"
脚本自动完成:检测/安装 pip 依赖(openai-whisper、selenium、yt-dlp,走清华镜像)、定位 ffmpeg、修复 whisper assets 缺失(20250625 版 sdist 不带 assets:mel_filters.npz 用 librosa 现场重生成;multilingual.tiktoken 从清华镜像的 20240930 sdist 抽取)、检查 msedgedriver。
第 1 步:取视频(抖音链接 / 直链 / 本地文件)
python "<skill目录>\scripts\fetch_video.py" "<URL或本地路径>" --outdir "D:\VideoAnalysis\<视频ID>"
- 支持:
douyin.com/video/<id>、用户页?modal_id=<id>、v.douyin.com短链(自动重定向解析)、http 直链、本地文件路径(直接使用) - 已知坑(勿走弯路):
- yt-dlp 下载抖音必报 "Fresh cookies are needed"——不要尝试 cookies/iesdouyin/ttwid 各种绕法,全都会失败(新版接口要浏览器端签名)
- 正确方案 = 无头 Edge(selenium + msedgedriver)真实打开页面,等 10 秒后 JS 强制播放,抓
<video>的 currentSrc(douyinvod 签名直链),同一会话内立刻用 urllib 带Referer: https://www.douyin.com/下载(签名 URL 几分钟内过期) - msedgedriver 从
https://msedgedriver.microsoft.com/<版本>/edgedriver_win64.zip下载(azureedge 域名可能连不上,microsoft.com 域名稳定) - 加
--probe-only只解析视频 ID 和检查驱动,不下载
第 2 步:媒体信息 + 转写
python "<skill目录>\scripts\transcribe.py" "<video.mp4>" --model tiny --lang zh --out "<工作目录>\segments.json"
- whisper-tiny CPU 约 0.3×时长耗时(15 分钟视频 ≈ 5 分钟);
--model small更准(需下载 466MB,Azure CDN 可直连) - 输出
{duration, language, segments:[{start,end,text}]};tiny 中文有噪声,报告中要注明"已用画面字幕交叉校正"
第 3 步:抽帧 + 时间窗
python "<skill目录>\scripts\extract_frames.py" "<video.mp4>" --outdir "<工作目录>\frames" --windows 22
- 自动产出:
windows.json(22 个时间窗+采样点)、每窗中部帧g_*.jpg、开场帧(0.5/2/3.5/6s,黄金 3 秒专用)、结尾帧(最后 3 秒 3 张)、场景切换点列表
第 4 步:多模态看帧(Claude 亲自做)
用 Read 工具批量查看 jpg(每批 4-6 张),记录每个时间窗的:出镜人物、场景/机位、B-roll 类型(空镜/资料截图/老照片)、画面上的花字与贴纸原文。画面上的字幕是校正转写噪声的第一依据。
第 5 步:组装《逐段时间轴.md》
工作目录下生成报告,模板结构:
1. 标题区:视频标题 / 来源 / 时长 / 镜头密度(场景数÷时长)/ 嘉宾身份(从画面证据推断)
2. 逐段表:| 时间 | 画面 | 字幕/口播 | 结构功能 | —— 时间窗用 windows.json,画面用看帧结论,文案用 segments.json 按窗聚合(画面字幕优先校正)
3. 黄金 3 秒专析:开场帧逐帧表 + 钩子类型判定(断言式/提问式/反差式/悬念式)+ 花字递进规律
4. 情绪山脊图(ASCII):标出钩子/题眼/情绪顶点/升华的时间位置
5. 整片骨架一行流程 + 可复用结构公式代码块 + 花字/字幕系统分层清单
6. 结尾注明:转写模型档位与噪声说明、产出文件清单
写完后 Invoke-Item 打开 md 文件给用户,并在聊天中贴出完整表格。
第 6 步:导出 Word 文档(默认执行)
python "<skill目录>\scripts\md2docx.py" "<工作目录>\逐段时间轴.md" --open
- 自研转换器(python-docx):标题/表格(表头深蓝底白字+斑马纹)/代码块(等宽灰底)/引用块/列表/行内加粗全支持,中文微软雅黑,A4 页面
- 输出同名
.docx,--open自动打开;用户没提也要转(Word 便于转发和二次编辑)
第 7 步:反推拍摄脚本(用户要求"反推/还原脚本"时执行,否则询问)
python "<skill目录>\scripts\script_brief.py" "<工作目录>"
脚本把 segments.json + windows.json 聚合成 script_brief.md(每窗口播合并、窗内镜头数、开场/结尾逐秒帧、镜头密度 TOP5)。然后 Claude 据此 + 看帧结论撰写《还原脚本.md》:
- 片头信息:片名/时长/镜头总数/平均镜头时长/机位清单/出镜人物
- 分镜脚本总表:
| 镜号 | 时间码 | 时长 | 景别/机位 | 画面内容 | 口播台词 | 字幕/花字 | 后期备注 |—— 逐窗填写;口播台词以转写为底稿、用画面字幕校正,无法确认的字句标(? - 黄金3秒逐秒分镜:0-6 秒逐秒拆(帧+花字递进+口播)
- 快剪节奏说明:引用镜头密度 TOP5,说明该视频的剪辑呼吸感
- 拍摄清单:场地/机位/道具/出镜人(从画面证据归纳)
- 后期清单:花字系统分层/包装元素/音乐节奏点
- 最后同样跑
md2docx.py生成《还原脚本.docx》并打开
写完把两个文件都 Invoke-Item 给用户,并提示:"想套用这条结构拍自己的视频,告诉我你的选题,我按这个分镜骨架帮你写新脚本。"
工作目录约定
默认 D:\VideoAnalysis\<视频ID>\:video.mp4、segments.json、frames\、逐段时间轴.md、逐段时间轴.docx。
环境依赖(check_env.py 自动处理)
- Python 3.10+(用户机为 3.13.1,已设为默认)、FFmpeg(D:\FFmpeg\bin,脚本自动加入 PATH)
- pip 包:openai-whisper / selenium / yt-dlp / librosa(清华镜像)
- msedgedriver:优先复用
D:\VideoAnalysis\driver\msedgedriver.exe,缺失时自动按本机 Edge 版本下载 - 无需管理员权限,全用户级安装