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
|
|||
|
|
```
|