FFmpeg 构成工坊 — 一个体积只有 1–2 MB 的 Windows 单文件图形界面,把 ffmpeg 的全部常用能力收进一套构成主义(Constructivism)界面:转码、封装、合流、剪辑、截帧、图片转换、GPU 加速、字幕。
单文件
FORMA.exe,不安装、不解压目录、不写注册表;ffmpeg 由程序自动探测(也可以一键下载)。
- 仓库:https://github.com/TanPass/forma
- 下载:https://github.com/TanPass/forma/releases/latest(
FORMA.exe,1,339,904 字节) - 源码构建:
git clone https://github.com/TanPass/forma.git,然后powershell -NoProfile -ExecutionPolicy Bypass -File .\build.ps1
- 六大工作模式(左栏 01–06):转码 / 封装合流 / 剪辑截取 / 帧与缩略图 / 图片 / 队列
- 自由组合:视频编码器 × 音频编码器 × 容器三者任意搭配;也可以只留视频(去音轨)或只留音频(提取音轨)
- 转码:H.264 / H.265 / AV1 / VP9 / VP8 / MPEG-4 / ProRes / GIF,质量滑块(CRF / 目标码率 / 无损)、preset、tune、profile、像素格式
- 封装(remux):
-c copy换容器,秒级完成不损画质;合流(mux):视频 + 音频 + 字幕自由组合、替换音轨、保留或烧录字幕 - 字幕:保留原字幕轨、封装外部字幕(SRT / ASS / VTT → 独立字幕轨,mp4 自动转 mov_text)、烧录进画面(可调字号)、以及从视频中提取字幕为 SRT / ASS / VTT / TXT
- GPU 加速:自动检测 NVENC / QSV / AMF / VideoToolbox 编码器与 D3D11VA / CUDA / QSV 硬件解码;失败自动回退同族软件编码器
- 剪辑与截取:起止时间精确剪辑、按段拆分、无损关键帧切割
- 帧:单帧导出(PNG/JPG/WEBP)、按间隔抽帧、按 fps 抽帧、仅关键帧、缩略图拼贴(sprite sheet)
- 图片:批量转码、缩放、旋转/翻转、质量/无损、背景色填充;图片序列 ↔ 视频
- 队列:并行任务、实时进度/速度/剩余时间/码率、任务日志、取消、重试、重名自动避让(
_1/_2,绝不覆盖已有文件) - 拖放导入:文件直接拖进窗口即可
- 命令行预览:每次执行前都能看到将运行的 ffmpeg 命令行,可复制
- 无边框自绘窗口:构成主义版式,米白纸底 / 墨黑 / 朱红 / 芥末黄,硬阴影、斜纹进度、时间码
| 项 | 要求 |
|---|---|
| 系统 | Windows 10 1809+ / Windows 11(x64 或 arm64) |
| 运行时 | .NET Framework 4.8(Windows 10 1903+ 自带) |
| 界面 | Microsoft Edge WebView2 Runtime(Win11 自带;Win10 通常随 Edge 安装) |
| ffmpeg | 不需要预装:程序自动探测;找不到时界面内一键下载 |
- 双击
FORMA.exe。 - 程序按以下顺序寻找 ffmpeg:设置中指定 → exe 同目录 →
PATH→ WinGet 安装目录 → 常见安装路径。 - 找不到时点「下载 ffmpeg」:自动从 gyan.dev 获取 essentials 构建(约 114 MB),解压到本地数据目录并立即启用。
- 把视频/音频/图片拖进窗口,或在左栏选模式后点「选择文件」。
数据目录:优先 exe 同级/FormaData,不可写时用 %APPDATA%\Forma。日志在 logs\forma-YYYYMMDD.log。
| # | 模式 | 说明 |
|---|---|---|
| 01 | 转码 TRANSCODE | 换编码/改质量/缩放/改帧率;自由组合视频+音频编码与容器;字幕保留/封装/烧录 |
| 02 | 封装合流 REMUX / MUX | 换容器(无损 copy)、视频+音频+字幕合流、替换音轨 |
| 03 | 剪辑截取 TRIM | 起止时间精确剪辑、按段拆分、导出片段 |
| 04 | 帧与缩略图 FRAMES | 单帧、序列、关键帧、缩略图拼贴、GIF |
| 05 | 图片 IMAGE | 批量图片转码/缩放/旋转,图片序列与视频互转 |
| 06 | 队列 QUEUE | 任务队列、进度、日志、取消/重试 |
在 01 转码页的「字幕 / SUBTITLES」折叠区,或直接点顶部的两张快捷卡:
| 模式 | 行为 |
|---|---|
| 保留原字幕 COPY | 原字幕轨原样带进输出(容器支持时) |
| 封装外部字幕 EMBED | 选一个 .srt / .ass / .vtt 等外部字幕,作为独立字幕轨封装;mp4/mov 转 mov_text,mkv 保留原格式 |
| 烧录进画面 BURN | 用 libass 把字幕压进画面,可调字号;输出不再有字幕轨 |
| 提取字幕(快捷卡) | 把视频里的第一条字幕轨导出成 .srt 文本(引擎同时支持 ass / vtt / txt) |
- 启动时探测可用硬件编码器(NVENC / QSV / AMF 等)与硬件解码器(D3D11VA / CUDA / QSV / DXVA2)。
- 在编码器下拉框中选择带 GPU 标记的编码器即可;解码可选「自动」或指定后端。
- 硬件编码失败时自动回退到同族软件编码器重试一次,任务不会因此失败。
| 键 | 动作 |
|---|---|
Ctrl+O |
选择文件 |
Ctrl+Enter |
加入队列 |
Delete |
移除选中任务 |
Esc |
关闭弹层 / 取消当前编辑 |
F12 |
开发者工具(仅当设置里开启 devTools) |
| 部分 | 说明 |
|---|---|
| 宿主 | C# / .NET Framework 4.8 / WinForms,单文件 exe,约 1.3 MB |
| 界面 | 纯静态 HTML/CSS/JS(无框架、无 CDN、无构建步骤),内嵌在 exe 资源里,运行时释放到临时目录 |
| 渲染 | WebView2(手动 CoreWebView2Controller,只嵌入 Core SDK 与 WebView2Loader.dll) |
| 引擎 | 子进程调用 ffmpeg/ffprobe,-progress pipe:1 解析进度,taskkill /T 取消 |
| ffmpeg | 不内嵌(内嵌会让体积增加 100–200 MB),改为自动探测 + 一键下载 |
需要 Windows + .NET Framework 4.8(系统自带)+ 仓库内 vendor 的 Roslyn 编译器与 WebView2 SDK
(tools/vendor/ 已裁剪到只保留构建必需的 csc 与 WebView2 托管/原生 DLL,约 26 MB):
powershell -NoProfile -ExecutionPolicy Bypass -File .\build.ps1产物:dist\FORMA.exe。加 -Check 可只做编译检查(使用 tests\_stub\EngineStub.cs 桩)。
测试素材不随仓库分发,运行 tests/qa/make-media.ps1 可重新生成。
forma/
build.ps1 构建脚本(csc 直接编译,无需 dotnet SDK)
src/ 宿主(窗口、桥、配置、ffmpeg 定位/下载)
src/Engine/ 引擎(能力探测、probe、命令构建、队列)
ui/ 静态界面(index.html + css/ + js/ + assets/)
docs/ PROTOCOL.md(宿主↔前端协议)/ JOBSPEC.md / DESIGN.md / QA.md
tests/ 引擎自测、QA 脚本与素材
assets/forma.ico 应用图标
dist/FORMA.exe 交付产物
- FORMA 本体(宿主 + 界面 + 文档):MIT,见
LICENSE。 - ffmpeg 不在本仓库、也不在 FORMA.exe 内:程序运行时调用用户机器上的 ffmpeg/ffprobe 子进程(不链接、不嵌入)。一键下载只是替你从 gyan.dev 取回第三方构建。
- 再分发 ffmpeg 时(打包进安装器、随介质分发等)必须自行满足其 GPLv3 要求:附许可全文、提供对应源码或书面承诺、保留版权声明。详见
LICENSING.md与THIRD-PARTY-NOTICES.md。 - WebView2 SDK / .NET Framework:Microsoft 许可;运行时由系统提供。
- 字体:仅使用 Windows 自带字体(Bahnschrift / Microsoft YaHei UI),不分发字体文件。


