用 TRAE 开发桌面视频剪辑工具:我的经验分享
大家好,我是 zcatclaw。最近用 TRAE 做了个桌面视频工具 Clip Up,给大家聊聊开发过程和一些体会。
Clip Up 是用来批量处理视频色彩还原的工具。起因是 Pocket 3 拍的 D-log 视频,调色太麻烦了,大疆官方的 app 居然没有批量处理色彩还原的功能,只能一个个来。作为一个程序员,这哪忍得了,那就自己写一个呗。
如果你也有批量处理视频的需求,可以参考一下。
技术栈
-
Electron + React + TypeScript
-
Vite + Electron Forge
-
TailwindCSS + shadcn/ui + Radix UI
-
FFmpeg(ffmpeg-static + ffprobe-static)
-
Lucide React
一、Electron + React + Vite 怎么搭
为什么选 Electron?
Tauri 也考虑过,但当时不太熟,怕踩坑。最后还是选了 Electron,好歹之前用过。Vite 就是为了 HMR 快,开发体验比 webpack 好太多。
另外提一下,FFmpeg 是独立的命令行工具,跟 Node.js 没什么关系。这里用的 ffmpeg-static 只是把 FFmpeg 二进制文件打包进项目里,方便分发。
初始化
Electron Forge 的 Vite 模板够用:
npm create electron-app@latest clip-up -- --template=vite-typescript
然后装 React 那套就行。
进程通信
这是 Electron 最容易出错的地方。我的做法是用 contextBridge 暴露 API:
// preload.ts
contextBridge.exposeInMainWorld('electronAPI', {
selectFiles: () => ipcRenderer.invoke('select-files'),
processVideo: (input: string, output: string, options: Options) =>
ipcRenderer.invoke('process-video', input, output, options)
})
比直接开 nodeIntegration 安全,也好维护。
二、FFmpeg 批量处理
色彩还原原理
D-log 转 Rec.709 其实就是色彩空间的转换。用 FFmpeg 的 zscale 滤镜:
-
简单模式:直接用 gamma 参数转
-
高级模式:用 zscale 走线性中间转换,色彩更准
另外还支持 LUT 文件,可以自定义颜色映射。
批量处理实现
核心是 batchConvert 方法,支持并发控制:
async batchConvert(
files: BatchFile[],
concurrency = 2, // 默认并发 2 个
options: BatchOptions = {},
): Promise<BatchResult[]>
实现思路:
-
用
Promise.all控制并发数 -
同时跑
concurrency个转换任务 -
每个任务完成后自动启动下一个
-
通过回调实时更新 onProgress(整体进度)和 onFileProgress(单个文件进度)
// 进度回调示例
options.onProgress = (index, total, result) => {
console.log(`完成 ${index + 1}/${total}`)
}
options.onFileProgress = (index, total, percent) => {
console.log(`文件 ${index + 1}: ${percent.toFixed(1)}%`)
}
性能
-
默认并发 2 个 FFmpeg 进程,不至于太卡机器
-
用流式处理获取 FFmpeg 输出,实时解析进度
-
进程用完就关,不复用
三、UI 这块怎么做的
选 shadcn/ui 的原因
主要看它代码在自己项目里,想改就改。不像有些 UI 库,引进来一堆黑盒组件,改不动。
组件结构
Clip Up 就三块:左边文件列表加拖拽,中间预览,右侧参数设置。用 React Router 做了路由,不同步骤不同页面。
TailwindCSS 技巧
-
cn()合并类名(配合 class-variance-authority) -
dark:写深色模式 -
md:、lg:搞响应式
写在最后
第一次用 AI 编程工具做完整的桌面应用,整体挺意外的。TRAE 帮我写了大部分重复代码:组件模板、FFmpeg 命令拼装、配置改动这些。但核心逻辑和架构还是得自己来。
如果你也想做桌面应用,用 TRAE 先跑一遍确实能省很多功夫。很多基础问题它都能快速解决。
项目在 GitHub:Zcating/clip-up-project,欢迎 star!