Files
ffmpeg-gui/设计文档.md
T
2026-07-28 19:43:09 +08:00

504 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FFmpeg-GUI 设计文档
---
## 技术栈
C++ + Dear ImGui + FFmpeg Library
---
## 1. 产品定位
FFmpeg-GUI 是一个面向高级用户的视频处理工具。
UI 设计目标:
- 简洁
- 高效
- 专业
- 低干扰
- 强信息表达
整体风格:
> 现代化扁平设计(Modern Flat Design
参考方向:
- VS Code
- JetBrains IDE
- Blender
- OBS Studio
- Figma
---
## 2. 架构设计
### 2.1 底层模块划分
```text
UI层(Dear ImGui
|
业务层
|
FFmpeg封装层
|
硬件/系统层
```
### 2.2 FFmpeg 核心封装层
不应该让业务直接调用底层 FFmpeg API:
```cpp
avcodec_xxx()
avformat_xxx()
```
应该封装为统一接口:
```
FFmpeg Core
├── Decoder
├── Encoder
├── Muxer
├── Filter
└── MediaInfo
```
提供高层 API
```
Encode()
Remux()
BurnSubtitle()
Analyze()
```
上层不关心 FFmpeg 内部细节。
---
## 3. 功能模块设计
### 3.1 媒体信息分析(Media Analyzer
**功能说明:** 解析输入媒体文件信息,为其他模块提供媒体数据。
**支持信息:**
| 类别 | 字段 |
|------|------|
| 视频 | 编码格式、分辨率、帧率、比特率、色彩空间、HDR信息、视频流数量 |
| 音频 | 编码格式、声道、采样率、比特率、音轨数量 |
| 字幕 | 字幕格式、字幕语言、字幕数量 |
**输出提供给:** 重新封装、重新编码、字幕烧录
---
### 3.2 重新封装(Remux
**功能说明:** 仅修改媒体容器,不改变媒体编码。
```text
示例:MKV → MP4 | MOV → MP4 | TS → MKV
```
**操作流程:**
1. 选择输入文件
2. 选择输出格式(MP4、MKV、MOV、TS
3. 选择媒体流处理
| 流类型 | 操作 |
|--------|------|
| 视频 | Copy / 删除 |
| 音频 | Copy / 删除 |
| 字幕 | Copy / 删除 |
4. 开始任务
> ⚠ 重新封装不涉及编码,因此不需要 GPU 选择、编码参数。
---
### 3.3 重新编码(Encoder
**功能说明:** 重新压缩视频流。
**支持:**
| 编码格式 | 编码方式 |
|----------|----------|
| H264、H265、AV1 | NVIDIA NVENC、Intel QSV、AMD AMF、CPU Software |
**操作流程:**
1. 选择输入文件
2. 选择输出格式(MP4、MKV
3. 选择编码器(如:RTX 4090 → HEVC NVENC
4. 设置编码参数
| 类别 | 参数 |
|------|------|
| 基础 | 编码格式、质量模式、Preset、Profile、Level |
| 视频 | 分辨率、帧率、比特率 |
| 音频 | Copy / 重新编码 |
5. 开始任务
---
### 3.4 字幕烧录(Subtitle Burn
**功能说明:** 通过 FFmpeg Filter 将字幕渲染到视频,字幕成为视频画面的一部分。
**操作流程:**
1. 选择视频文件
2. 选择字幕文件(ASS、SSA、SRT)
3. 设置字幕参数(字体、字号、位置、编码)
4. 选择输出格式
5. 选择编码器
6. 开始任务
---
### 3.5 硬件管理(Hardware Manager
**GPU 检测:** 支持 NVIDIA、Intel、AMD
```text
GPU → 支持编码 → 可用参数
```
**示例:**
```
RTX 4090
支持: H264 NVENC | HEVC NVENC | AV1 NVENC
```
**硬件优先级:**
```
1. NVIDIA GPU
2. Intel QSV
3. CPU
```
**程序内部:**
```
Hardware Manager
|
Encoder List
hevc_nvenc
av1_nvenc
h264_qsv
libx265
```
---
### 3.6 任务管理(Task Manager
**功能说明:** 管理 FFmpeg 工作任务。
| 功能 | 说明 |
|------|------|
| 任务创建 | 添加任务、设置任务参数 |
| 任务控制 | 开始、暂停、停止、删除 |
| 状态 | 等待、执行中、已完成、失败、已取消 |
| 显示信息 | 当前文件、操作类型、编码器、当前帧、FPS、进度、剩余时间 |
---
### 3.7 软件设置
| 分类 | 设置项 |
|------|--------|
| 硬件设置 | GPU检测、GPU优先级、默认编码器 |
| 输出设置 | 默认输出目录、文件命名规则 |
| UI设置 | 主题、深色/浅色 |
---
## 4. 整体布局设计
### 4.1 主窗口结构
```
┌──────────────────────────────┐
│ FFmpeg-GUI │
├──────────────┬───────────────┤
│ │ │
│ 功能导航 │ 参数配置区域 │
│ │ │
│ │ │
├──────────────┴───────────────┤
│ 任务状态区域 │
└──────────────────────────────┘
```
---
### 4.2 页面区域设计
#### 顶部标题栏
- **功能:** 软件名称、当前模块名称、全局状态
- **高度:** 40px - 50px
- **风格:** 简洁、无复杂按钮、弱视觉存在
```
FFmpeg-GUI Encode
```
#### 左侧功能栏
- **用途:** 切换主要功能(重新封装、重新编码、字幕烧录)
- **宽度:** 160px - 220px
| 状态 | 样式 |
|------|------|
| 默认 | 灰色文字 + 低亮度背景 |
| 选中 | 强调色背景 + 白色文字 |
```
┌──────────┐
│ │
│ ▶ 编码 │
│ │
│ 封装 │
│ │
│ 字幕 │
│ │
└──────────┘
```
#### 参数配置区域
核心操作区域,采用分组 + 卡片 + 折叠区域的布局方式:
```
输入文件
┌────────────────┐
│ video.mkv │
└────────────────┘
编码设置
┌────────────────┐
│ HEVC NVENC ▼ │
└────────────────┘
```
#### 任务区域
固定底部,不影响参数修改,支持多任务显示:
```
任务
video01.mkv
HEVC NVENC
██████████──── 70%
FPS:120
剩余时间:03:20
```
---
## 5. 设计原则
### 5.1 扁平化
| 避免 | 采用 |
|------|------|
| 复杂渐变 | 单色背景 |
| 高光效果 | 简洁边界 |
| 拟物化按钮 | 清晰层级 |
| 大量阴影 | 少量强调色 |
### 5.2 工具化设计
软件不是娱乐应用,而是生产力工具。
**重点突出:**
- 当前任务状态
- 当前配置
- 操作反馈
**减少:**
- 装饰元素
- 无意义动画
- 复杂导航
### 5.3 信息密度适中
FFmpeg 需要显示大量参数,设计目标:
> 更多信息 + 清晰层级 + 快速定位
**避免:** 大面积留白、过大的控件、过多卡片嵌套
---
## 6. 色彩设计
**默认主题:暗色主题**
原因:视频工具常用暗色环境,减少视觉疲劳,符合专业软件习惯。
### 6.1 基础颜色
| 用途 | 色值 |
|------|------|
| 背景 | `#181818` |
| 面板 | `#202020` |
| 输入框 | `#2A2A2A` |
| 边框 | `#383838` |
| 主要文字 | `#FFFFFF` |
| 次级文字 | `#AAAAAA` |
### 6.2 强调色
| 用途 | 色值 | 场景 |
|------|------|------|
| 蓝色 | `#3B82F6` | 当前选择、操作按钮、状态提示 |
| 绿色 | `#22C55E` | 成功 |
| 红色 | `#EF4444` | 错误 |
| 黄色 | `#EAB308` | 警告 |
---
## 7. 控件设计
### 7.1 按钮
- **风格:** 扁平、圆角、无立体效果
- **高度:** 32px - 40px
| 状态 | 样式 |
|------|------|
| 默认 | 深色背景 |
| Hover | 增加亮度 |
| Active | 强调色 |
### 7.2 输入框
- 深色背景、弱边框、清晰焦点状态
```
┌────────────────┐
│ input.mp4 │
└────────────────┘
```
### 7.3 下拉框
用于编码器选择、输出格式、Preset 等,设计为简洁文本选择器。
### 7.4 进度条
- **用途:** 任务状态显示
- **要求:** 清晰、不抢占视觉
```
████████────── 60%
```
---
## 8. 图标设计
- **风格:** 线性图标、简洁、单色
- **避免:** 彩色复杂图标、过度装饰
- **使用场景:** 文件选择、删除任务、设置、开始任务
---
## 9. 字体设计
**原则:** 清晰优先。
| 平台 | 推荐字体 |
|------|----------|
| Windows | Segoe UI |
| 跨平台 | Noto Sans |
**字体层级:**
| 用途 | 字号 |
|------|-------------|
| 标题 | 20px - 24px |
| 正文 | 16px |
| 辅助信息 | 16px |
---
## 10. 动效设计
轻量动画。
| 允许 | 避免 |
|------|------|
| 页面切换、状态变化、进度变化 | 大量动画、弹跳效果、装饰动画 |
---
## 11. 状态反馈
任务状态与颜色对照:
| 状态 | 颜色 |
|------|------|
| 等待 | 灰色 |
| 运行 | 蓝色 |
| 完成 | 绿色 |
| 失败 | 红色 |
| 取消 | 黄色 |
```
● Encoding
● Completed
● Failed
```
---
## 12. 整体视觉关键词
```
现代 · 扁平 · 专业 · 克制 · 高信息密度 · 工具化 · 暗色 · 低干扰
```
> 打开软件后,用户可以快速选择操作、配置参数、执行任务,并清晰看到 FFmpeg 当前状态。
---
## 13. 实现范围
### 核心必须
```
媒体信息分析
FFmpeg Core 封装
重新封装
重新编码
字幕烧录
硬件管理
任务管理
```