# video-workflow · 抖音 AI 视频生成系统 一个基于 **Angular 21 + Express** 的 AI 视频创作平台,集成数字人合成、图生视频、动作迁移、素材合成、主题生视频、语音合成(含音色复刻 / 音色选择弹窗)等多条生成 Pipeline。 > 项目名:`tik-tok`(package.json)/ 仓库名:`video-workflow` --- ## ✨ 功能总览 按"Pipeline 注册中心"模式组织(见 `src/app/pipelines/pipeline-registry.ts`),目前已上线/在迭代的 Pipeline: | Pipeline | 路由 | 输入 | 状态 | |---|---|---|---| | **数字人合成** | `digital-human` | 参考视频 / 形象图 + 脚本 + 音色 | ✅ stable | | **标准视频生成** | `video-generation` | 原始视频 + 改造指令 | 🟡 beta | | **图生视频** | `image-to-video` | 图片 + 提示词 + 时长 | 🟡 beta | | **动作迁移** | `action-transfer` | 角色图 + 参考动作视频(即梦 Actor v2) | 🟡 beta | | **素材合成视频** | `asset-remix` | 3-10 张图片 + 主题 + 音色 | 🟡 beta | | **主题生视频** | `topic-to-video` | 一句话主题(LLM 拆分镜 → 文生图 → TTS → ffmpeg 全自动拼接) | 🟡 beta | **辅助模块** - 抖音视频搜索 / 监控 / 任务管理 / 历史 / 结果库 - 语音合成(音色复刻 + 官方音色库选择弹窗 + 试听) - 数字人形象准备(normalize / benchmark) --- ## 🏗️ 技术栈 **前端** - Angular 21(Standalone Components + Signals) - TypeScript 5.9 / RxJS 7.8 - 设计系统:自研 `dh-*` 组件类(深色 / 浅色双主题) **后端** - Node.js + Express 4 - multer(文件上传)、cors、axios - 数据:本地 JSON 文件(`data/*.json`)+ ffmpeg 处理视频 **外部服务** - 火山引擎(豆包 TTS、即梦文生图、即梦 Actor v2 动作迁移) - TikHub(抖音数据 API) - fmode 后端代理服务(`server.fmode.cn`) --- ## 🚀 快速开始 ### 1. 安装依赖 ```bash npm install ``` ### 2. 启动开发环境(同时启动前后端) ```bash npm run dev ``` `concurrently` 会同时启动: - 后端:`node server.js`(默认 7337 端口) - 前端:`ng serve --proxy-config proxy.conf.json`(默认 4200 端口) 打开浏览器: ### 3. 分开启动(可选) ```bash npm run server # 仅后端 npm start # 仅前端 npm run start:dev # 前端 + 监听 0.0.0.0(局域网调试) ``` ### 4. 构建生产包 ```bash npm run build # 输出到 dist/ ``` --- ## 📁 目录结构 ``` video-workflow/ ├── server.js # Express 后端主文件 ├── proxy.conf.json # ng serve 代理配置(/api → tikhub、/backend → 本地后端等) ├── data/ # 后端运行时数据(history.json / tasks.json / videos/ ...) ├── src/ │ └── app/ │ ├── app.ts # 主组件(包含全局 UI 状态、tab 切换、各模块入口) │ ├── app.html / app.css # 主模板与全局样式 │ ├── components/ # 可复用组件 │ │ ├── app-sidebar/ │ │ ├── digital-human-form/ │ │ ├── portrait-prepare/ │ │ ├── recent-task-pill/ │ │ ├── app-assistant/ │ │ └── voice-picker/ # 音色选择弹窗(音色库 + 我的音色 + 试听) │ ├── pages/ │ │ ├── home/ │ │ └── pipelines/ # 各 Pipeline 独立页面 │ │ ├── digital-human/ │ │ ├── image-to-video/ │ │ ├── action-transfer/ │ │ ├── asset-remix/ │ │ └── topic-to-video/ │ ├── pipelines/ │ │ ├── pipeline-registry.ts # Pipeline 注册中心(添加新模式只需改这里) │ │ └── composite-sse.ts │ ├── services/ # HTTP / 业务服务 │ └── pipes/ # 时间、文件大小等格式化管道 └── public/ # 静态资源 ``` --- ## 🔌 代理 / 上游服务(`proxy.conf.json`) | 前端路径 | 上游 | 用途 | |---|---|---| | `/api` | `https://api.tikhub.io` | 抖音数据 API | | `/jimeng` | `https://server.fmode.cn/api/volcengine/jimeng` | 即梦(图生视频 / 动作迁移) | | `/parse` | `https://server.fmode.cn/parse` | Parse 后端(音色档案等) | | `/functions` | `https://server.fmode.cn/api/functions` | fmode Functions | | `/backend` | `http://localhost:3000` | 本地后端(如有需要) | --- ## 🎙️ 语音合成模块说明 - **音色复刻**:上传一段参考音频 → 调火山 voice_clone → 获得 `timbreId` - **音色选择弹窗**(`components/voice-picker`): - **音色库 Tab**:豆包 2.0 模型 25 个精选官方音色,按场景分组(通用/角色扮演/有声阅读/视频配音/客服/多语种),支持关键词搜索 - **我的音色 Tab**:用户复刻成功的音色 - **试听**:点 ▶ 实时调 TTS 合成固定文本,内存缓存避免重复消耗 - **合成接口**:根据音色来源自动切换参数 - 复刻音色:`timbreId` - 官方音色:`volcengine_voice_type` + `x_api_resource_id: seed-tts-2.0`(`_uranus_bigtts` 后缀必须用 2.0 资源) 参考文档:`docs/语音合成/tts.md`、`docs/语音合成/音色列表.md`(本地参考,已加入 `.gitignore` 不入库) --- ## 📦 npm scripts | 脚本 | 说明 | |---|---| | `npm run dev` | 同时启动前后端(推荐开发) | | `npm run server` | 仅启动后端 (`node server.js`) | | `npm start` | 仅启动前端 (`ng serve`) | | `npm run start:dev` | 前端 + 监听 0.0.0.0(局域网) | | `npm run build` | 生产构建 → `dist/` | | `npm run watch` | 开发模式 watch 构建 | | `npm test` | 运行测试(vitest) |