Files
ffmpeg-gui/README.md
T
2026-07-29 02:21:06 +08:00

91 lines
3.4 KiB
Markdown
Raw Permalink 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
一个基于 FFmpeg 的桌面端视频处理工具,提供图形化界面进行视频重新封装、重新编码和字幕烧录。
## 技术栈
| 层 | 技术 |
| --------- | --------------------------- |
| 桌面框架 | [Wails v2](https://wails.io) |
| 后端 | Go 1.26+ |
| 前端 | Vue 3 + TypeScript + Vite |
| 媒体引擎 | FFmpeg + FFprobe (内置) |
## 功能
- **重新封装** — 流复制模式快速切换容器格式(MP4 / MKV / MOV),不重新编码
- **重新编码** — 调整编码器、质量(CRF / 码率)、分辨率、帧率、音频等参数
- **字幕烧录** — 将内挂或外挂字幕(SRT / ASS / SSA / VTT)烧录到视频画面
- **硬件加速** — 自动检测 NVIDIA NVENC、Intel QSV、AMD AMF 编码器及硬件加速方式
- **任务管理** — 任务队列面板,实时显示编码进度、FPS、剩余时间,支持取消/移除
## 快速开始
### 环境要求
- [Go](https://go.dev/dl/) 1.26+
- [Node.js](https://nodejs.org/) 18+
- [Wails CLI](https://wails.io/docs/gettingstarted/installation) v2
```bash
# 安装 Wails CLI
go install github.com/wailsapp/wails/v2/cmd/wails@latest
# 启动开发模式(Go + 前端热更新)
wails dev
# 生产构建
wails build
```
构建产物在 `build/bin/ffmpeg-gui.exe`
### FFmpeg 二进制
项目 `build/bin/` 目录下内置了 Windows 版 FFmpeg。启动时优先加载内置版本,未找到时回退到系统 PATH。
## 项目结构
```
ffmpeg-gui/
├── main.go # 入口,嵌入前端 dist
├── app.go # App 绑定:所有导出方法供前端调用
├── wails.json # Wails 配置
├── internal/
│ ├── ffmpeg/ # FFmpeg 二进制检测、执行、进度解析、参数构建
│ ├── task/ # 任务模型、任务管理器(队列 + 事件)
│ ├── hwaccel/ # GPU 编码器 / 硬件加速检测
│ ├── media/ # ffprobe JSON 解析 → 媒体信息
│ └── platform/ # Windows 窗口边框修复
└── frontend/
└── src/
├── api/wails.ts # Go ↔ 前端绑定 + 事件监听
├── types/index.ts # TypeScript 类型(与 Go struct 对应)
├── components/ # Header / Sidebar / TaskDrawer
└── views/ # 功能页面
```
## 开发指南
```bash
# 仅前端开发(Vite 热更新 :5173)
cd frontend && npm run dev
# 类型检查
cd frontend && npm run build # vue-tsc --noEmit + vite build
# Go 代码检查
go vet ./...
```
### 架构要点
- **Go ↔ 前端通信**`app.go``App` 结构体的所有导出方法自动绑定到 `window.go.main.App`,前端通过 `api/wails.ts` 封装调用
- **事件驱动**:任务进度/日志通过 `runtime.EventsEmit` 推送到前端,`runtime.EventsOn` 监听
- **进度解析**FFmpeg 的 `\r` 分隔进度行由自定义 `bufio.Scanner` 解析,进度更新限流至 250ms 间隔
- **任务 ID**:取 UUID 前 8 位,JSON 序列化作为前后端数据交换格式
## 视觉风格
Modern Flat / Card Based 设计语言,灵感来自 HandBrake + OpenList Desktop + 现代 IDE 设置页面。支持亮色 / 暗色主题切换。