要把一条短视频选题真正做成可检查的本地成片,只生成标题或口播稿是不够的。蝉镜一键成片 Skill 会把策划、文案、分镜、配音、数字人、AI 画面和本机封装串成一条流水线;同时它也有明确边界:首镜口播不能超过 20 字,默认不烧录字幕,任一步失败就中断,不会自动改成“只出数字人”或“只出 AI 画面”。

本文介绍 chanjing-ai/chan-skills 仓库中的 chanjing-one-click-video-creation,用一个虚构的生活科普选题走完准备、配置、任务描述、验收和排错。最终成果是一份可以提交给渲染脚本的工作流,以及(在凭证、配额和本机环境都具备时)输出目录里的 final_one_click.mp4。本文核对了官方 SKILL.md、README、示例工作流和 render_rules.md,没有实际安装第三方包,也没有使用真实蝉镜密钥或调用 Open API。下面的命令、工作流和验收项都是示例或预期结果,不冒充已生成的成片记录。

一、这个 Skill 做什么,不做什么

它做的是一条完整成片链路:把选题或口播全文整理成 video_plan、口播稿和分镜,再调用同仓库的蝉镜能力完成 TTS、数字人合成和 AI 画面,最后用 ffmpeg / ffprobe 切段、对齐并拼接成本地 mp4。官方说明里,数字人分镜走 chanjing-video-compose(音频驱动),AI 分镜走 chanjing-ai-creation 文生视频,再与镜内音频合成。

它也写清了不适合的情况:只要文案或标题、用户并未要求出视频、只剪已有素材。这些任务不必走这条流水线,也不应把“一键成片”理解成自动剪辑现成素材的工具。

编排方式可以是代理按模板逐步生成策划和分镜,也可以在已经准备好 workflow.json 后,只运行 scripts/run_render.py 做渲染。run_render.py 不负责生产 plan、script 或 storyboard,也不会自动判断题材属于当代还是非当代。

示意图:蝉镜一键成片从选题、策划文案、TTS、画面到本地封装的流程

二、来源、版本与下载范围

官方路径为 chanjing-ai/chan-skills 仓库中的 skills/chanjing-one-click-video-creation/。本站三篇蝉镜教程共用同一个完整源码包,显示版本是 cf3714fd(2026-10-22 源码快照),对应提交 cf3714fde137ca5cadd191dd2db1a4a8be601c85。仓库另有 2026-03-28 的 tag v1.0.1,内容早于本快照,不能当作当前下载包的版本号。本包也不是今天单独为这一篇重新制作、重新上传的安装器。

压缩包内含仓库 README、中文 README、本技能目录,以及一键成片会编排到的同仓库子技能。仓库未标注许可证,再分发前应自行确认使用条件,并保留原有说明文件。包内不应出现 credentials.json 或任何真实密钥;如果你在本机生成了凭证文件,不要把它放进压缩包或提交到版本库。

解压后至少核对这些路径:

chan-skills-cf3714fd/
  README.md
  README.zh-CN.md
  使用说明.txt
  skills/chanjing-credentials-guard/SKILL.md
  skills/chanjing-one-click-video-creation/SKILL.md
  skills/chanjing-one-click-video-creation/scripts/run_render.py
  skills/chanjing-tts/SKILL.md
  skills/chanjing-video-compose/SKILL.md
  skills/chanjing-ai-creation/SKILL.md

目录存在不等于技能已被加载,也不等于已经具备蝉镜配额。 源码包不会自动安装 Python、ffmpeg、代理客户端或蝉镜账号。线上仓库可能继续更新,下载包与线上最新提交要分别记录。

三、先跑凭据守卫,再准备本机环境

在调用任何蝉镜成片技能前,官方要求先使用 chanjing-credentials-guard。它只通过本机命令引导配置和校验 Access Key(app_id)与 Secret Key(secret_key),以及本地 Token,不应在对话里粘贴密钥。

官方给出的登录页是 https://www.chanjing.cc/openapi/login。新用户注册后,页面可能直接显示 App ID 和 Secret Key;已有用户则需到控制台的「API 密钥」查看或重置。拿到密钥后,在本机终端自行执行配置命令,例如:

