一个基于 Vite + React + Electron 的桌面视频工具,核心处理能力通过操作系统中安装的 ffmpeg 完成。当前支持四类能力:
- 视频格式转换
- 单视频多片段剪辑
- 批量视频剪辑
- 视频压缩
前端使用 React 提供界面与参数配置,Electron 主进程负责调用系统 ffmpeg 执行真实的视频处理任务。处理结果默认输出到系统下载目录下的 VideoEditorExports 文件夹。
项目同时保留了纯 Web 启动方式,方便开发界面;但真正依赖 ffmpeg 的转换、剪辑、压缩功能需要在桌面版中使用。
- Node.js 20+,当前已在 Node.js 24 环境验证
- npm 10+
- 已安装并可在终端中直接调用的
ffmpeg
检查 ffmpeg 是否可用:
ffmpeg -version安装依赖:
npm i只运行 Web 界面:
npm run dev运行桌面开发版:
npm run dev:desktop先构建前端,再直接启动 Electron:
npm run build:web
npm run start:desktop构建桌面包:
npm run build:desktop当前仓库已经验证过 macOS ARM64 的 zip 打包流程。打包产物默认输出到:
release/
npm run dev:启动 Vite 开发服务器npm run dev:desktop:同时启动 Vite 和 Electron 桌面开发环境npm run build:web:构建前端静态资源npm run start:desktop:使用已构建的前端资源启动 Electronnpm run build:desktop:执行桌面应用打包
src/
app/
App.tsx 页面主入口
components/
VideoConverter.tsx 格式转换
SingleVideoEditor.tsx 单视频多片段剪辑
BatchVideoEditor.tsx 批量剪辑
VideoCompressor.tsx 视频压缩
lib/
desktop.ts 渲染层与 Electron API 封装
electron/
main.mjs Electron 主进程与 ffmpeg IPC
preload.mjs 安全桥接
electron/main.mjs中注册了video:trim、video:convert、video:compress等 IPC- 前端通过
window.desktopAPI调用这些能力 - 输入文件路径通过 Electron 的
webUtils.getPathForFile()获取 - 输出文件会自动写入下载目录下的
VideoEditorExports
- 如果桌面版提示无法检测到
ffmpeg,先确认终端里ffmpeg -version可以正常执行 - Web 模式主要用于界面开发和预览,不适合作为完整视频处理运行环境
- 打包
dmg时如果镜像源缺少dmg-builder资源,可能需要切换源或仅构建zip