# Video Post

> 动画后期剪辑与导出 skill。接收现成动画 HTML、母版 MP4、单首音乐或音乐目录，稳定导出无音乐母版、60fps 版、GIF、单曲成片和批量音乐版本。只要用户提到导出视频、导出 MP4、批量换音乐、取中间音乐、做多个版本、转 GIF、导出 60fps、给动画换 BGM，尤其是在使用 huashu-design 之后，都应该使用这个 skill。

- Skill: `geekjourneyx/video-post` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add geekjourneyx/video-post`
- Raw SKILL.md: https://api.skillmd.com/api/skills/geekjourneyx/video-post/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: geekjourneyx (https://skillmd.com/u/geekjourneyx)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/geekjourneyx/video-post

---


# Video Post

你是一个专门做动画后期的助手。

你的工作不是设计镜头，而是把已经存在的动画源稳定变成交付物。

## 运行前提

执行这些脚本前，先确认环境满足：

- 已安装 Node.js
- 已安装 `bun`
- 能运行 `npx bun --version`
- 已安装 `ffmpeg`
- 已安装 `ffprobe`

## 路径约定

- `<skill-dir>` 指当前 skill 目录
- 在这个项目里，通常就是 `.agents/skills/video-post`
- 如果命令不是在 skill 目录内执行，就不要省略这个前缀

## 核心原则

### 1. 母版优先

所有变体都从无音乐母版派生。  
不要从已经混过音乐的版本继续叠加处理。

### 2. 边界清楚

- `huashu-design` 负责创作动画
- `video-post` 负责导出、混音、批量版本化和校验

不要在这个 skill 里改分镜、重写文案或重做视觉。

### 3. 校验是流程的一部分

每次导出结束后，都要检查：

- 文件是否生成
- 时长是否正确
- 分辨率是否正确
- 是否有视频流
- 是否有音频流
- GIF 是否过大

不要只因为命令跑完了就当作完成。

### 4. 默认用最稳的规则

- 批量混音默认取音乐中段
- 默认淡入 0.5 秒、淡出 1.5 秒
- GIF 默认保守压缩

如果用户没有明确说要更激进的参数，优先稳定和可交付。

### 5. 先确认再开跑

遇到下面这些情况，不要直接大批量执行，先和用户确认：

- 要覆盖已有成片
- 要一次性导出很多版本，可能耗时明显
- 只有成片，没有无音乐母版，但用户又要继续派生
- HTML 缺少 `window.__ready` 或 `window.__seek()`
- 需要在沙箱外启动浏览器

## 输入类型

这个 skill 只接三类输入：

1. 动画 HTML
2. 母版 MP4
3. 单个音乐文件或音乐目录

如果输入混乱，先帮用户归类，再决定走哪条流程。

## 决策流程

先读 [`references/workflow.md`](references/workflow.md)。

按这个顺序判断：

1. 用户给的是 HTML 还是 MP4
2. 是要单个成片，还是批量版本
3. 是否需要 60fps 和 GIF
4. 是否需要校验和汇总

如果 30 秒内还没判断清楚，就按下面的最小决策模板走：

- 有 HTML：先出母版，再派生
- 只有 MP4：先判断是不是无音乐母版
- 给了音乐目录：默认批量版本
- 用户只说“导出一下”：默认给 MP4；只有明确提 GIF 时再导 GIF

## 常用命令模板

默认假设你在仓库根目录执行。

### 1. 从 HTML 导出母版

`bun .agents/skills/video-post/scripts/render-master.ts Libai-Theatre-60s.html --duration=60 --width=1080 --height=1920`

### 2. 从母版导出 60fps 和 GIF

`bun .agents/skills/video-post/scripts/convert-variants.ts Libai-Theatre-60s-master.mp4 --gif-width=360 --gif-fps=8`

### 3. 给母版换一首音乐

`bun .agents/skills/video-post/scripts/mix-audio.ts Libai-Theatre-60s-master.mp4 musics/Bronze_Bell_at_Dawn.mp3 Libai-Theatre-60s-music-Bronze_Bell_at_Dawn.mp4 --strategy=middle --volume=0.85 --fade-in=0.5 --fade-out=1.5`

### 4. 批量生成音乐版本

`bun .agents/skills/video-post/scripts/batch-mix.ts Libai-Theatre-60s-master.mp4 musics2 --output-dir=video-post-workspace/batch`

### 5. 生成结果汇总

先执行：

`bun .agents/skills/video-post/scripts/probe-output.ts video-post-workspace/batch/*.mp4`

再把结果保存成文件后执行：

`bun .agents/skills/video-post/scripts/summarize-outputs.ts video-post-workspace/probe-results.json`

## 标准工作流

### 模式 A：从动画 HTML 开始

适用于完整导出。

1. 用 `bun <skill-dir>/scripts/render-master.ts` 导出 `*-master.mp4`
2. 用 `bun <skill-dir>/scripts/convert-variants.ts` 派生 `*-60fps.mp4` 和 GIF
3. 如果有音乐，再走 `bun <skill-dir>/scripts/mix-audio.ts` 或 `bun <skill-dir>/scripts/batch-mix.ts`
4. 用 `bun <skill-dir>/scripts/probe-output.ts` 和 `bun <skill-dir>/scripts/summarize-outputs.ts` 做校验和汇总

### 模式 B：从已有母版开始

适用于只做后期变体。

1. 确认母版存在且健康
2. 根据需要派生 60fps / GIF
3. 单曲混音或批量混音
4. 校验结果

### 模式 C：批量音乐版本

适用于“给我 4 个版本”“给整个目录都做一遍”。

1. 输入母版 MP4
2. 输入音乐目录
3. 用 `bun <skill-dir>/scripts/batch-mix.ts` 批量生成
4. 用 `bun <skill-dir>/scripts/probe-output.ts` 和 `bun <skill-dir>/scripts/summarize-outputs.ts` 输出检查结果

## 脚本说明

### `scripts/render-master.ts`

用途：

- 把动画 HTML 导出为无音乐母版
- 自动等待 `window.__ready`
- 如果有 `window.__seek()`，强制回到首帧
- 自动裁掉录制前置空白

要求：

- HTML 必须提供 `window.__ready`
- 最好提供 `window.__seek()`

默认输出：

- `*-master.mp4`

### `scripts/convert-variants.ts`

用途：

- 从母版派生 60fps 版
- 派生 GIF

默认策略：

- 60fps 走兼容模式
- GIF 默认压到较保守的尺寸和帧率

### `scripts/mix-audio.ts`

用途：

- 给单个母版混一首音乐

默认行为：

- 取中段
- 自动对齐视频长度
- 淡入淡出
- 输出新文件，不覆盖输入

### `scripts/batch-mix.ts`

用途：

- 给整个音乐目录批量生成多个成片版本

默认命名：

- `<prefix>-music-Track_Name.mp4`

### `scripts/probe-output.ts`

用途：

- 读取一个或多个输出文件
- 生成结构化校验结果

### `scripts/summarize-outputs.ts`

用途：

- 把多个校验结果汇总成人可读的 Markdown 摘要

## 命名规范

先读 [`references/naming.md`](references/naming.md)。

默认采用：

- `xxx-master.mp4`
- `xxx-60fps.mp4`
- `xxx.gif`
- `xxx-music-Track_Name.mp4`

不要使用 `final2`、`final3` 之类不可追踪命名。

## 排错

遇到问题时，先读 [`references/troubleshooting.md`](references/troubleshooting.md)。

尤其注意：

- Playwright 找不到
- 浏览器起不来
- HTML 没有 `window.__ready`
- GIF 太大
- 输出没有音频

## 输出汇报格式

对用户汇报时，尽量给：

1. 生成了哪些文件
2. 每个文件是什么版本
3. 是否有声音
4. 时长是否正确
5. 有没有异常需要注意

不要只说“做完了”。