python skills/chanjing-credentials-guard/scripts/chanjing_config.py --ak <your_app_id> --sk <your_secret_key>

再检查状态:

python skills/chanjing-credentials-guard/scripts/chanjing_config.py --status

凭证默认写入 ~/.chanjing/credentials.json,目录可用 CHANJING_OPENAPI_CREDENTIALS_DIR 覆盖,并兼容旧名 CHANJING_CONFIG_DIR。官方说明 Token 大约 24 小时有效,建议在到期前 5 分钟刷新;权限建议对目录和文件使用较严格的本地权限。配置脚本可能回写 access_token 和 expire_in,因此这个文件不要提交版本库,也不要打进分享包。

一键成片还要准备:

  1. 可用的 python3。
  2. 本机已安装并可在命令行调用的 ffmpeg 和 ffprobe。只做文案策划、不跑 run_render.py 时可以暂不安装,但要完成本地封装就必须具备二者。
  3. 同仓库中的 chanjing-tts、chanjing-video-compose、chanjing-ai-creation 能被脚本找到。可通过 SKILLS_DIR、CHANJING_ONE_CLICK_VIDEO_SKILLS_ROOT 或 CHAN_SKILLS_DIR 指定仓库根;未设置时,run_render.py 会尝试从脚本路径向上推断。
  4. 蝉镜 Open API 账号和当时仍有效的调用额度。具体套餐、价格和时长配额以控制台当时显示为准,本文不编造这些数字。

如果使用官方 README 中的安装方式,可以先列出再安装,例如:

npx skills add chanjing-ai/chan-skills --list
npx skills add chanjing-ai/chan-skills --skill chanjing-one-click-video-creation -y

上述命令在本文制作过程中没有执行。若宿主工具使用其他插件或 Agent Skills 加载方式,应查该工具的当前说明,不要照搬另一套命令。插件安装和复制目录两种方式尽量只选一种,避免同一技能装两份后分不清实际版本。

四、把选题收成可以渲染的工作流

“帮我做一条短视频”太宽,既无法验收,也容易在首镜字数上直接失败。下面把练习收成一个虚构示例:向普通家庭观众说明冰箱门封条发霉后应如何清洁,目标是一条竖屏口播短视频,而不是电商带货片,也不使用未经授权的真人面孔或声音。

官方对选题有基本校验:去掉空白后不足 5 个字,或只是「你好」「test」这类占位,会被拒收。可以允许扩写;若开启严格模式且选题仍然含糊,任务会失败。duration_sec 只是策划参考,默认常见为 60 秒,不是 ffmpeg 的成片上限;最终时长以 TTS 总轨和 ffprobe 结果为准,不能为了凑时长去裁已经定稿的口播,除非用户明确要求。

硬限制必须写进策划,而不是事后补救:

  1. 钩子 / 首镜口播不超过 20 字。 官方在文案模板和分镜规则里把它写成硬上限,第一分镜的 voiceover 同样适用。
  2. `subtitle_required` 默认是 false。 由 run_render.py 调用数字人合成时,默认传不烧录字幕;只有显式设为 true 时才烧录。
  3. `cover_required` 默认是 true。 工作流里不要把它误写成必须关掉,或当成已经自动导出了封面文件的保证。
  4. 第 1 镜和最后一镜使用数字人;中间按官方分镜规程,常见是奇数镜数字人、偶数镜 AI 画面。具体切段规则以 templates/storyboard_prompt.md 为准。
  5. 渲染没有自动降级。 任一步失败即中断,不会自动改成只出数字人或只出 AI 画面。输出里的 partial 表示当次没有成功成片或中途失败,并不等于系统已经换了一条简化链路。

示意图:一键成片的硬限制,包括首镜字数、字幕默认值、失败不降级和凭证要求

