# Day 1 - ViGent 数字人口播系统开发

**日期**：2026-01-13  
**开发环境**：Windows 11 (本地开发) / Ubuntu 24.04 (服务器部署)  
**目标平台**：Dell PowerEdge R730 (2× RTX 3090 24GB)

---

## 🎯 今日目标

搭建数字人口播视频生成系统的完整框架，包括：
1. 后端 API (FastAPI)
2. 前端 UI (Next.js)
3. 视频生成流程 (TTS + FFmpeg)
4. 社交媒体发布功能

---

## 📦 项目初始化

### 后端项目结构
```
backend/
├── app/
│   ├── api/              # API 路由
│   │   ├── materials.py  # 素材管理
│   │   ├── videos.py     # 视频生成
│   │   └── publish.py    # 社交发布
│   ├── services/         # 核心服务
│   │   ├── tts_service.py      # EdgeTTS 配音
│   │   ├── video_service.py    # FFmpeg 视频合成
│   │   ├── lipsync_service.py  # MuseTalk 唇形同步
│   │   └── publish_service.py  # Playwright 自动发布
│   └── core/
│       └── config.py     # 配置管理
├── requirements.txt
└── .env.example
```

### 前端项目
- 使用 Next.js 14 + TypeScript + Tailwind CSS
- 主页面: 视频生成界面
- 发布页面: `/publish` 多平台发布管理

---

## 🔧 TTS + 视频合成

### EdgeTTS 集成
- 使用 `edge-tts` 库实现免费中文语音合成
- 支持多种音色: 云溪、云健、云扬、晓晓、晓伊

### FFmpeg 视频合成
```python
# 核心命令
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4
```

### 🐛 Bug 修复: asyncio subprocess 问题

**问题**：在 FastAPI BackgroundTasks 中调用 `asyncio.create_subprocess_exec` 导致 `NotImplementedError`

**原因**：BackgroundTasks 运行在非 asyncio 上下文中

**修复**：将 `_run_ffmpeg` 和 `_get_duration` 改为使用同步 `subprocess.run`

```python
# 修复前
result = await asyncio.create_subprocess_exec(...)

# 修复后
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, encoding='utf-8')
```

**状态**：✅ 已修复，视频生成成功

---

## 🎬 MuseTalk 唇形同步集成

### 架构设计
- GPU0: 其他服务
- GPU1: MuseTalk 唇形同步

### 代码实现
- `lipsync_service.py` 支持本地模式和远程 API 模式
- 通过 `CUDA_VISIBLE_DEVICES=1` 指定使用 GPU1
- 如未配置，自动跳过唇形同步

---

## 📱 社交媒体发布

### 支持平台
| 平台 | 状态 |
|------|------|
| 抖音 | ✅ 框架完成 |
| 小红书 | ✅ 框架完成 |
| 微信视频号 | ✅ 框架完成 |
| 快手 | ✅ 框架完成 |
| B站 | ✅ 框架完成 |

### 技术方案
- 使用 Playwright 进行浏览器自动化
- Cookie 管理实现免登录发布
- 前端提供账号管理和一键发布 UI

---

## 📚 文档产出

| 文件 | 说明 |
|------|------|
| `README.md` | 项目说明 |
| `DEPLOY_MANUAL.md` | 手动部署指南 |
| `deploy.sh` | 一键部署脚本 |
| `.env.example` | 环境配置模板 |

---

## ✅ 今日完成

1. ✅ FastAPI 后端框架搭建
2. ✅ EdgeTTS 语音合成服务
3. ✅ FFmpeg 视频合成服务
4. ✅ MuseTalk 唇形同步集成 (代码层面)
5. ✅ Next.js 前端 UI (视频生成 + 发布管理)
6. ✅ Playwright 社交媒体发布服务
7. ✅ 端到端视频生成测试通过
8. ✅ 服务器部署文档编写

---


### 下午调试记录 (Afternoon Debugging Session)

**1. 前端 "Undefined" 错误**
- **现象**：视频生成失败，弹窗显示 "undefined"。
- **原因**：
  1. 后端 `videos.py` 在异常捕获时未设置 `message` 字段，前端无法获取错误信息。
  2. 路径解析逻辑错误导致文件未找到。
- **修复**：
  - 后端补充 `tasks[task_id]["message"]` 字段。
  - 修复 `pathlib.Path` 引用缺失。

**2. 路径解析问题**
- **现象**：本地测试时无法找到素材文件。
- **原因**：Windows 本地路径 (`d:\...`) 与相对路径混合使用，且 `BASE_DIR` 指向了错误的父级目录。
- **修复**：
  - `materials.py` 所有返回路径改为相对路径 (`uploads/materials/xxx`)。
  - `videos.py` 增加智能路径解析：非绝对路径自动拼接 `BASE_DIR`。
  - `config.py` 调整 `BASE_DIR` 指向项目根目录。

**3. 语法错误修复**
- **现象**：`page.tsx` 出现 `Parsing ecmascript source code failed`。
- **原因**：调试代码逻辑错误地插入到了 JSX渲染块中。
- **修复**：完全重写 `page.tsx`，规范化代码结构，增加 "Raw Response" 调试面板。

**4. 本地 Fallback 逻辑验证**
- **现象**：进度条从 5% 直接跳到 100%。
- **原因**：本地 MuseTalk 未启用，系统触发 `fallback` 逻辑（仅复制文件）。
- **验证**：符合预期行为，确保了无 GPU 环境下的流程连通性。

---

## 📋 明日计划

1. 在服务器上部署系统
2. 下载 MuseTalk 模型权重
3. 测试完整唇形同步流程
4. 优化前端 UI 交互体验
