## 技术栈: 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 ```