# 批量视频导出脚本

这个脚本用于批量处理项目ID，生成剪辑计划并调用导出接口，实现自动化的视频处理流程。

## 功能特性

- ✅ 批量处理多个项目ID
- ✅ 自动生成剪辑计划（调用 `/edit-plan/generate-by-project` 接口）
- ✅ 自动调用导出接口（调用 `/api/export/stream` 接口）
- ✅ 支持并发处理，提高效率
- ✅ 完整的错误处理和重试机制
- ✅ 实时进度跟踪和日志记录
- ✅ 生成详细的处理报告
- ✅ 支持从命令行或文件读取项目ID

## 文件说明

- `batch-export.js` - JavaScript版本的主脚本（推荐使用）
- `batch-video-export.ts` - TypeScript版本的主脚本
- `batch-config.example.env` - 配置文件示例
- `projects.example.txt` - 项目ID列表文件示例

## 快速开始

### 1. 配置环境变量

复制配置文件并填入实际值：

```bash
cp scripts/batch-config.example.env scripts/batch-config.env
```

编辑 `batch-config.env` 文件：

```env
# API配置
API_BASE_URL=https://your-api-domain.com
AUTH_TOKEN=your-actual-auth-token
USER_ID=your-actual-user-id

# 处理配置
CONCURRENCY=3          # 并发处理数量
MAX_RETRIES=3          # 最大重试次数
RETRY_DELAY=5000       # 重试间隔（毫秒）

# 导出配置
EXPORT_QUALITY=standard # 导出质量: standard | high | ultra

# 输出配置
OUTPUT_DIR=./batch-export-output  # 输出目录
```

### 2. 准备项目ID列表

**方法一：命令行参数**
```bash
node scripts/batch-export.js --projects "project-001,project-002,project-003"
```

**方法二：文件列表**

创建项目ID文件：
```bash
cp scripts/projects.example.txt scripts/projects.txt
```

编辑 `projects.txt` 文件：
```text
project-001
project-002
project-003
project-004
# project-005  # 注释行会被忽略
```

然后运行：
```bash
node scripts/batch-export.js --file scripts/projects.txt
```

### 3. 运行脚本

加载环境变量并运行：

```bash
# 加载配置文件
source scripts/batch-config.env

# 运行脚本
node scripts/batch-export.js --projects "project-001,project-002"
```

或者一次性运行：

```bash
API_BASE_URL=https://your-api.com AUTH_TOKEN=your-token node scripts/batch-export.js --projects "project-001,project-002"
```

## 使用方法

### 命令行选项

```bash
# 使用项目ID参数
node scripts/batch-export.js --projects "id1,id2,id3"

# 使用文件列表
node scripts/batch-export.js --file projects.txt
```

### 环境变量配置

| 变量名 | 说明 | 默认值 | 必填 |
|--------|------|--------|------|
| `API_BASE_URL` | API基础URL | - | ✅ |
| `AUTH_TOKEN` | 认证Token | - | ✅ |
| `USER_ID` | 用户ID | - | ✅ |
| `CONCURRENCY` | 并发处理数量 | 3 | ❌ |
| `MAX_RETRIES` | 最大重试次数 | 3 | ❌ |
| `RETRY_DELAY` | 重试间隔(毫秒) | 5000 | ❌ |
| `EXPORT_QUALITY` | 导出质量 | standard | ❌ |
| `OUTPUT_DIR` | 输出目录 | ./batch-export-output | ❌ |

## 工作流程

脚本会按以下步骤处理每个项目：

1. **生成剪辑计划**
   - 调用 `/edit-plan/generate-by-project` 接口
   - 支持自动重试（最多10分钟，8秒间隔）
   - 等待剪辑计划生成完成

2. **构建导出请求**
   - 解析剪辑计划中的时间线信息
   - 构建符合API规范的导出请求数据
   - 包含视频片段、字幕、转场等信息

3. **调用导出接口**
   - 调用 `/api/export/stream` 流式导出接口
   - 实时处理SSE事件流
   - 监控导出进度

4. **轮询导出状态**
   - 如果SSE未返回完整结果，自动轮询进度
   - 调用 `/api/export/task/{taskId}/progress` 接口
   - 等待导出完成并获取视频URL

