2026-07-30 14:30:21 +08:00
2026-07-29 10:46:19 +08:00
2026-07-30 14:30:21 +08:00
2026-07-30 14:30:21 +08:00
2026-07-29 19:32:24 +08:00
2026-07-29 19:35:47 +08:00
2026-07-29 19:32:24 +08:00
2026-07-29 02:17:57 +08:00
2026-07-29 02:17:57 +08:00
2026-07-29 19:33:46 +08:00
2026-07-29 02:21:06 +08:00
2026-07-29 02:21:06 +08:00

FFmpeg GUI

一个基于 FFmpeg 的桌面端视频处理工具,提供图形化界面进行视频重新封装、重新编码和字幕烧录。

技术栈

技术
桌面框架 Wails v2
后端 Go 1.26+
前端 Vue 3 + TypeScript + Vite
媒体引擎 FFmpeg + FFprobe (内置)

功能

  • 重新封装 — 流复制模式快速切换容器格式(MP4 / MKV / MOV),不重新编码
  • 重新编码 — 调整编码器、质量(CRF / 码率)、分辨率、帧率、音频等参数
  • 字幕烧录 — 将内挂或外挂字幕(SRT / ASS / SSA / VTT)烧录到视频画面
  • 硬件加速 — 自动检测 NVIDIA NVENC、Intel QSV、AMD AMF 编码器及硬件加速方式
  • 任务管理 — 任务队列面板,实时显示编码进度、FPS、剩余时间,支持取消/移除

快速开始

环境要求

# 安装 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/                 # 功能页面

开发指南

# 仅前端开发(Vite 热更新 :5173)
cd frontend && npm run dev

# 类型检查
cd frontend && npm run build   # vue-tsc --noEmit + vite build

# Go 代码检查
go vet ./...

架构要点

  • Go ↔ 前端通信app.goApp 结构体的所有导出方法自动绑定到 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 设置页面。支持亮色 / 暗色主题切换。

S
Description
No description provided
Readme
203 KiB
1.0.0
Latest
2026-07-30 19:53:53 +08:00
Languages
Vue 62.1%
Go 31.3%
CSS 3.1%
TypeScript 2.7%
Batchfile 0.6%
Other 0.2%