laohan-luping

Best for: <UNKNOWN>

Product / discoveryatomicno-setup

Skill file

Preview skill file
---
name: laohan-luping
description: 口播稿转录屏脚本(CLI+浏览器),自动生成ffmpeg录制脚本并输出MP4。Use when 用户说"录屏""录制教程""录视频""录一段""screen record""补录""口播稿转录屏""浏览器录屏""录网页"或提到录制Claude Code画面或浏览器操作。
version: "1.2.0"
---

# 录屏自动化:口播稿 → 录屏脚本 → MP4

输入一篇口播稿(或录屏指示),自动生成 bash 录屏脚本。脚本编排 CLI 操作(tmux+Claude Code)和浏览器操作(Playwright headed),ffmpeg 录物理屏幕,输出 1080p MP4。

## 核心理念

**口播稿即脚本蓝图。** 每段口播对应一个屏幕操作(CLI 命令/浏览器导航/静态等待),从口播稿里提取出操作序列和时长,填入录制模板。

**看到什么录什么。** ffmpeg 录物理屏幕,tmux 前台显示终端,Playwright headed 显示浏览器。两种"演员"按口播稿交替出场。

**录屏是素材,不是生产。** 录制过程中的临时文件全部自动清理,只保留最终 MP4。

## 工作流

### 1. 输入口播稿

接收用户提供的:
- 口播稿文件路径(`script.md`)
- 或录屏指示文件路径(`录屏指示.md`)
- 或直接描述要录制什么

如果用户提供了口播稿但没有录屏指示 → 根据口播稿内容自动推断每段对应的操作。
如果用户提供了录屏指示 → 直接用指示里的操作序列。

- **完成条件:** 拿到完整的操作序列和每步时长

### 2. 解析口播稿→操作序列

从口播稿/录屏指示中提取。操作分为三种类型:

**CLI 操作**(tmux + Claude Code):

| 口播段落 | 屏幕操作 | 脚本动作 |
|---------|---------|---------|
| "说「抓今天的AI精选」" | 执行命令 | `send_cmd "抓今天的AI精选"` |
| "说「帮我写口播稿」" | 执行命令 | `send_cmd "帮我写口播稿"` |
| "展示 output/ 文件夹" | 查看命令 | `send_cmd "ls output/"` |

**浏览器操作**(Playwright headed):

| 口播段落 | 屏幕操作 | 脚本动作 |
|---------|---------|---------|
| "打开 GitHub 项目页" | 导航到 URL | `browser_goto "https://github.com/..."` |
| "看一下 README" | 页面滚动 | `browser_scroll 500` |
| "点击安装文档" | 点击链接 | `browser_click "a[href='docs']"` |
| "展示项目截图" | 静态展示 | `browser_wait 3000` |

**静态操作**(纯等待):

| 口播段落 | 屏幕操作 | 脚本动作 |
|---------|---------|---------|
| 开场白/过渡/结尾 | 静态画面 | `sleep N` |

提取规则:
- 引号里的内容(「」或"")→ 直接作为 send_cmd 的参数
- 提到 URL / GitHub / 网站 / 文档 → 浏览器操作
- 提到终端/命令/CLI → CLI 操作
- 纯叙述段落 → 按口播时长估算 sleep 秒数(正常语速约 3 字/秒)
- CLI 命令需要等 Claude 完成的 → 加 `wait_for_claude`
- 浏览器页面需要阅读时间的 → 加 `browser_wait`

- **完成条件:** 生成结构化的操作列表,每条含类型(cli/browser/static)、内容、等待方式、标签

### 3. 环境检测

```bash
which ffmpeg && which tmux && which node
ffmpeg -f avfoundation -list_devices true -i "" 2>&1 | grep "Capture screen"
node -e "require('playwright')" 2>/dev/null && echo "playwright OK" || echo "playwright missing"
```

