传统字幕压制工作流依赖小丸工具箱等第三方 GUI 工具或 BAT 脚本,存在以下痛点:
- 参数繁琐:ffmpeg 命令行参数众多,易出错,难以复用
- 反馈缺失:工具窗口闪现即关,看不到实时进度和日志
- 跨平台困难:小丸工具箱仅 Windows,macOS/Linux 用户无法使用
- 视频信息不透明:需要手动用 ffprobe 查询分辨率、帧率、编码器等
- AVS 压制困难:需要手动编写 AviSynth 脚本来处理特效字幕(如复杂特效、矢量绘制等),参数复杂,调试困难,且耗时;普通用户也很难判断一份 ASS 到底"普通"还是"带特效",常常压完才发现标签没渲染
- LOGO 添加困难:传统方式需要用 ASS 字幕的 img 标签或矢量绘制命令,这些都需要特效字幕压制才能实现,流程复杂且耗时。本应用采用 ffmpeg overlay filter 直接在视频上叠加 LOGO,不需要特效字幕压制,更高效
CC 字幕压制工作站 用可视化界面解决这些问题:拖拽导入 → 自动解析视频 → 可视化配置参数 → 实时进度反馈 → 一键压制。支持 Windows 和 macOS,开箱即用。
- 🎬 拖拽导入:视频、字幕拖入窗口即可开始;支持单视频处理,也支持视频 + 字幕同时导入。
- 📊 视频信息解析:自动读取分辨率、帧率、编码器、时长、CFR/VFR 等关键信息。
- 🎨 编码参数可视化:质量值、码率、编码器集中配置;质量值可留空,留空时不生成
-crf/-cq/-qp。 - 🎛️ 视频处理:支持反交错、旋转、镜像、缩放、帧率和视频码率调整,直接并入同一次压制。
- 👁️ 命令预览与日志:开始前可展开完整 ffmpeg 命令;压制中显示进度、速度、fps、码率、输出大小和 stdout/stderr。
- ⏹️ 任务取消:压制过程中可取消,优雅退出 ffmpeg,已写入片段尽量保留可播放。
- 🔤 普通字幕压制:使用 ffmpeg libass 渲染 ASS / SSA / SRT / VTT / SUB 字幕。
- 🧠 特效字幕识别(Windows):自动扫描 VSFilterMod 扩展标签,命中后提示并可切换 AVS 压制。
- 🧩 AVS 特效压制(Windows):通过 AviSynth+ / VSFilterMod 处理复杂 ASS 特效、矢量绘制和 img 标签。
- 🔍 字幕检查面板:集中提示图片缺失、字体未安装、样式缺失、ASS 色彩矩阵和特效标签风险。
- 🖼️ LOGO 可视化编辑:在视频抽帧上拖放、缩放 LOGO;按分辨率和屏幕方向保存布局,可配置字幕与 LOGO 层级。
- 📝 文字处理
- 🧾 CC 字幕整理:拆分 Web CC 说话人标签,整理花字行 / 听轴行,支持 SRT 转 ASS。
- 🔁 繁简转换:实时预览、差异高亮、同步滚动,自定义词库优先匹配。
- ✅ 字幕校对:检查「的 / 地 / 得」疑似误用,支持自定义词库、正则和试匹配,只提示不自动替换。
- 🔄 格式转换
- 🔄 字幕格式转换:ASS / SSA / SRT / VTT 互转,单字幕拖入可直接进入工具。
- 📦 视频转 MP4:常见视频容器重新封装为 MP4,默认 stream copy 不重新编码。
- 🎞️ 媒体处理
- 🎞️ TS 分片合并:按顺序合并 TS / M2TS / MTS 分片并输出 MP4,不重新编码。
- 🎧 合并音视频:保留视频画面,合并单独音频来源输出 MP4。
- 🖼️ 添加封面:给 MP4 写入 JPG / PNG 封面,原音视频流原样复制。
- 🧰 编码预设管理:内置 x264 / x265 / NVENC / AMF / VideoToolbox 预设,可新增、编辑、导入导出。
- 📝 输出文件名模板:支持
{video_name}/{resolution}/{encoder}/{crf}/{date:YYYYMMDD}等变量。
- 🔔 应用更新检查:启动时静默检查或在设置页手动检查,新版本通过 Toast 提醒。
- 🍎 macOS 兼容自检:检测 ffmpeg 是否包含
subtitles/assfilter,缺失时提示安装ffmpeg-full。
| 类型 | 支持格式 |
|---|---|
| 视频 | MP4, MKV, MOV, TS, M4V, FLV, AVI, WebM, WMV, MPG, MPEG, 3GP, 3G2, RM, RMVB, VOB, MTS, M2TS |
| 字幕 | ASS, SSA, SRT, VTT, SUB |
| 文本 / 字幕工具 | TXT, 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。
推荐使用较完整的 ffmpeg 构建:
- Windows:推荐 Gyan.dev 的
ffmpeg-release-full.7z,同时包含ffprobe,并支持更多滤镜和 demuxer。 - macOS:如果字幕压制提示缺少
subtitles/assfilter,建议改装 Homebrew 的ffmpeg-full。
macOS 可以压制特效字幕吗?
macOS 版本不支持 AVS / VSFilterMod 工作流,只能使用 ffmpeg libass 渲染字幕。普通 ASS / SSA / SRT 字幕可以正常压制;依赖 VSFilterMod 扩展标签的特效字幕会提示风险,但不会自动启用 AVS。
如果只是普通字幕却提示 subtitles / ass filter 缺失,说明当前 ffmpeg 构建不完整。建议安装 ffmpeg-full 后,在「设置」页重新检测或手动选择新的 ffmpeg 路径。
AVS 模式需要什么环境?
仅 Windows 支持。需要系统已安装 AviSynth+ 且 ffmpeg 启用了 --enable-avisynth 构建。推荐使用 Gyan.dev 的 ffmpeg-release-full.7z,其中包含 ffprobe 与 AviSynth+ 支持。
VP9 视频使用 AVS 压制有什么额外要求?
VP9 视频在 AVS 模式下会走 fallback 流程:应用会先把源视频临时复制到 ASCII 路径,再通过本机 64 位 DirectShow 解码链读取视频,用来避免 VP9 AVS 压制时可能断帧的问题。
因此只有 VP9 + AVS 这个组合额外需要 64 位 LAV Filters。普通 AVS 字幕压制不依赖 LAV Filters;非 AVS 压制也不需要这一步。设置页的「VP9 DirectShow 解码器」面板可以检测 LAV Filters 的 x64 组件和 DirectShow 注册状态。
如果源视频很大,开始压制前的临时复制会占用同等大小的临时空间,复制期间 ffmpeg 进度可能暂时保持 0%。确认弹窗中会显示临时占用和临时路径。
压制过程中能取消吗?
可以。点击「取消」按钮,ffmpeg 进程会收到 SIGINT 信号优雅退出(相当于 Ctrl+C),已编码的部分会被正确写入文件尾,保证输出仍然可播放。
什么样的字幕会被自动识别为「特效字幕」?
应用只识别 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,不会被误判。
字幕检查面板里的错误、警告、建议分别是什么意思?
- 错误:很可能直接影响输出,例如字幕引用的图片不存在、字体未安装、样式缺失。建议先处理再压制。
- 警告:可能造成画面或字幕观感偏差,例如 ASS 色彩矩阵缺失或与视频元数据不一致。可以继续压制,但建议按提示修正。
- 建议:不一定会失败,但可能有更合适的处理方式,例如检测到 VSFilterMod 特效标签时建议使用 AVS。
字幕检查不会修改字幕文件,只负责提示风险和给出处理方向。
LOGO 布局怎么保存?
在压制页 LOGO 编辑器中保存过的布局会按 (LOGO 图, 分辨率桶) 持久化到本地配置。下次打开同样的视频自动恢复。支持 6 个桶:720p/1080p/4K × 横屏/竖屏。
编辑器支持两类缩放:一类是 LOGO 本身的四角拖拽缩放,用于决定最终压制中的 LOGO 尺寸;另一类是预览画布缩放,用于放大细调位置,不影响最终输出尺寸。预览画布可通过快捷键缩放,也可以直接输入缩放比例;当 LOGO 失去焦点时,调整锚点会自动隐藏,避免遮挡预览。
编码预设和输出文件名模板在哪里管理?
侧边栏「预设」页面集中管理两类资源:
- 编码预设:内置
x264 平衡/x265 体积优先/NVENC 快速/AMF 快速/Apple 快速五套;可新增/编辑/删除自定义预设,支持customVideoArgs自由扩展 ffmpeg 参数;可导入/导出 JSON 在多机之间同步。 - 输出文件名模板:支持
{video_name}/{resolution}/{encoder}/{crf}/{date:YYYYMMDD}/{date:YYMMDD}等变量,可选「与视频同目录」/「固定目录」两种输出目录策略,可保存多套并设为默认。
主页编辑区直接通过下拉框切换当前任务使用的预设和模板。
自定义词库怎么用?
两个文字工具都支持自定义词库,但用途不同:
- 字幕校对:进入「工具」→「字幕校对」。可以粘贴文本,也可以拖入 TXT / ASS / SSA / SRT / VTT / SUB 文件。应用会标出「的 / 地 / 得」疑似误用和词库命中的专有名词问题;点击问题可定位原文,点击「采纳」才会替换,不会自动改动原文。校对词库用于统一人名、团名、节目名、术语等写法,每条规则由「标准写法」和「匹配规则」组成,匹配规则支持正则,
%1可引用第 1 个捕获组。 - 繁简转换:进入「工具」→「繁简转换」。左侧粘贴文本后会实时转换,右侧高亮差异并同步滚动。自定义词库每行一条,支持
原词 = 目标词、原词 -> 目标词、原词 => 目标词或 Tab 分隔;词库优先级最高,会先保护命中的词再执行基础繁简转换,例如朴乾旭 = 朴乾旭可以避免被转换成朴干旭。
两个词库都会保存到本地配置,下次打开自动恢复。词库窗口里的「试匹配」可以输入一小段文本,实时查看当前规则会命中什么、建议替换成什么。拖入 TXT 做繁简转换时,应用只读取并预览结果;确认后点击「导出结果」,目标文件已存在时会先确认是否覆盖。
应用会在本地保存哪些配置和缓存?
应用会在系统用户目录下保存配置、窗口状态、字幕校对词库、繁简转换自定义词库、WebView 缓存、压制临时字幕、LOGO 预览帧和 AVS 临时脚本。完整路径和清理建议见 用户数据与缓存。
开发环境与命令
- 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 和测试。





