# Production Scripts

有命令行环境、旁白按段配、画面按段上时间线的片子（讲解、解说混剪、旁白片、歌词视频……）要跑脚本时用：配音、对齐字时间、把场景代码打成代码包、按段摆上时间线并处理变长变短的波纹...

- Repository: https://github.com/JimLiu/baocut (1645 stars)
- Category: Engineering
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add JimLiu/baocut --skill production-scripts -g -a claude-code -y`
Codex: `npx skills add JimLiu/baocut --skill production-scripts -g -a codex -y`
Cursor: `npx skills add JimLiu/baocut --skill production-scripts -g -a cursor -y`
Gemini CLI: `npx skills add JimLiu/baocut --skill production-scripts -g -a gemini-cli -y`

## Description

有命令行环境、旁白按段配、画面按段上时间线的片子（讲解、解说混剪、旁白片、歌词视频……）要跑脚本时用：配音、对齐字时间、把场景代码打成代码包、按段摆上时间线并处理变长变短的波纹、按稿子建字幕、剪实拍与水印叠上去或垫在底下、量画面占比。脚本是一条省事的路，不规定片子的形态；形态和它不合时用 baocut CLI 自己写。只是加一段动效图形或配一句旁白时不用。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# 制作脚本

一条旁白片做到后半程，重复的活都长一个样：每段旁白合成一次、转写拿字时间、把这一段的画面打成代码包、按整帧排到时间线上、按稿子建字幕、把实拍片段剪好放上去、改一段时把后面的东西一起挪。本 skill 的 `scripts/` 把这些写成了脚本，只调 baocut CLI（配音、转写、导入、修改都走它），不碰 API Key；内容相关的设定都在一份配置里，有命令行环境时拷进工程就能用。

**它是工具，不是形态。** 脚本假定的只有一件事：旁白按段配，每段配一个代码包，首尾相接排在一条视觉轨与一条音频轨上；代码包可以是整段的画面（动画打底，实拍叠在上面），也可以是透明的叠层（实拍铺在下面一条轨上当底，包里只画卡片、标注）。这期片子的底是什么、讲法是什么，由组合入口（用 `skills_read` 读 `video-production`）与相应的手艺页定；定下的形态和脚本不合（整片一条旁白不分段、画面是一条长录屏、你有更顺手的做法）时，照 `video-production` 用 BaoCut 的工具或 CLI 自己做，不为了用脚本把片子做成脚本的形状。没有命令行环境，或者段落、实拍片段与卡片都定好了只差摆上时间线时，也不用脚本：`edits_assemble` 按一份计划一次放好，重跑只动变了的；计划的格式用 `skills_read` 读 `baocut-catalog-editing`「一次放好制作计划」。

目录：1 计划文件　2 按顺序跑　3 改一段　4 量一遍　5 自检

## 1. 计划文件

脚本读的东西合起来就是这部片子的**制作计划**，先把它写全，再跑脚本：

| 文件 | 写什么 |
| --- | --- |
| `explainer.json`（也认 `production.json`） | 视频 id、CLI 命令、语言、帧率与画幅、段落顺序、旁白稿的位置、配音与转写的模型、打包规则、轨道与名字、实拍与水印的设定。字段表用 `skills_read` 读本 skill 的 `references/pipeline.md` 第 2 节 |
| 旁白稿（Markdown） | `## <段落 id> 标题` 开一段，段内每个非空行是一句旁白，一句一个画面节拍；`@`、括号、`>`、`<!--` 开头的行是备注（画面意图写在这里，不配音） |
| `scenes/<id>.js` + `shared/` | 每段的场景代码与共用的引擎、字体、图片；场景从 `window.TIMING` 读这一段的时长与逐句、逐字时间 |
| `clips.json`（可选） | 实拍片段与照片：来源文件与原片起止，放在哪一段的哪一句、从哪几个字起（`cue`），保留原声、旁白留白（`gap`）、背靠背（`follow`）、双语字幕、单侧转场、裁边与取景（`crop`、`focus`）、放法、画中画；只有声音的原声引用（逐词点亮用 `words`） |
| `watermark`（配置里，可选） | 水印图片或一行文字、每次出现的位置与时刻 |
| `sources.json`（可选） | 用到的图片、影像、录音与生成图的出处与许可，一条一行；画面上的出处行与交付的 `sources.csv` 都从它来 |
| `prepend`、`fonts`（配置里，可选） | 片头补在已有视频前面（正片与章节一起后移）；要裁子集的字体 |

计划定下后，剩下的就是把它摆上时间线：`assemble.mjs` 摆旁白与代码包，`captions.mjs` 建字幕，`overlay.mjs` 摆实拍、来源标签、原声字幕与水印（都写在时间线上，不剪文件、不烧字）。改计划只重做受影响的段（第 3 节）。摆的这一步也可以交给 Runtime：把段落（代码包、旁白、对齐结果）、实拍片段、卡片与水印改写成 `edits_assemble` 的计划，一次放好，重跑只动变了的；来源标签与原声的双语字幕仍由 `overlay.mjs` 放。

## 2. 按顺序跑

The rest: https://github.com/JimLiu/baocut/blob/HEAD/skills/baocut/built-in-skills/production-scripts/SKILL.md
