$npx -y skills add chanjing-ai/chan-skills --skill chanjing-one-click-video-creation用户输入选题或工作流,自动生成完整短视频成片(文案、分镜、数字人口播与 AI 画面混剪);调用 Chanjing Open API 与同仓库子技能脚本。
| 1 | # 一键式视频渲染器 |
| 2 | |
| 3 | ## 功能说明 |
| 4 | |
| 5 | 一键调用 Chanjing API 完成口播 TTS、数字人合成、文生视频与本地封装;集成 **ffmpeg** / **ffprobe** 做拼接、转码与轨对齐。编排与安全细则见 **§3**–**§8** 与 `templates/`;**成片命令**见 **§5**。 |
| 6 | |
| 7 | ## 运行依赖 |
| 8 | |
| 9 | 必须可用的二进制或等价封装(具体调用方式见 **§5**、`run_render.py`): |
| 10 | |
| 11 | - **ffmpeg**:拼接、转码、封装 |
| 12 | - **ffprobe**:时长、分辨率、旋转等元数据(与数字人轨对齐) |
| 13 | - **chan-skill**(或同仓库下直接 `python` 调用子技能脚本):驱动 `chanjing-tts`、`chanjing-video-compose`、`chanjing-ai-creation` 等 CLI |
| 14 | |
| 15 | ## 环境变量与机器可读声明 |
| 16 | |
| 17 | - 环境变量键名与说明:**`manifest.yaml`**(`environment` 段)及本文 |
| 18 | - 键名、默认值、凭据模型、二进制、合规 **`permissions`**、**`clientPermissions`、`agentPolicy`**:**`manifest.yaml`** |
| 19 | |
| 20 | **§3.2** 表格为配合 **`run_render.py`** 阅读的说明;若与 **`manifest.yaml` 冲突,以 `manifest.yaml` 为准**。 |
| 21 | |
| 22 | ## 使用命令 |
| 23 | |
| 24 | - **ClawHub**(slug 以注册表为准,常与技能包名一致):`clawhub run chanjing-one-click-video-creation` |
| 25 | - **本仓库直连**:`python scripts/run_render.py --input workflow.json --output-dir ./outputs/run1`(在技能目录或配合 **`SKILLS_DIR`** / **`CHANJING_ONE_CLICK_VIDEO_SKILLS_ROOT`** / **`CHAN_SKILLS_DIR`** 使用) |
| 26 | |
| 27 | --- |
| 28 | |
| 29 | ## 速查 |
| 30 | |
| 31 | | 内容 | 位置 | |
| 32 | |------|------| |
| 33 | | 工作流、`duration_sec`、`null`/合并、选题校验 | **§4.1** | |
| 34 | | 切段、奇偶镜、`scenes[]`、`scene_count`/`video_type`;**首镜 `voiceover` ≤20 字(硬)** | **`storyboard_prompt.md`** 篇首「文本切段」;**`script_prompt.md`** 首镜口播;**`video_brief_plan.md`** | |
| 35 | | 渲染技术、状态、`partial`/success、硬约束 | **`render_rules.md`** §1–§4;**§7**、**§8** | |
| 36 | | **`ref_prompt` / 文生提示词** | **`storyboard_prompt.md`** + **`history_storyboard_prompt.md`**;**§4.2** 指针 | |
| 37 | | 请求体字段与默认 | **§6** | |
| 38 | | `run_render.py`、子进程 CLI | **§5** | |
| 39 | | 安全、凭据、信任边界、策略 | **`manifest.yaml`** + **§3.1**(§3.1 不重复 manifest 表格) | |
| 40 | | 环境变量、二进制、副作用、落盘 | **§3.2** | |
| 41 | |
| 42 | **冲突**:渲染实现以 **`render_rules.md`** 为准;**`ref_prompt`** 条文以 **`storyboard_prompt.md`** / **`history_storyboard_prompt.md`** 为准(**§4.2** 汇总指针)。`run_render.py` 只实现 **§5** + **`render_rules.md`**,不增业务规则。执行:手工编排子 skill、仅 `run_render`、或混用。 |
| 43 | |
| 44 | --- |
| 45 | |
| 46 | ## 1. 做什么 |
| 47 | |
| 48 | 1. 选题或全文 → `video_plan`、口播全文、分镜 |
| 49 | 2. **TTS**:整段优先;超长按分镜少批合并(细则与字数见 **`render_rules.md` §3·C.4**) |
| 50 | 3. 按镜切音频 |
| 51 | 4. **数字人分镜**:`chanjing-video-compose`(音频驱动) |
| 52 | 5. **AI 分镜**:`ref_prompt` → `chanjing-ai-creation` → 与镜内音频合成 |
| 53 | 6. **封装**:对齐公共数字人轨 → **ffmpeg** concat → 本地 mp4 |
| 54 | |
| 55 | --- |
| 56 | |
| 57 | ## 2. 何时用 / 何时不用 |
| 58 | |
| 59 | | | | |
| 60 | |--|--| |
| 61 | | **适合** | 要成片;口播与画面混剪;用户明确要生成短视频 | |
| 62 | | **不适合** | 仅文案/标题;未要视频;只剪已有素材 | |
| 63 | |
| 64 | --- |
| 65 | |
| 66 | ## 3. 前置条件 |
| 67 | |
| 68 | - **鉴权**:`chanjing-credentials-guard`;凭据路径与字段见 **`manifest.yaml`**、**§3.1**;无凭证时子进程可 `open_login_page.py` |
| 69 | - **Plan/Script/分镜**:本地 Agent 逻辑,**无需**外部 LLM API key(本 skill 必选路径不依赖外部 LLM) |
| 70 | - **本机二进制与仓库布局**:**§3.2**(`ffmpeg` / `ffprobe`、**`SKILLS_DIR`** 等) |
| 71 | - **数字人与音色**:**勿**用环境变量或仓库内缓存文件保存跨任务的「默认」`audio_man` / `person_id` / `figure_type`。每次任务在 **`workflow.json` 根级显式填写**;由 Agent 按 **`video_plan`**(如 `video_type`)、口播人设与选题语义,调用 **`list_voices.py`** 与 **`list_figures.py`**(`--source` 取 `common` / `customised` 等与本次任务一致)选型后写入;**`audio_man`** 宜与所选形象的 **`audio_man_id`** 一致。 |
| 72 | - **公共数字人选型(禁止「只取列表前几项」)**:须用 `list_figures.py --source common --json` 拉取候选(必要时增大 `--page-size` 或翻页,覆盖足够条目),在候选内**逐项对比**后再定稿:`name`、`figures[].type`(→ `figure_type`)、`figures[].width`/`height`(画幅与 **D.1c** 一致)、`audio_man_id`、`audio_name`(若有)与 **`video_plan`/口播人设**(性别、气质、行业、年龄感)是否匹配。**默认偏好年轻、有活力的形象**:名称或 `audio_name` 中含青年/少女/小哥哥/小姐姐/学生/元气/青春/年轻等正向信号时优先;仅当选题或用户明确要求成熟、权威、中老年等气质时,再选对应人设。定制源 `customised` 同样对比 `name`、`width`/`height`、`audio_man_id` 等,勿未经比较直接取页首。 |
| 73 | |
| 74 | ### 3.1 安全、凭据与信任边界 |
| 75 | |
| 76 | 环境变量与二进制以 **`manifest.yaml`** 与 **§3.2** 为据。审阅时可对照 **`description`** 与 **`manifest.yaml`**(含 **`agentPolicy`**)。 |
| 77 | |
| 78 | - **能力与管道**:步骤级说明见 **§1**;`run_render` 职责与子进程见 **§5**(不在此重复链路)。 |
| 79 | - **主凭据 / 路径 / primaryEnv**:见 **`manifest.yaml`**;路径与写回行为另见 **§3.2** 持久性表「凭据状态」及 **`CHANJING_OPENAPI_CREDENTIALS_DIR`**(兼容 **`CHANJING_CONFIG_DIR`**)。 |
| 80 | - **敏感与合规**:勿回显完整密钥、**勿将 `credentials.json` 提交版本库**;权限建议 **`0700` / `0600`**(配置脚本尽量设置)。 |
| 81 | - **信任与出站行为**:HTTPS、按返回 URL 拉取媒体、**`--output-dir`** 落盘等细节见 **§3.2**「典型副作用」与持久性表;须自行判断是否信任蝉镜主机与链接。 |
| 82 | - **浏览器**:缺凭证时的 **`webbrowser.open` / `open_login_page.py`** 见 **§3.2** 同表。 |
| 83 | - **Agent 策略**:**`manifest.yaml`** 中 **`agentPolicy`**(非 always、不改其它 skill)。 |
| 84 | |
| 85 | ### 3.2 运行时契约(环境变量、二进制、副作用与落盘) |
| 86 | |
| 87 | 与 **`scripts/run_render.py`** 及同仓库子 skill 行为对齐;与篇首 YAML、**`manifest.yaml`** 一致。若与其它产品文档并列,**以本仓库源码、`manifest.yaml` 与本文为准**。 |
| 88 | |
| 89 | #### 环境变量(常见) |
| 90 | |
| 91 | 命名以仓库根 **`合规规则.md` §3** 为准;下列**推荐名**在代码中生效,**旧名仍兼容**(见 **`manifest.yaml`** 与各子 skill 说明)。 |
| 92 | |
| 93 | | 变量 | 必需性 | 默认 / 说明 | |
| 94 | |------|--------|---------- |