音色和数字人也不能靠环境变量“默认沿用上次”。每次任务都要在 workflow.json 根级写明 audio_man;只要存在数字人分镜,还要写 person_id(或 avatar_id)以及与当次形象一致的 figure_type。官方要求先调用 list_voices.py 和 list_figures.py,在候选里对比名称、形态、画幅、audio_man_id 和人设后再选择,禁止未比较就取列表最前面几项。无特殊要求时,文档默认偏好更年轻、更有活力的形象;若选题需要成熟或权威气质,再改选相应人设。audio_man 宜与所选形象的 audio_man_id 一致。

五、给 Skill 的任务描述

可以在已经加载该 Skill、并且本机凭证由你自己配置完成的工具中,提出如下示例任务。占位符不要在对话里替换成真实密钥。

使用 chanjing-one-click-video-creation,为虚构选题「冰箱门封条发霉怎么清理」准备一条竖屏口播短视频工作流。
先按 chanjing-credentials-guard 检查本地凭证状态,不要在对话中索取或回显 AK/SK。
钩子和首镜口播不超过 20 字;subtitle_required 保持默认 false;cover_required 保持默认 true。
第 1 镜和最后一镜使用数字人,中间按官方分镜规则安排数字人和 AI 画面。
请先列举并对比公共音色与公共数字人,再把选定的 audio_man、person_id、figure_type 写入 workflow.json,不要直接取列表第一项。
不要使用未经授权的真人声音或面孔。
交付 video_plan、full_script、scenes 和可交给 run_render.py 的 workflow.json。
若环境、凭证和额度都已就绪,再询问是否执行渲染;未执行时不要把示例描述成已经得到成片。

一个符合硬限制的首镜示例可以是「门封条发黑别硬擦。」(10 个字,含标点)。它只用于说明字数边界,不是已经渲染成功的口播记录。

若只做渲染层,官方示例命令如下;执行前应使用你自己确认过的工作流文件和输出目录,并避免覆盖已有成果:

python scripts/run_render.py --input workflow.json --output-dir ./outputs/run1

该命令需在技能目录中运行,或正确设置仓库根环境变量。预期输出包括 final_one_click.mp4、workflow_result.json 以及中间文件目录 work/。这些是官方约定的输出名称,不是本文已经生成的文件。

下面是一份结构示例,ID 全部使用占位符,避免把文档里的示例编号当成当前可用的音色或形象:

{
  "topic": "冰箱门封条发霉怎么清理",
  "full_script": "门封条发黑别硬擦。先断电,用适量稀释的白醋擦拭密封条缝隙,再擦干并保持开门通风。清洁时不要用钢丝球或高浓度漂白剂硬刮。做好这三步,门封条更容易恢复干净。清洁完成后记得通电检查门封是否仍然贴合。",
  "audio_man": "<由 list_voices.py 对比后填写>",
  "person_id": "<由 list_figures.py 对比后填写>",
  "figure_type": "<与该形象 figures[].type 一致,例如 sit_body>",
  "subtitle_required": false,
  "cover_required": true,
  "ai_video_duration_sec": 10,
  "max_retry_per_step": 1,
  "scenes": [
    {
      "scene_id": 1,
      "voiceover": "门封条发黑别硬擦。",
      "use_avatar": true
    },
    {
      "scene_id": 2,
      "voiceover": "先断电,用适量稀释的白醋擦拭密封条缝隙,再擦干并保持开门通风。",
      "use_avatar": false,
      "ref_prompt": "<按 templates/storyboard_prompt.md 为这一镜单独撰写,不要抄用其他选题>"
    },
    {
      "scene_id": 3,
      "voiceover": "清洁时不要用钢丝球或高浓度漂白剂硬刮。",
      "use_avatar": true
    },
    {
      "scene_id": 4,
      "voiceover": "做好这三步,门封条更容易恢复干净。",
      "use_avatar": false,
      "ref_prompt": "<按官方模板为这一镜单独撰写>"
    },
    {
      "scene_id": 5,
      "voiceover": "清洁完成后记得通电检查门封是否仍然贴合。",
      "use_avatar": true
    }
  ]
}

