Files
video-create/.claude/skills/video-from-script/references/account-system.md
sion123 18fce1b5a1 feat(video-from-script): 添加 TTS 音色管理和解析功能
- 在 config.json 中添加 `ttsVoices` 音色库,支持音色名称到 ID 的映射
- 实现 `resolveVoice` 函数,将音色名称解析为实际 ID
- 更新账号系统和批量管道,支持通过音色名称配置 TTS 语音
- Excel 导入和 CLI 参数新增音色字段,支持按行指定不同音色
2026-05-08 23:53:37 +08:00

8.8 KiB
Raw Blame History

账号系统规范

每个账号独立管理视觉风格、提示词策略和 CapCut 配置。 视觉风格直接内嵌在 prompts/*.md 中,无需单独的 styles/ 目录。


目录结构

accounts/                             # 项目根目录下
├── _template/                    # 新账号模板(含通用 prompt 模板)
│   ├── account.json
│   ├── prompts/                  # 通用提示词模板(生成账号 prompt 的基础)
│   │   ├── 通用分镜.md
│   │   ├── 通用图片.md
│   │   └── 通用视频.md
│   └── references/               # 参考图目录
│       └── .gitkeep
└── {account}/                    # 用户创建的账号(目录名 = account.json 的 id
    ├── account.json
    ├── prompts/                  # 账号专属提示词(基于通用模板 + 风格注入生成)
    │   ├── 分镜.md               # 口播文案 → 分镜表
    │   ├── 图片提示词.md          # shotDesc → imagePrompt
    │   └── 视频提示词.md          # shotDesc → videoPrompt
    └── references/               # 参考图(生图时作为参考输入)
        ├── ref_001.png
        └── ref_002.png

account.json 字段说明

{
  "id": "tech-talk",
  "name": "科技解说",
  "description": "科技类短视频账号,深色背景,赛博朋克风格",
  "pipeline": "image-video",
  "defaultFormat": "9:16",
  "imageModel": "gemini",
  "videoModel": "veo3-fast",
  "batchSize": 30,
  "styles": {
    "赛博风格": {
      "references": [
        { "file": "cyber_ref.png", "url": "https://oss.../cyber_ref.png" }
      ]
    }
  },
  "ttsVoice": "斯内普",
  "ttsInstruction": "用冷静理性的男性声音朗读,语速适中",
  "storyboardPrompt": "prompts/分镜.md",
  "imageStylePrompt": "prompts/图片提示词.md",
  "videoStylePrompt": "prompts/视频提示词.md",
  "references": [],
  "capcut": {
    "effects": ["录制边框 III"],
    "filter": "质感暗调:30",
    "subtitleStyle": {
      "fontSize": 24,
      "color": "#FFFFFF",
      "highlightColor": "#FF6B35",
      "bold": true,
      "hasShadow": true,
      "shadowColor": "#000000",
      "shadowAlpha": 0.8,
      "transformY": -380,
      "alignment": 1,
      "inAnimation": "淡入",
      "outAnimation": "淡出"
    },
    "keywordStyle": {
      "textEffect": "简约白色黑边花字",
      "fontSize": 60,
      "color": "#FFFFFF",
      "bold": true,
      "transformY": 0,
      "inAnimation": "打字机效果",
      "outAnimation": "模糊淡出",
      "inAnimDuration": 300000,
      "outAnimDuration": 300000
    },
    "transitions": {
      "strategy": "rhythm",
      "default": { "name": "闪白", "duration": 150000 },
      "byPosition": {
        "hook":     { "name": "闪白", "duration": 100000 },
        "keypoint": { "name": "闪白", "duration": 120000 },
        "body":     { "name": "溶解", "duration": 300000 },
        "closing":  { "name": "闪黑", "duration": 200000 }
      }
    },
    "defaultBGM": ""
  }
}
字段 类型 说明
id string 账号唯一标识(与目录名一致)
name string 账号显示名
description string 一句话描述
pipeline string 流水线类型:image-video(默认)
defaultFormat string 默认画幅(9:16 / 16:9 / 1:1 / 4:3
imageModel string 默认图片模型(gemini / mj
videoModel string 默认视频模型(veo3-fast / grok-video-3 / kling
batchSize number 默认批量生成数量
styles object 命名风格预设,每项含 references 数组
ttsVoice string TTS 音色名称(如"斯内普")或音色 ID留空用 config.json 全局默认。可用音色见 config.json 的 ttsVoices
ttsInstruction string TTS 语气指令(描述期望的语气、语速、情感)
storyboardPrompt string 分镜提示词模板路径(相对于账号目录)
imageStylePrompt string 图片提示词模板路径(相对于账号目录)
videoStylePrompt string 视频提示词模板路径(相对于账号目录)
references array 默认参考图列表(每项含 fileurl),已被 styles 取代
capcut.effects string[] CapCut 特效名称列表
capcut.filter string CapCut 滤镜,格式 "名称:强度"(如 "质感电影:40"
capcut.subtitleStyle object 字幕样式font/字体、fontSize、color、highlightColor、bold、transformY、inAnimation/outAnimation
capcut.keywordStyle object 关键字氛围词样式textEffect 花字、fontSize、color、动画留空或删除则关闭
capcut.transitions object 转场配置strategy + default + byPosition + byDirector
capcut.kenBurns object Ken Burns 关键帧动画(消除图片幻灯片感),见下方
capcut.defaultBGM string 默认背景音乐 URL

kenBurns 字段

Ken Burns 关键帧动画:为每张图片添加慢速连续缩放/平移,消除幻灯片感。速率驱动,自动适配片段时长(短片段缩放少,长片段缩放多)。

{
  "kenBurns": {
    "enabled": true,
    "default": { "startScale": 1.0, "scaleRate": 0.8, "panXRate": 0, "panYRate": 0 },
    "byDirector": {
      "tarantino": { "startScale": 1.0, "scaleRate": 0.9, "panXRate": 0, "panYRate": -0.3 },
      "kitano":    { "startScale": 1.03, "scaleRate": 0.5, "panXRate": 0.4, "panYRate": 0 },
      "fincher":   { "startScale": 1.0, "scaleRate": 0.4, "panXRate": 0, "panYRate": 0 }
    }
  }
}
参数 类型 说明
enabled boolean false 禁用 Ken Burns默认 true
default object 默认 Ken Burns 参数(无 directorRef 匹配时使用)
byDirector object 按 directorRef 覆盖key 为导演名小写)
startScale number 起始缩放1.0=原始1.03=略微放大)
scaleRate number 缩放速率(%/秒),如 0.8 = 每秒放大 0.8%。自动乘以片段时长计算 endScale上限 1.20
panXRate number 水平平移速率(单位/秒),正值右移。自动乘以片段时长
panYRate number 垂直平移速率(单位/秒),正值下移。自动乘以片段时长

创建账号时 Agent 应询问

  • 是否需要 Ken Burns 镜头动画?(图片成片必开,视频模式自动跳过)
  • 镜头风格偏好:微缩放 / 平移+缩放 / 仅缩放

提示词模板prompts/

每个账号在 prompts/ 目录下维护三个子 Agent 提示词模板:

文件 用途 Step
分镜.md 口播文案 → 分镜表shotDesc/script/duration/directorRef Step 1
图片提示词.md shotDesc + directorRef → imagePrompt Step 2-A
视频提示词.md shotDesc + directorRef → videoPrompt Step 3-A

这些文件定义了子 Agent 的角色、入参、出参、词库和示例。路径在 account.json 中以相对路径引用Agent 读取 account.json 后自动定位。

生成方式

账号的 prompts 基于 _template/prompts/通用*.md 生成:

  • 通用模板提供方法论骨架(切割规则、导演词库、写法规范、输出格式、质量自检)
  • 创建账号时通过 Q&A 收集风格信息,注入到骨架的固定位置
  • 详细流程见 account-creation.md

参考图references/

参考图用于生图时的风格引导Gemini 图生图 / MJ --sref

管理流程

  1. 用户将参考图放入 accounts/{id}/references/ 目录
  2. Agent 上传到 OSSnode scripts/oss-upload.js accounts/{id}/references/{图片文件}
  3. 将返回的 URL 写入 account.json 的 references 数组

创建新账号

Q&A 创建(推荐)

用户说"创建账号"或"新账号"时Agent 按 account-creation.md 的结构化问答流程执行:

  1. 逐项询问:账号身份 → 内容 DNA → 视觉身份 → 技术配置
  2. 基于通用模板 + 用户回答生成 3 个 prompt 文件 + account.json
  3. 校验完整性

CLI 创建(辅助)

node scripts/pipeline.js create-account \
  --id military \
  --name "军事账号" \
  --desc "军事主题短视频,暗黑漫画风格" \
  --video-model veo3-fast-frames \
  --references ./ref1.png,./ref2.png

自动完成:创建目录 → 生成 account.json → 复制参考图 → 上传 OSS → 回写 URL。

注意CLI 创建只生成目录结构和 account.json 骨架prompt 文件仍需通过 Q&A 流程或手动创建。

校验账号

node scripts/pipeline.js validate-account --account military

检查id 匹配、必填字段、prompts 模板存在、参考图完整性、OSS URL 有效。