init project
This commit is contained in:
@@ -0,0 +1,419 @@
|
||||
## 技术栈:
|
||||
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
|
||||
```
|
||||
Reference in New Issue
Block a user