Video-to-SOP — 视频转操作说明书
从屏幕录制视频自动生成多格式操作说明书(HTML + Markdown + PDF)。
整体流程
视频文件 → [extract_frames.py] → 关键帧图片 → [ocr_frames.py] → OCR文本
↓
HTML + MD + PDF ←── 按"八步法"规范撰写 ←── 分析OCR文本 + 视频元数据
Phase 1: 提取关键帧
执行 scripts/extract_frames.py:
python scripts/extract_frames.py "VIDEO_FILE.mp4" --output frames_output --interval 5 --threshold 800
参数说明:
- --interval:最小时间间隔(秒),确保每 N 秒至少 1 帧。默认 5 秒
- --threshold:MSE 场景变化检测阈值,值越低越敏感。默认 800
- 输出:frames_output/ 目录 + keyframes_meta.json(含帧编号、时间戳、视频元数据)
重要:如果环境中没有 OpenCV,用 pip install opencv-python 先安装。不使用 ffmpeg。
Phase 2: OCR 文字识别
执行 scripts/ocr_frames.py:
# 先安装依赖(注意 onnxruntime 版本)
pip install rapidocr-onnxruntime onnxruntime==1.20.0
python scripts/ocr_frames.py frames_output --output ocr_results.json
关键注意事项:
- RapidOCR 的 onnxruntime 在 Windows 上常出现 DLL 加载失败。固定使用 onnxruntime==1.20.0 而非最新版
- 其他 OCR 备选方案(easyocr、ddddocr)依赖 PyTorch/DLL,稳定性不如 RapidOCR
- 输出 JSON 包含每帧的文字行列表及置信度
Phase 3: 撰写操作说明书正文
阅读编制规范
在撰写前,务必先读取 references/sop_spec.md 了解完整的"八步法"规范。核心结构:
- 版本记录 — 表格:版本号/修订日期/修订人/修订摘要/系统版本
- 系统概述 — 核心价值(1-2句)+ 关键术语 + 本功能不支持
- 前置条件 — checklist 式,含验证方式
- 操作步骤 — 每步含:动作指令 + 系统反馈 + 截图编号引用
- 字段规则速查表 — 必填/输入方式/值域/示例
- 异常与边界情况 — 错误场景 + 解决方法
- 关联操作 — 发布后的后续操作
内容生成要求
- 基于 OCR 文本提取界面元素名称(菜单项、按钮文字、字段标签、下拉选项)
- 用视频时间戳反推操作顺序
- 每个操作步骤必须包含:用户动作(点击/输入/选择)+ 系统反馈(页面跳转/弹窗/状态变化)
- 字段表从 OCR 文本中提取字段名+下拉值+必填标识
- 异常处理覆盖 OCR 中出现的错误提示文案
- 截图引用格式:使用
【截图参考】格式标注图片引用
严格禁止
- 不得使用 emoji 图标(包括装饰性 section-icon、callout-icon 等)
- 不得出现开发术语(如"代码实现"、"数据库"、"后端"、"API调用"等)
- 不得使用主观修饰词(如"强大的"、"高级的")
Phase 4: 生成多格式输出
4a. HTML 版本
生成独立的 HTML 文件,要求:
- 左侧 sticky 目录导航:CSS
position: sticky; top: 0,锚点链接a href="#section-id" - 章节编号:数字层级编号(1. / 1.1 / 1.1.1),最多 4 级
- 底色块仅 2 种:浅黄
#FFF8E1(重要提示/注意)+ 浅灰#F5F5F5(示例数据) - 不使用多余的"块"样式:不用 section 卡片、彩色 header 背景、tag 标签、check-icon
- 给每个一级章节设置
id属性供目录锚点导航
CSS 关键样式参考:
.sidebar { position: sticky; top: 0; width: 260px; height: 100vh; overflow-y: auto; }
.callout-tip { background: #FFF8E1; border-left: 4px solid #F9A825; padding: 10px 14px; }
.callout-example { background: #F5F5F5; border-left: 4px solid #9E9E9E; padding: 10px 14px; }
4b. Markdown 版本
- 标准 Markdown 语法,含
[TOC 目录](#)锚点链接 - 表格用标准
| --- |格式 - 提示/示例用块引用
【提示】格式 - 截图引用用块引用
【截图参考】格式
4c. PDF 版本
使用 scripts/md_to_pdf.py 从 Markdown 生成 PDF:
pip install fpdf2
python scripts/md_to_pdf.py "说明书.md" --output "说明书.pdf"
脚本特性:
- 自动检测中文字体:按 Windows/Linux/macOS 常见路径查找(simhei/msyh/NotoSansCJK/PingFang)。找不到时用 --font 手动指定
- 段落首行缩进 2 汉字
- 表格统一行高:同行单元格强制等高,文字垂直居中,背景色对齐
- 页边距:左右 25mm(2.5cm),上下 30mm(3cm)
- 页眉页脚:页眉"操作说明书"+ 分割线,页脚页码居中
- 自动分页:表格跨页时自动重复表头
常见问题处理
onnxruntime DLL 加载失败(Windows)
pip uninstall onnxruntime onnxruntime-gpu -y
pip install onnxruntime==1.20.0
中文 PDF 字体方块/乱码
fpdf2 需要系统中存在中文字体。md_to_pdf.py 会自动搜索,手动指定:
python scripts/md_to_pdf.py in.md -f "C:/Windows/Fonts/simhei.ttf"
视频格式兼容性
OpenCV 支持大多数常见格式(mp4/avi/mov/webm)。若打开失败,检查是否缺少编解码器。
HTML/MD 生成后如何本地预览
- HTML:直接用浏览器打开文件
- PDF:用脚本生成后,PDF 阅读器查看
- 三种格式互相独立,修改其中之一不影响其他