readme.md 5.88 KB
Newer Older
zhyh2010's avatar
zhyh2010 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# DCU Codec Pipeline Benchmark

DCU编解码性能测试工具 - 用于测试和评估不同编解码器后端的视频处理性能。

## 项目简介

该项目是DCU性能压测工具codecbenchmark的python实现,可作为DCU上MacCodecSDK以及ffmpeg的python api参考

## 主要功能

### 核心特性
-**多后端支持**:支持 CUDA、CUVID、V4L2、VAAPI 等多种编解码后端
-**编解码测试**:支持 H264、HEVC、VP9、AVS2、MJPEG 等格式的编解码性能测试
-**多实例并发**:支持多线程并发测试,评估系统并发处理能力
-**多分辨率支持**:支持从 720p 到 8K 的多种分辨率测试
-**位深测试**:支持 8-bit 和 10-bit 位深测试
-**详细报告**:生成 CSV 格式的性能测试报告

### 支持的编解码器

**解码器:**
- H264 (h264_cuvid/h264_v4l2m2m)
- HEVC (hevc_cuvid/hevc_v4l2m2m)
- VP9 (vp9_cuvid/vp9_v4l2m2m)
- AVS2 (avs2_cuvid/avs2_v4l2m2m)
- MJPEG (mjpeg_cuvid/mjpeg_v4l2m2m)

**编码器:**
- H264_NVENC / H264_VAAPI
- HEVC_NVENC / HEVC_VAAPI
- VP9_NVENC / VP9_VAAPI
- MJPEG_NVENC / MJPEG_VAAPI

## 环境要求

与MacCodec环境要求一致

### 依赖安装

```bash
pip install -r requirements.txt
```

主要依赖:
- ffmpeg-python
- MacCodecSDK

## 项目结构

其中测试视频文件为方便clone测试仅包含一个文件,若想参考codecBenchmark全面测试可将所有文件放入同目录下,并取消代码中的注释
```
dcu-codec-pipeline-py/
├── codecbenchmark-py/
│   ├── video_benchmark/          # 测试视频文件目录
│   │   └── sample_1920x1080_30fps_8bit.h264
│   ├── benchmark_multi_inst.py   # 多实例测试模块
│   ├── video_benchmark.py        # 主测试脚本
│   ├── readme.md                 # 项目说明
│   └── requirements.txt          # 依赖列表
├── video_cuda_decode_benchmark.csv  # 解码测试结果
└── video_cuda_encode_benchmark.csv  # 编码测试结果
```

## 使用方法

### 基本用法

运行解码和编码性能测试:

```bash
# 使用 CUDA 后端,默认 6 线程
python video_benchmark.py

# 指定后端和线程数
python video_benchmark.py -c cuda -n 8
python video_benchmark.py -c vaapi -n 4
python video_benchmark.py -c v4l2 -n 6
```

### 命令行参数

```bash
usage: video_benchmark.py [-h] [-c {cuda,cuvid,v4l2,vaapi}] [-n THREADS]

可选参数:
  -h, --help            显示帮助信息
  -c, --codec           编解码后端类型
                        可选值: cuda, cuvid, v4l2, vaapi
                        默认值: cuda
  -n, --threads         并发进程数量
                        默认值: 6
```

## 测试配置

### 解码测试文件

项目预配置了以下测试文件:
- `sample_1920x1080_30fps_8bit.h264` - 1080p 30fps H264 8bit

### 编码测试配置

支持多种分辨率和格式的编码测试:

| 分辨率 | 格式 | 位深 | 帧数 |
|--------|------|------|------|
| 1280x720 | H264/HEVC | 8-bit | 677 |
| 1920x1080 | H264/HEVC/JPEG | 8-bit | 812-2174 |
| 3840x2160 | H264/HEVC/JPEG | 8-bit | 812 |
| 7680x4320 | H264/HEVC | 8-bit | 77 |
| 1280x720 | HEVC | 10-bit | 677 |
| 1920x1080 | HEVC | 10-bit | 812 |
| 3840x2160 | HEVC | 10-bit | 812 |
| 4096x2160 | JPEG | 8-bit | 1 |
| 8192x4320 | JPEG | 8-bit | 1 |

## 输出结果

### CSV 报告文件

测试完成后会生成两个 CSV 文件:

1. **解码测试报告** (`video_{codec}_decode_benchmark.csv`)
   ```csv
   Decode,Bit Depth,Resolution,Fps/(BMZ 1 Core),Fps/(BMZ 6 Processes)
   H264,8,1920x1080,245.67,1234.56
   ```

2. **编码测试报告** (`video_{codec}_encode_benchmark.csv`)
   ```csv
   Encode,Bit Depth,Resolution,Fps/(BMZ 1 Core)
   H264,8,1920x1080,189.34
   HEVC,10,3840x2160,95.67
   ```

### 性能指标说明

- **Fps/(BMZ 1 Core)**: 单核心/单进程处理的帧率(FPS)
- **Fps/(BMZ N Processes)**: N 个并发进程总处理的帧率(FPS)

## 测试流程

1. **解压测试文件**:自动从 `video_benchmark.zip` 解压测试视频
2. **解码测试**
   - 单实例解码性能测试
   - 多实例并发解码测试
3. **编码测试**
   - 将解码后的 YUV 数据重新编码
   - 测试不同格式和分辨率的编码性能
4. **结果聚合**
   - 统计平均性能数据
   - 生成 CSV 报告
5. **清理临时文件**:自动清理测试过程中生成的临时文件

## 示例输出

```
Processing: sample_1920x1080_30fps_8bit.h264 (Idx: 1)
  -> Single instance decode: 245.67 FPS
  -> Multi instance (6 processes): 1234.56 FPS
Encoding: sample_1920x1080_30fps_8bit.h264 -> H264
  -> Encode performance: 189.34 FPS

Aggregating results...
Benchmark finished.
```

## 注意事项

1. **文件准备**:确保测试视频文件位于 `video_benchmark/` 目录或提供 `video_benchmark.zip`
2. **权限要求**:使用 VAAPI/V4L2 后端时可能需要访问 `/dev/dri/renderD128` 设备文件
3. **性能影响**:多实例测试会占用较多系统资源,建议根据硬件配置调整线程数
4. **日志文件**:测试过程会生成临时日志文件,测试完成后自动清理

## 故障排除

### 常见问题

**问题 1**: `FFmpeg command construction failed`
- 检查 FFmpeg 是否正确安装
- 确认选择的编解码后端是否受支持

**问题 2**: `Unknown encoder for XXX`
- 确认 FFmpeg 编译时启用了相应的编码器
- 检查硬件驱动是否正确安装

**问题 3**: 多实例测试性能异常
- 检查系统资源(GPU、内存)是否充足
- 减少并发线程数 `-n` 参数

### 日志调试

测试过程中的详细日志会保存在:
- 解码日志:`video_benchmark/{filename}.log`
- 多实例日志:`video_benchmark/{filename}_multi.log`
- 编码日志:`video_benchmark/{filename}_encode.log`

## 许可证

本项目仅供性能测试和评估使用。

## 联系方式

如有问题或建议,请提交 Issue 或联系项目维护者。

---

**版本**: 1.0  
**最后更新**: 2026-02-26