- 缺工具 → 提示安装
- 多屏幕 → 让用户确认索引
- 缺 Playwright → `npm install playwright`
- **完成条件:** 确认屏幕索引 + Playwright 可用(如需浏览器段)

### 4. 生成录制脚本

基于 `scripts/record_template.sh` 模板生成。模板包含:
- ffmpeg 录屏启动/停止
- tmux 会话管理(CLI 段)
- Playwright 浏览器控制(浏览器段)
- `send_cmd()`、`wait_for_claude()`、`browser_*()` 函数
- 1080p 转码 + 临时文件清理

填充内容:
- **CLI 段**:命令序列块(send_cmd + wait_for_claude)
- **浏览器段**:导航 JSON 文件(`browser_actions.json`)
- **切换时机**:口播稿段落顺序决定 CLI/浏览器交替

如果只有 CLI 段 → 纯 CLI 模式(不启动浏览器)。
如果只有浏览器段 → 纯浏览器模式(不启动 tmux)。
两者都有 → 混合模式。

生成脚本写到用户指定目录(或当前目录),文件名格式:`record_<教程名>.sh`

### 5. 交付+指导

输出:
1. 生成的 `record_xxx.sh` 脚本(含 `browser_actions.json` 如有浏览器段)
2. 运行命令:`bash record_xxx.sh`
3. 提醒:
   - 终端全屏(Cmd+Enter)
   - 开勿扰模式
   - 按回车后别碰键盘鼠标
   - Gate 确认框按回车继续

**不自动执行脚本** — 录屏需要用户手动在终端启动。

## 操作规则

- **口播稿驱动** — 每个操作都能追溯到口播稿的某一段
- **不自动执行录屏脚本** — 涉及屏幕接管,必须用户手动运行
- **屏幕索引需确认** — 不同机器配置不同,不能硬编码
- **CLI/浏览器交替自然** — 切换时加短暂 sleep(1-2s),模拟自然切换
- **浏览器滚动模拟真人** — 分段滚动 200-400px,间隔 500-800ms
- **静态段落用 sleep** — 开场/过渡/结尾等无操作段落,按口播字数÷3估算秒数
- **临时文件全部清理** — Claude 工作目录 + raw 文件 + browser JSON,只保留最终 MP4

## 不适用场景

- 录制桌面应用(非终端非浏览器) → 用 OBS
- 带声音解说 → 需额外配置音频输入
- 实时直播 → 这是录制方案不是直播方案
- 需要登录态的浏览器操作 → 用 opencli Browser Bridge

## 浏览器操作 JSON 格式

```json
{
  "viewport": { "width": 1920, "height": 1080 },
  "steps": [
    { "action": "goto", "url": "https://github.com/xxx", "label": "打开项目页" },
    { "action": "wait", "ms": 3000 },
    { "action": "scroll", "pixels": 600, "smooth": true },
    { "action": "wait", "ms": 2000 },
    { "action": "click", "selector": "a[href='/xxx/docs']", "label": "点击文档" },
    { "action": "wait", "ms": 3000 }
  ]
}
```

支持的 action:`goto`、`wait`、`scroll`、`click`。

## 踩坑速查

| 问题 | 原因 | 解决 |
|------|------|------|
| 录错屏幕 | 多显示器索引不对 | `ffmpeg -list_devices` 确认 |
| tmux 里 claude 立即退出 | 网络/初始化偶发问题 | 重跑 |
| 画面静止 | claude 等待输入 | 手动按回车 |
| 视频太大 | CRF 值太低 | 改 `-crf 23` |
| 命令没发完 | 超时 | 增大 `max_wait` |
| 浏览器窗口尺寸不对 | viewport 不匹配 | JSON 里设 viewport |
| Playwright 启动失败 | 未安装 | `npm install playwright` |

Source

Creator's repository · hanzhcn/laohan-skills

View on GitHub

Security

Security checks in progress
Results will appear here once audits complete
What this skill can do
Reads your filesConnects to the internetRuns code on your machine
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk