419 lines
3.6 KiB
Markdown
419 lines
3.6 KiB
Markdown
## 技术栈:
|
||
C++ + Dear ImGui + FFmpeg Library
|
||
|
||
## 底层模块的划分:
|
||
|
||
```text
|
||
UI层
|
||
|
|
||
业务层
|
||
|
|
||
FFmpeg封装层
|
||
|
|
||
硬件/系统层
|
||
```
|
||
---
|
||
|
||
# FFmpeg-GUI 功能设计
|
||
|
||
## 1. 媒体信息分析(Media Analyzer)
|
||
|
||
### 功能说明
|
||
|
||
解析输入媒体文件信息,为其他模块提供媒体数据。
|
||
|
||
### 支持信息
|
||
|
||
视频:
|
||
|
||
* 编码格式
|
||
* 分辨率
|
||
* 帧率
|
||
* 比特率
|
||
* 色彩空间
|
||
* HDR信息
|
||
* 视频流数量
|
||
|
||
音频:
|
||
|
||
* 编码格式
|
||
* 声道
|
||
* 采样率
|
||
* 比特率
|
||
* 音轨数量
|
||
|
||
字幕:
|
||
|
||
* 字幕格式
|
||
* 字幕语言
|
||
* 字幕数量
|
||
|
||
输出:
|
||
|
||
提供给:
|
||
|
||
* 重新封装
|
||
* 重新编码
|
||
* 字幕烧录
|
||
|
||
---
|
||
|
||
# 2. 重新封装(Remux)
|
||
|
||
## 功能说明
|
||
|
||
仅修改媒体容器,不改变媒体编码。
|
||
|
||
例如:
|
||
|
||
```
|
||
MKV → MP4
|
||
|
||
MOV → MP4
|
||
|
||
TS → MKV
|
||
```
|
||
|
||
## 操作流程
|
||
|
||
1. 选择输入文件
|
||
|
||
2. 选择输出格式
|
||
|
||
支持:
|
||
|
||
* MP4
|
||
* MKV
|
||
* MOV
|
||
* TS
|
||
|
||
3. 选择媒体流处理
|
||
|
||
视频:
|
||
|
||
* Copy
|
||
* 删除
|
||
|
||
音频:
|
||
|
||
* Copy
|
||
* 删除
|
||
|
||
字幕:
|
||
|
||
* Copy
|
||
* 删除
|
||
|
||
4. 开始任务
|
||
|
||
## 注意
|
||
|
||
重新封装不需要:
|
||
|
||
* GPU选择
|
||
* 编码参数
|
||
|
||
因为不存在编码过程。
|
||
|
||
---
|
||
|
||
# 3. 重新编码(Encoder)
|
||
|
||
## 功能说明
|
||
|
||
重新压缩视频流。
|
||
|
||
支持:
|
||
|
||
视频编码:
|
||
|
||
* H264
|
||
* H265
|
||
* AV1
|
||
|
||
编码方式:
|
||
|
||
* NVIDIA NVENC
|
||
* Intel QSV
|
||
* AMD AMF
|
||
* CPU Software Encoder
|
||
|
||
## 操作流程
|
||
|
||
1. 选择输入文件
|
||
|
||
2. 选择输出格式
|
||
|
||
支持:
|
||
|
||
* MP4
|
||
* MKV
|
||
|
||
3. 选择编码器
|
||
|
||
例如:
|
||
|
||
```
|
||
GPU:
|
||
RTX 4090
|
||
|
||
Encoder:
|
||
HEVC NVENC
|
||
```
|
||
|
||
4. 设置编码参数
|
||
|
||
基础:
|
||
|
||
* 编码格式
|
||
* 质量模式
|
||
* Preset
|
||
* Profile
|
||
* Level
|
||
|
||
视频:
|
||
|
||
* 分辨率
|
||
* 帧率
|
||
* 比特率
|
||
|
||
音频:
|
||
|
||
* Copy
|
||
* 重新编码
|
||
|
||
5. 开始任务
|
||
|
||
---
|
||
|
||
# 4. 字幕烧录(Subtitle Burn)
|
||
|
||
## 功能说明
|
||
|
||
通过 FFmpeg Filter 将字幕渲染到视频。
|
||
|
||
字幕成为视频画面的一部分。
|
||
|
||
## 操作流程
|
||
|
||
1. 选择视频文件
|
||
|
||
2. 选择字幕文件
|
||
|
||
支持:
|
||
|
||
* ASS
|
||
* SSA
|
||
* SRT
|
||
|
||
3. 设置字幕参数
|
||
|
||
* 字体
|
||
* 字号
|
||
* 位置
|
||
* 编码
|
||
|
||
4. 选择输出格式
|
||
|
||
5. 选择编码器
|
||
|
||
6. 开始任务
|
||
|
||
---
|
||
|
||
# 5. 硬件管理(Hardware Manager)
|
||
|
||
## 功能
|
||
|
||
### GPU检测
|
||
|
||
支持:
|
||
|
||
* NVIDIA
|
||
* Intel
|
||
* AMD
|
||
|
||
获取:
|
||
|
||
* GPU名称
|
||
* 显存
|
||
* 可用编码器
|
||
|
||
### 编码器检测
|
||
|
||
检测:
|
||
|
||
```
|
||
GPU
|
||
|
||
↓
|
||
|
||
支持编码
|
||
|
||
↓
|
||
|
||
可用参数
|
||
```
|
||
|
||
例如:
|
||
|
||
```
|
||
RTX 4090
|
||
|
||
支持:
|
||
|
||
H264 NVENC
|
||
|
||
HEVC NVENC
|
||
|
||
AV1 NVENC
|
||
```
|
||
|
||
### 硬件优先级
|
||
|
||
例如:
|
||
|
||
```
|
||
1. NVIDIA GPU
|
||
|
||
2. Intel QSV
|
||
|
||
3. CPU
|
||
```
|
||
|
||
---
|
||
|
||
# 6. 任务管理(Task Manager)
|
||
|
||
## 功能说明
|
||
|
||
管理 FFmpeg 工作任务。
|
||
|
||
## 功能
|
||
|
||
任务创建:
|
||
|
||
* 添加任务
|
||
* 设置任务参数
|
||
|
||
任务控制:
|
||
|
||
* 开始
|
||
* 暂停
|
||
* 停止
|
||
* 删除
|
||
|
||
状态:
|
||
|
||
* 等待
|
||
* 执行中
|
||
* 已完成
|
||
* 失败
|
||
* 已取消
|
||
|
||
显示:
|
||
|
||
* 当前文件
|
||
* 操作类型
|
||
* 编码器
|
||
* 当前帧
|
||
* FPS
|
||
* 进度
|
||
* 剩余时间
|
||
|
||
---
|
||
|
||
# 7. FFmpeg核心封装层(新增)
|
||
|
||
这个建议加入。
|
||
|
||
因为你使用 FFmpeg Library,不应该让业务直接调用:
|
||
|
||
```cpp
|
||
avcodec_xxx()
|
||
avformat_xxx()
|
||
```
|
||
|
||
应该封装:
|
||
|
||
```
|
||
FFmpeg Core
|
||
|
||
├── Decoder
|
||
├── Encoder
|
||
├── Muxer
|
||
├── Filter
|
||
└── MediaInfo
|
||
```
|
||
|
||
提供:
|
||
|
||
```
|
||
Encode()
|
||
|
||
Remux()
|
||
|
||
BurnSubtitle()
|
||
|
||
Analyze()
|
||
```
|
||
|
||
上层不关心 FFmpeg API。
|
||
|
||
---
|
||
|
||
# 8. 软件设置
|
||
|
||
## 硬件设置
|
||
|
||
* GPU检测
|
||
* GPU优先级
|
||
* 默认编码器
|
||
|
||
## 输出设置
|
||
|
||
* 默认输出目录
|
||
* 文件命名规则
|
||
|
||
## UI设置
|
||
|
||
* 主题
|
||
* 深色/浅色
|
||
|
||
---
|
||
|
||
# 实现范围
|
||
|
||
## 核心必须
|
||
|
||
```
|
||
媒体信息分析
|
||
|
||
FFmpeg Core封装
|
||
|
||
重新封装
|
||
|
||
重新编码
|
||
|
||
字幕烧录
|
||
|
||
硬件管理
|
||
|
||
任务管理
|
||
```
|
||
|
||
---
|
||
|
||
程序内部:
|
||
|
||
```
|
||
Hardware Manager
|
||
|
|
||
↓
|
||
Encoder List
|
||
|
||
hevc_nvenc
|
||
av1_nvenc
|
||
h264_qsv
|
||
libx265
|
||
``` |