## 输出文件

脚本运行后会在输出目录生成以下文件：

- `batch-export-{timestamp}.log` - 详细日志文件
- `batch-report-{timestamp}.json` - 处理结果报告

### 报告格式示例

```json
{
  "timestamp": "2023-12-07T10:30:00.000Z",
  "config": {
    "concurrency": 3,
    "maxRetries": 3,
    "exportQuality": "standard"
  },
  "results": {
    "total": 5,
    "completed": 4,
    "failed": 1,
    "errors": [
      {
        "projectId": "project-005",
        "error": "剪辑计划生成失败"
      }
    ]
  },
  "projects": [
    {
      "projectId": "project-001",
      "status": "completed",
      "videoUrl": "https://example.com/video1.mp4",
      "duration": 125.5
    }
  ]
}
```

## 错误处理

脚本包含完善的错误处理机制：

### 自动重试
- 剪辑计划生成失败：最多重试10分钟
- 导出接口调用失败：根据配置重试
- 网络错误：自动重试

### 错误类型
- **剪辑计划生成失败**：API返回错误或超时
- **导出接口错误**：请求格式错误或服务器错误
- **网络连接错误**：网络不稳定或服务不可用
- **认证错误**：Token无效或过期

### 故障恢复
- 单个项目失败不影响其他项目处理
- 详细错误日志帮助定位问题
- 支持断点续传（可以只处理失败的项目）

## 性能优化

### 并发控制
- 默认并发数为3，可根据服务器性能调整
- 避免同时处理太多项目导致服务器压力

### 内存管理
- 流式处理SSE响应，避免内存积累
- 及时释放不需要的数据

### 网络优化
- 合理的重试间隔，避免频繁请求
- 长连接处理SSE流

## 故障排除

### 常见问题

1. **认证失败**
   ```
   错误：HTTP 401: Unauthorized
   解决：检查 AUTH_TOKEN 是否正确
   ```

2. **API地址错误**
   ```
   错误：ENOTFOUND your-api-domain.com
   解决：检查 API_BASE_URL 是否正确
   ```

3. **剪辑计划生成超时**
   ```
   错误：获取剪辑计划超时，已重试75次
   解决：检查项目状态，可能需要更长等待时间
   ```

4. **Node.js版本问题**
   ```
   错误：fetch is not defined
   解决：升级到 Node.js 18+ 或安装 node-fetch
   ```

### 调试技巧

1. **查看详细日志**
   ```bash
   tail -f batch-export-output/batch-export-*.log
   ```

2. **测试单个项目**
   ```bash
   node scripts/batch-export.js --projects "single-project-id"
   ```

3. **检查API连通性**
   ```bash
   curl -H "Authorization: Bearer $AUTH_TOKEN" $API_BASE_URL/health
   ```

## 高级用法

### 自定义配置

可以通过修改脚本中的配置对象来自定义更多选项：

```javascript
const config = {
  apiBaseUrl: process.env.API_BASE_URL,
  token: process.env.AUTH_TOKEN,
  // 自定义超时时间
  requestTimeout: 30000,
  // 自定义User-Agent
  userAgent: 'BatchVideoExporter/1.0',
  // 其他配置...
};
```

### 集成到CI/CD

可以将脚本集成到自动化流程中：

```yaml
# GitHub Actions 示例
- name: Batch Export Videos
  env:
    API_BASE_URL: ${{ secrets.API_BASE_URL }}
    AUTH_TOKEN: ${{ secrets.AUTH_TOKEN }}
    USER_ID: ${{ secrets.USER_ID }}
  run: |
    node scripts/batch-export.js --file projects.txt
```

## 注意事项

1. **资源使用**：批量处理会消耗较多服务器资源，建议在低峰期运行
2. **网络稳定性**：确保网络连接稳定，避免长时间处理中断
3. **存储空间**：确保有足够的存储空间保存日志和报告文件
4. **API限制**：注意API的调用频率限制，避免被限流
5. **数据备份**：重要项目建议先备份，避免处理过程中数据丢失

## 许可证

MIT License
