|
|
@@ -0,0 +1,164 @@
|
|
|
+# 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 端口)
|
|
|
+
|
|
|
+打开浏览器:<http://localhost: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) |
|
|
|
+
|
|
|
+
|