这份 JSON 是教学结构示例。真实任务里,full_script 需要与各镜 voiceover 按 scene_id 规范化后拼得一致;AI 镜必须有符合模板的 ref_prompt。官方还要求:先定稿再渲染;TTS 默认整段一次再按镜切,超过约 4000 字才按分镜合并为尽量少的批次,run_render.py 的合并阈值是 3900 字,并在提交前校验单批不超过 4000 字;不要无必要地按句或按镜把 TTS 切得很碎。

六、渲染结果怎么读,成功和失败如何区分

官方输出 JSON 里,status 可能是 success、partial 或 failed。成功时通常还有 video_plan、script_result、storyboard_result.scenes[] 和 render_result。render_result 中可见成片路径、分镜视频信息以及 degrade_log;成功时 degrade_log 应为空列表。

需要特别区分:

  1. success 表示渲染按规则完成,本地应能找到 final_one_click.mp4。
  2. partial 表示当次没有形成成功成片,或过程中出现异常但仍写出了 workflow_result.json。它便于排错或人工续跑,不表示系统已经自动改用简化方案。
  3. failed 表示失败;官方要求尽量保留已经产出的文案和分镜,便于检查是选题、首镜字数、凭证、子技能还是封装环节出了问题。

成片默认按数字人分镜对齐为竖屏 1080×1920。AI 单段常见是 5 或 10 秒,长口播会拆成多段;ai_video_duration_sec 只能填 5 或 10,默认 10。model_code 可省略,文档中的缺省示例是环境变量或 minmax-h3-t2v。成片只保存在本地,技能本身不负责上传到平台。

七、验收清单

在你自己的环境里验收时,建议逐项记录“已检查”或“待测”,不要为了表格整齐全部打勾。未实际跑通的项目,不能写成亲测通过。

  1. 本地存在 credentials.json 的配置,但文件没有进入版本库或分享包;状态检查不在对话中回显完整密钥。
  2. ffmpeg 与 ffprobe 可调用。
  3. 选题去掉空白后不少于 5 个字,且不是无意义占位。
  4. 钩子和第一分镜 voiceover 都不超过 20 字。
  5. subtitle_required 为 false(除非你明确要求烧录字幕);cover_required 为 true(除非你明确改掉这一项)。
  6. 第 1 镜和最后一镜是数字人;audio_man、person_id、figure_type 来自当次列举和对比,而不是列表第一项或环境变量缓存。
  7. AI 镜的 ref_prompt 按官方模板单独撰写,没有直接套用其他选题。
  8. 若执行了 run_render.py,输出目录中检查 workflow_result.json 的 status、degrade_log 以及是否存在 final_one_click.mp4。
  9. 用 ffprobe 查看成片时长、分辨率和是否有音轨;时长应对照 TTS 总轨,而不是强制等于 duration_sec。
  10. 声音和面孔都来自公共库,或已获得授权的本人素材;没有把他人声音或面容用于克隆。

八、常见问题与限制

找不到技能时,先核对安装来源、目录名和宿主是否真的加载了 chanjing-one-click-video-creation,不要靠把文件夹改成其他产品名称来“修复”。若 run_render.py 找不到子技能,检查 SKILLS_DIR 等环境变量,以及解压后的仓库根是否完整,尤其是 chanjing-tts、chanjing-video-compose、chanjing-ai-creation。

凭证失败时,回到 guard 的状态检查和登录页,不要在聊天里重贴密钥。若 Token 过期,按官方方式刷新即可;完整密钥既不要写入文章,也不要写入工作流示例。

首镜超过 20 字、选题过短或分镜没有按官方结构安排,应在渲染前修正。文生视频失败时,官方建议检查是否可以提高 max_retry_per_step、缩短 ref_prompt、拆分镜头,并阅读 workflow_result.json;失败原因可能来自平台或模型,不能把一次失败直接写成“技能损坏”。

还需要记住几条限制:本地成片不会自动发布;AI 单段通常较短,长口播依赖多段拼接;成片时长可能与策划里的 duration_sec 不一致;技能会访问蝉镜 Open API,并按返回地址拉取媒体,你需要自行判断是否信任这些主机。缺少 ffmpeg / ffprobe、缺少有效订阅或中途任一步失败,都不会自动得到一条降级后的完整视频。

官方与原始资料