Skip to content

Commit 3a000bd

Browse files
author
global_name
committed
Day 109: VideoStudio - 专业视频流分析工具
1 parent bf15590 commit 3a000bd

3 files changed

Lines changed: 287 additions & 0 deletions

File tree

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
---
2+
layout: post
3+
title: "Day 109: VideoStudio - 专业视频流分析工具"
4+
author: iosdevlog
5+
date: 2026-05-29 00:00:00 +0800
6+
category: [AI, Video, C++]
7+
tags: [Video Analysis, Qt, FFmpeg, H.264, HEVC, AV1, StreamEye]
8+
---
9+
10+
# Day 109: VideoStudio - 专业视频流分析工具
11+
12+
![C++](https://img.shields.io/badge/C++-17-blue)
13+
![Qt](https://img.shields.io/badge/Qt-6.11.0-green)
14+
![FFmpeg](https://img.shields.io/badge/FFmpeg-7.1.1-orange)
15+
![License](https://img.shields.io/badge/License-MIT-success)
16+
17+
> Build Your Own X With AI 系列:用 C++ 和 Qt 打造 Elecard StreamEye 级别的视频分析工具
18+
19+
## 项目简介
20+
21+
VideoStudio 是一款专业级视频流分析工具,灵感来自 [Elecard StreamEye](https://www.elecard.com/products/video-analysis/stream-eye)。它使用 C++ Qt 6 和 FFmpeg 构建,提供多编解码器支持、码率可视化、逐帧分析等专业功能。
22+
23+
![VideoStudio 主界面](/assets/images/2026-05-29/day-109-1.png)
24+
25+
*图 1:VideoStudio 主界面,展示帧大小分布、GOP 结构和运动矢量叠加*
26+
27+
## 核心功能
28+
29+
### 多编解码器支持
30+
31+
- **H.264/AVC** - 最广泛使用的视频编码标准
32+
- **H.265/HEVC** - 高效率视频编码
33+
- **VP9** - Google 开源编码格式
34+
- **AV1** - 下一代开源编码格式
35+
- **MPEG-1/2** - 传统广播标准
36+
37+
### 专业可视化
38+
39+
**帧大小分布图**(Frame Size Distribution):
40+
- 柱状图显示每帧大小(字节)
41+
- 颜色区分帧类型:红色=I帧,蓝色=P帧,绿色=B帧
42+
- 黄色线标记关键帧位置
43+
- 红色竖线指示当前播放位置
44+
45+
**比特流分布图**(Bitstream Distribution):
46+
- 更直观的码率波动展示
47+
- 清晰显示 I/P/B 帧的周期性模式
48+
49+
### 运动矢量与块分区叠加
50+
51+
- **运动矢量 (Motion Vectors)**:绿色箭头显示宏块的运动方向和幅度
52+
- **块分区 (Partitions/Blocks)**:黄色网格显示编码块的划分方式
53+
- **帧类型信息 (Frame Type Info)**:实时显示当前帧类型(I/P/B 帧)
54+
55+
![VideoStudio 比特流视图](/assets/images/2026-05-29/day-109-2.png)
56+
57+
*图 2:比特流分布视图 + 缩略图导航栏*
58+
59+
### GOP 结构可视化
60+
61+
底部面板以缩略图形式展示整个 GOP(图像组)结构:
62+
- I 帧标记为红色边框
63+
- P 帧标记为蓝色边框
64+
- B 帧标记为绿色边框
65+
- 绿色连线显示参考关系
66+
67+
### 缩略图导航
68+
69+
- 底部缩略图栏快速定位任意帧
70+
- 当前帧高亮显示
71+
- 点击即可跳转
72+
73+
## 技术架构
74+
75+
```
76+
VideoStudio/
77+
├── src/
78+
│ ├── main.cpp # 入口点
79+
│ ├── mainwindow.h/cpp # 主窗口
80+
│ ├── core/ # 核心引擎
81+
│ │ ├── videodecoder.h/cpp # FFmpeg 封装
82+
│ │ └── framedata.h/cpp # 数据结构
83+
│ └── widgets/ # 自定义控件
84+
│ ├── videooutput.h/cpp # 视频显示
85+
│ └── barchart.h/cpp # 条形图
86+
├── CMakeLists.txt # 构建配置
87+
└── resources/ # 图标和资源
88+
```
89+
90+
### 技术栈
91+
92+
| 组件 | 版本 |
93+
|------|------|
94+
| Qt | 6.11.0 |
95+
| FFmpeg | 7.1.1 |
96+
| CMake | 3.16+ |
97+
| C++ 标准 | C++17 |
98+
| 目标平台 | macOS 10.15+ |
99+
100+
## 核心模块解析
101+
102+
### VideoDecoder(视频解码器)
103+
104+
FFmpeg 的 C++ 封装层,负责:
105+
- 视频文件解封装(demux)
106+
- 视频解码(decode)
107+
- 帧元数据提取(PTS, DTS, 类型, 大小, QP值)
108+
109+
### FrameData(帧数据)
110+
111+
存储和管理每一帧的元信息:
112+
113+
```cpp
114+
struct FrameInfo {
115+
int index; // 帧索引
116+
int64_t pts; // 显示时间戳
117+
int64_t dts; // 解码时间戳
118+
FrameType type; // I/P/B 帧
119+
size_t size; // 帧大小(字节)
120+
int qp; // 量化参数
121+
};
122+
```
123+
124+
### BarChart(条形图)
125+
126+
自定义 Qt 控件,实现:
127+
- 高性能渲染数百帧数据
128+
- 鼠标悬停显示详细信息
129+
- 点击跳转到对应帧
130+
- 支持缩放和平移
131+
132+
### VideoOutput(视频输出)
133+
134+
YUV 到 RGB 转换 + 渲染:
135+
- 支持 YUV420P, YUV422P, YUV444P
136+
- 叠加层系统(运动矢量、块边界等)
137+
- OpenGL 加速渲染
138+
139+
## 构建指南
140+
141+
### 安装依赖
142+
143+
```bash
144+
# 安装 FFmpeg
145+
brew install ffmpeg
146+
147+
# 下载 Qt 6.11.0: https://www.qt.io/download
148+
```
149+
150+
### 编译运行
151+
152+
```bash
153+
git clone https://github.com/yourusername/VideoStudio.git
154+
cd VideoStudio
155+
mkdir build && cd build
156+
cmake .. -DCMAKE_PREFIX_PATH=~/Qt/6.11.0/macos
157+
cmake --build .
158+
./VideoStudio.app/Contents/MacOS/VideoStudio
159+
```
160+
161+
## 使用方法
162+
163+
### 打开视频文件
164+
165+
1. 启动 VideoStudio
166+
2. 点击 **File → Open** 或按 **Cmd+O**
167+
3. 选择视频文件(MP4, MKV, AVI, MOV 等)
168+
4. 视频自动索引并显示第一帧
169+
170+
### 导航控制
171+
172+
| 操作 | 快捷键 | 说明 |
173+
|------|--------|------|
174+
| 播放/暂停 | Space | 切换播放状态 |
175+
| 下一帧 | Alt+Right | 单步前进 |
176+
| 上一帧 | Alt+Left | 单步后退 |
177+
| 跳转 | 点击图表 | 跳到指定帧 |
178+
179+
### 视频叠加层
180+
181+
右侧面板可切换显示:
182+
-**Motion Vectors (ALT+3)** - 运动矢量箭头
183+
-**Partitions/Blocks (ALT+2)** - 编码块划分
184+
-**Frame Type Info (ALT+4)** - 帧类型标签
185+
186+
## Stream Info 面板
187+
188+
右侧信息面板实时显示:
189+
190+
| 属性 | 示例值 |
191+
|------|--------|
192+
| stream type | H.264 |
193+
| profile | Main |
194+
| level / tier | 4.2@L0 |
195+
| chroma format | 4:2:0 |
196+
| bitdepth | 8 |
197+
| resolution | 640 x 360 |
198+
| frame rate | 60.00 |
199+
| declared bitrate | Undefined |
200+
201+
## 项目路线图
202+
203+
### v1.0 MVP(已完成 ✅)
204+
205+
- [x] FFmpeg 视频解码
206+
- [x] 逐帧导航
207+
- [x] 码率可视化(条形图)
208+
- [x] 视频播放控制
209+
- [x] 帧元数据提取
210+
211+
### v1.1(开发中 🚧)
212+
213+
- [ ] 流信息面板增强
214+
- [ ] 缩略图导航栏
215+
- [ ] 质量指标(PSNR, SSIM)
216+
- [ ] 导出 YUV 帧
217+
218+
### v1.2(规划中 📋)
219+
220+
- [ ] 运动矢量叠加
221+
- [ ] 块/分区可视化
222+
- [ ] 参考流对比
223+
- [ ] CSV 指标导出
224+
225+
### v2.0(远期 🔮)
226+
227+
- [ ] VMAF 质量指标
228+
- [ ] 合规性验证
229+
- [ ] 缓冲区分析(CPB)
230+
- [ ] 命令行工具
231+
- [ ] 插件系统
232+
233+
## 设计灵感
234+
235+
VideoStudio 的设计深受 [Elecard StreamEye](https://www.elecard.com/products/video-analysis/stream-eye) 启发。StreamEye 是业界公认的专业视频分析工具,广泛应用于:
236+
237+
- **编解码器开发** - 调试编码问题
238+
- **质量评估** - 验证编码参数效果
239+
- **合规检查** - 确保符合标准规范
240+
- **教育研究** - 学习视频编码原理
241+
242+
我们的目标是打造一个**开源、跨平台、现代化**的替代方案。
243+
244+
## 关键技术挑战
245+
246+
### 1. 性能优化
247+
248+
处理高分辨率视频时需要高效渲染:
249+
- 使用 OpenGL 加速图形绘制
250+
- 帧数据缓存避免重复计算
251+
- 可视化区域裁剪只渲染可见部分
252+
253+
### 2. 内存管理
254+
255+
长时间分析大文件时的内存控制:
256+
- 循环缓冲区存储最近帧
257+
- 按需加载历史帧元数据
258+
- 智能预读策略平衡响应速度
259+
260+
### 3. UI 响应性
261+
262+
保持界面流畅的同时进行后台解码:
263+
- 多线程架构:UI线程 + 解码线程
264+
- 信号槽机制安全通信
265+
- 进度反馈和取消支持
266+
267+
## 总结
268+
269+
Day 109 完成了 VideoStudio 的核心 MVP 功能:
270+
271+
**完整的视频解码管线**
272+
**专业的可视化界面**
273+
**多视图切换(帧分布/GOP/缩略图)**
274+
**叠加层系统(运动矢量/块分区)**
275+
**流信息面板**
276+
277+
下一步将重点开发质量评估功能(PSNR/SSIM/VMAF),让 VideoStudio 成为真正的专业视频分析工具。
278+
279+
---
280+
281+
**项目地址**: [GitHub - VideoStudio](https://github.com/yourusername/VideoStudio)
282+
**许可证**: MIT
283+
**灵感来源**: [Elecard StreamEye](https://www.elecard.com/products/video-analysis/stream-eye)
284+
285+
---
286+
287+
*Build Your Own X With AI - Day 109/365*
1.71 MB
Loading
1.77 MB
Loading

0 commit comments

Comments
 (0)