传统字幕压制工作流依赖小丸工具箱等第三方 GUI 工具或 BAT 脚本,存在以下痛点:
- 参数繁琐:ffmpeg 命令行参数众多,易出错,难以复用
- 反馈缺失:工具窗口闪现即关,看不到实时进度和日志
- 跨平台困难:小丸工具箱仅 Windows,macOS/Linux 用户无法使用
- 视频信息不透明:需要手动用 ffprobe 查询分辨率、帧率、编码器等
- AVS 压制困难:需要手动编写 AviSynth 脚本来处理特效字幕(如复杂特效、矢量绘制等),参数复杂,调试困难,且耗时;普通用户也很难判断一份 ASS 到底"普通"还是"带特效",常常压完才发现标签没渲染
- LOGO 添加困难:传统方式需要用 ASS 字幕的 img 标签或矢量绘制命令,这些都需要特效字幕压制才能实现,流程复杂且耗时。本应用采用 ffmpeg overlay filter 直接在视频上叠加 LOGO,不需要特效字幕压制,更高效
CC 字幕压制工作站 用可视化界面解决这些问题:拖拽导入 → 自动解析视频 → 可视化配置参数 → 实时进度反馈 → 一键压制。支持 Windows 和 macOS,开箱即用。
- 🎬 拖拽导入 — 把视频和字幕直接拖到窗口,自动按扩展名分发
- 📊 视频信息卡 — 自动调用 ffprobe 解析分辨率、帧率、编码器、时长等,支持 CFR/VFR 识别
- 🎨 可视化参数 — CRF、码率、编码器(x264/x265/NVENC/AMF/VideoToolbox)一目了然
- 🧰 编码预设管理 — 内置
x264 平衡/x265 体积优先/NVENC 快速/AMF 快速/Apple 快速等多套预设,可在「预设」页新增/编辑/导入导出,主页直接切换 - 📝 输出文件名模板 — 支持
{video_name}/{resolution}/{encoder}/{crf}/{date:YYYYMMDD}等变量,默认生成{video_name} 中字.mp4;可保存多套模板并设为默认 - 🖼️ LOGO 可视化编辑 + 布局保存 — 在视频抽帧上拖放 LOGO,支持四角缩放、画布快捷键缩放、手动输入缩放比例和失焦自动隐藏调整锚点;为不同分辨率(720p/1080p/4K)和屏幕方向(横/竖屏)各自保存一套 LOGO 位置,下次打开自动恢复
- 🎞️ 反交错处理 — yadif 可选开关,处理交错素材
- 🔤 特效字幕压制(仅 Windows)— 使用 AviSynth+ 脚本引擎处理复杂特效字幕(如矢量绘制、img 标签等),相比 ffmpeg libass 支持更完善
- 🧠 特效标签自动识别(仅 Windows)— 选定字幕后自动扫描 VSFilterMod 扩展标签(
\fsc/\xblur/\jitter/\distort/\img等),命中即自动勾选「AVS 压制」并在界面提示具体匹配到的标签,省去人工判断特效字幕的步骤 - 🔍 字幕检查面板 — 集中展示字幕风险:图片路径缺失 / 字体未安装 / 样式缺失作为错误,ASS 色彩矩阵(YCbCr Matrix)问题作为警告,VSFilterMod 特效标签作为建议,并给出处理方式
- 👁️ 命令预览 — 开始压制前预览完整 ffmpeg 参数,支持折叠/复制
- 📈 实时进度 — 进度条、当前时间/总时长、输出大小、速度、fps、码率、原始 status 行
- 📝 完整日志 — ffmpeg stdout/stderr 全程透出,按
\r与\n两种分隔符切行 - ⏹️ 取消任务 — 压制过程中随时取消,进程优雅退出,已编码片段保留可播放
- 🔔 应用更新检查 — 启动时静默检查(可关闭)或在设置页手动触发,发现新版通过 Toast 通知并引导前往 GitHub Releases 下载
- 🍎 macOS 兼容自检 — 启动检测 ffmpeg 是否包含
subtitles/assfilter,缺失时直接提示安装ffmpeg-full(Homebrew),避免压到一半才失败
| 类型 | 支持格式 |
|---|---|
| 视频 | MP4, MKV, MOV, TS, M4V, FLV, AVI, WebM, WMV, MPG, MPEG, 3GP, 3G2, RM, RMVB, VOB, MTS, M2TS |
| 字幕 | ASS, SSA, SRT, VTT, SUB |
| LOGO | PNG, JPG, JPEG, WebP, BMP |
| 功能 | Windows | macOS |
|---|---|---|
| 基础压制 | ✅ | ✅ |
| 视频信息解析 | ✅ | ✅ |
| LOGO 叠加 | ✅ 可选层级(字幕上/下) | ✅ 仅字幕在上 LOGO 在下 |
| 反交错 | ✅ | ✅ |
| 特效字幕压制 | ✅ | ❌ |
| subtitles/ass filter 自检 | ✅ | ✅(缺失会提示装 ffmpeg-full) |
| 硬件加速 | NVIDIA NVENC、AMD AMF | Apple VideoToolbox |
| 安装包格式 | NSIS 安装程序 | Universal DMG(Intel + Apple Silicon) |
macOS 版本不支持特效字幕压制(AviSynth+ 仅 Windows),统一使用 ffmpeg libass 字幕渲染。 macOS 版本 LOGO 层级固定为"字幕在上 LOGO 在下",不支持切换到"LOGO 在上 字幕在下"。 macOS 上的精简版 ffmpeg(如
brew install ffmpeg)可能未启用--enable-libass,本应用启动会自动检测;如缺失subtitles/assfilter,请改装brew install ffmpeg-full。
最新版本请到 Releases 页面 下载。
下载 CSubtitleWorkstation_x.y.z_x64-setup.exe,双击安装即可。
下载 CSubtitleWorkstation_x.y.z_universal.dmg,同一个 DMG 同时兼容 Apple Silicon (M1/M2/M3/M4) 与 Intel Mac,无需区分。
由于本项目目前没有 Apple 开发者证书签名,macOS Gatekeeper 会在首次打开时拦截:
- 双击
.dmg挂载磁盘镜像,把应用拖到「应用程序」文件夹 - 在「应用程序」里右键点击 CSubtitleWorkstation → 选「打开」
- 弹出「无法验证开发者」对话框 → 再次点「打开」
如果 macOS 14+ 上述步骤无效(Apple 在新版系统收紧了快捷绕过):
- 双击应用让系统弹出拦截提示后关闭
- 进入「系统设置」→「隐私与安全性」
- 滑到底部能看到「已阻止使用"CSubtitleWorkstation"」→ 点「仍要打开」→ 输入密码确认
此操作每个应用只需做一次,之后双击即可正常打开。
ffmpeg 在哪里配置?
应用启动时会自动检测系统 PATH 上的 ffmpeg。如果检测失败或想指定其他版本,进入「设置」页面手动选择 ffmpeg 可执行文件路径。应用会自动在同目录寻找 ffprobe。
AVS 模式需要什么环境?
仅 Windows 支持。需要系统已安装 AviSynth+ 且 ffmpeg 启用了 --enable-avisynth 构建。推荐使用 Gyan.dev 的 ffmpeg-release-full.7z,其中包含 ffprobe 与 AviSynth+ 支持。
什么样的字幕会被自动识别为「特效字幕」?
应用只识别 VSFilterMod 特有的扩展标签——这些标签不在标准 ASS/SSA 规范中,libass 渲染不出来,必须走 AVS + VSFilterMod 才能正确显示。命中其一即视为特效字幕:
| 类别 | 标签 |
|---|---|
| 缩放 / 模糊 / 偏移 | \fsc、\xblur、\yblur、\fsvp、\fshp |
| 四角渐变 | \1vc–\4vc(颜色)、\1va–\4va(透明度) |
| 抖动 / 变形 | \jitter、\rnd*、\distort、\frs |
| 3D / 空间 | \z、\ortho |
| 特殊移动 | \mover、\moves3/4、\movevc |
| 图片填充 | \1img–\4img |
检测在选定字幕后自动进行,前端实时显示"已检测到 \xxx 等特效,已自动启用 AVS 压制"。如果当前平台不支持 AVS(macOS / 未装 AviSynth+),则只提示但不强制启用。普通 ASS(仅含
\b/\i/\c/\pos等标准标签)继续走 ffmpeg libass,不会被误判。
LOGO 布局怎么保存?
在压制页 LOGO 编辑器中保存过的布局会按 (LOGO 图, 分辨率桶) 持久化到本地配置。下次打开同样的视频自动恢复。支持 6 个桶:720p/1080p/4K × 横屏/竖屏。
编辑器支持两类缩放:一类是 LOGO 本身的四角拖拽缩放,用于决定最终压制中的 LOGO 尺寸;另一类是预览画布缩放,用于放大细调位置,不影响最终输出尺寸。预览画布可通过快捷键缩放,也可以直接输入缩放比例;当 LOGO 失去焦点时,调整锚点会自动隐藏,避免遮挡预览。
应用会在本地保存哪些配置和缓存?
应用会在系统用户目录下保存配置、窗口状态、WebView 缓存、压制临时字幕、LOGO 预览帧和 AVS 临时脚本。完整路径和清理建议见 用户数据与缓存。
压制过程中能取消吗?
可以。点击「取消」按钮,ffmpeg 进程会收到 SIGINT 信号优雅退出(相当于 Ctrl+C),已编码的部分会被正确写入文件尾,保证输出仍然可播放。
编码预设和输出文件名模板在哪里管理?
侧边栏「预设」页面集中管理两类资源:
- 编码预设:内置
x264 平衡/x265 体积优先/NVENC 快速/AMF 快速/Apple 快速五套;可新增/编辑/删除自定义预设,支持customVideoArgs自由扩展 ffmpeg 参数;可导入/导出 JSON 在多机之间同步。 - 输出文件名模板:支持
{video_name}/{resolution}/{encoder}/{crf}/{date:YYYYMMDD}/{date:YYMMDD}等变量,可选「与视频同目录」/「固定目录」两种输出目录策略,可保存多套并设为默认。
主页编辑区直接通过下拉框切换当前任务使用的预设和模板。
开发环境与命令
- Node.js + npm
- Rust / Cargo(Tauri 后端)
- Tauri 桌面依赖(Windows: WebView2 / Visual C++ Build Tools;macOS: Xcode Command Line Tools)
- 本机已安装
ffmpeg,或在设置页选择ffmpeg可执行文件
npm install
npm run tauri dev # 开发模式
npm run tauri build # 打包
npm run build # 仅前端构建设计原则
- 不内置 ffmpeg:由用户自行安装或指定。推荐 Gyan.dev 的
ffmpeg-release-full.7z(包含 ffprobe 与 AviSynth+ 支持) - 自动 ffprobe 定位:选择 ffmpeg 可执行文件时,应用会自动在同目录寻找 ffprobe,无需单独配置
- 应用更新与 ffmpeg 版本检测独立:两者互不影响
- 特效字幕压制(仅 Windows):需要系统已安装 AviSynth+ 且 ffmpeg 启用了
--enable-avisynth构建 - macOS / Linux 不支持特效字幕压制:统一走 ffmpeg filter 模式(libass 字幕渲染)
- 无 shell 调用:直接通过 Rust
std::process::Command调用 ffmpeg / ffprobe,文件名中包含特殊字符无需转义
Issues 和建议欢迎!提交 PR 前请确保代码通过 linter 和测试。





