# 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 设置页面。支持亮色 / 暗色主题切换。