Skip to content

Repository files navigation

CC Subtitle Workstation

CC 字幕压制工作站

一键压制字幕视频,支持 LOGO 叠加、特效字幕、实时进度反馈

English

📥 下载 · 📖 开发指南 · 🐛 反馈问题

GitHub Stars Release Downloads License

Tauri Vue TypeScript Rust

用可视化界面替代传统字幕压制工作流。拖拽导入 → 自动解析 → 可视化配置 → 实时反馈 → 一键压制。


💡 Why?

传统字幕压制工作流依赖小丸工具箱等第三方 GUI 工具或 BAT 脚本,存在以下痛点:

  • 参数繁琐:ffmpeg 命令行参数众多,易出错,难以复用
  • 反馈缺失:工具窗口闪现即关,看不到实时进度和日志
  • 跨平台困难:小丸工具箱仅 Windows,macOS/Linux 用户无法使用
  • 视频信息不透明:需要手动用 ffprobe 查询分辨率、帧率、编码器等
  • AVS 压制困难:需要手动编写 AviSynth 脚本来处理特效字幕(如复杂特效、矢量绘制等),参数复杂,调试困难,且耗时;普通用户也很难判断一份 ASS 到底"普通"还是"带特效",常常压完才发现标签没渲染
  • LOGO 添加困难:传统方式需要用 ASS 字幕的 img 标签或矢量绘制命令,这些都需要特效字幕压制才能实现,流程复杂且耗时。本应用采用 ffmpeg overlay filter 直接在视频上叠加 LOGO,不需要特效字幕压制,更高效

CC 字幕压制工作站 用可视化界面解决这些问题:拖拽导入 → 自动解析视频 → 可视化配置参数 → 实时进度反馈 → 一键压制。支持 Windows 和 macOS,开箱即用。


✨ Features

压制主流程

  • 🎬 拖拽导入:视频、字幕拖入窗口即可开始;支持单视频处理,也支持视频 + 字幕同时导入。
  • 📊 视频信息解析:自动读取分辨率、帧率、编码器、时长、CFR/VFR 等关键信息。
  • 🎨 编码参数可视化:质量值、码率、编码器集中配置;质量值可留空,留空时不生成 -crf / -cq / -qp
  • 🎛️ 视频处理:支持反交错、旋转、镜像、缩放、帧率和视频码率调整,直接并入同一次压制。
  • 👁️ 命令预览与日志:开始前可展开完整 ffmpeg 命令;压制中显示进度、速度、fps、码率、输出大小和 stdout/stderr。
  • ⏹️ 任务取消:压制过程中可取消,优雅退出 ffmpeg,已写入片段尽量保留可播放。

字幕与 LOGO

  • 🔤 普通字幕压制:使用 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 / ass filter,缺失时提示安装 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 / ass filter,请改装 brew install ffmpeg-full


📸 界面截图

主页 - 拖拽导入与压制参数
主页 · 拖拽视频和字幕即可开始,压制参数一目了然
压制中 - 视频信息、字幕检查、实时进度与日志
压制中 · 视频信息卡 + 字幕检查 + 实时进度 + ffmpeg 日志
LOGO 可视化编辑器
LOGO 编辑器 · 在视频抽帧上拖放缩放,支持画布缩放与比例输入,按分辨率/方向自动保存布局
字幕检查面板
字幕检查 · 图片缺失、字体未装、色彩矩阵、特效标签分级提示
预设管理 - 编码预设与文件名模板
预设管理 · 编码预设 + 输出文件名模板,可导入导出
设置面板 - ffmpeg、AVS、应用更新
工具 / 设置 · 字幕校对、繁简转换、CC 字幕整理、字幕格式转换、封装转换、自定义词库与 ffmpeg / AviSynth+ 自检

📥 下载与安装

最新版本请到 Releases 页面 下载。

Windows

下载 CSubtitleWorkstation_x.y.z_x64-setup.exe,双击安装即可。

macOS

下载 CSubtitleWorkstation_x.y.z_universal.dmg同一个 DMG 同时兼容 Apple Silicon (M1/M2/M3/M4) 与 Intel Mac,无需区分。

macOS首次打开提示「无法验证开发者」怎么办

由于本项目目前没有 Apple 开发者证书签名,macOS Gatekeeper 会在首次打开时拦截:

  1. 双击 .dmg 挂载磁盘镜像,把应用拖到「应用程序」文件夹
  2. 在「应用程序」里右键点击 CSubtitleWorkstation → 选「打开」
  3. 弹出「无法验证开发者」对话框 → 再次点「打开」

如果 macOS 14+ 上述步骤无效(Apple 在新版系统收紧了快捷绕过):

  1. 双击应用让系统弹出拦截提示后关闭
  2. 进入「系统设置」→「隐私与安全性」
  3. 滑到底部能看到「已阻止使用"CSubtitleWorkstation"」→ 点「仍要打开」→ 输入密码确认

此操作每个应用只需做一次,之后双击即可正常打开。


❓ FAQ

ffmpeg 在哪里配置?

应用启动时会自动检测系统 PATH 上的 ffmpeg。如果检测失败或想指定其他版本,进入「设置」页面手动选择 ffmpeg 可执行文件路径。应用会自动在同目录寻找 ffprobe

推荐使用较完整的 ffmpeg 构建:

  • Windows:推荐 Gyan.dev 的 ffmpeg-release-full.7z,同时包含 ffprobe,并支持更多滤镜和 demuxer。
  • macOS:如果字幕压制提示缺少 subtitles / ass filter,建议改装 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,文件名中包含特殊字符无需转义

📊 Star History

Star History Chart


🤝 Contributing

Issues 和建议欢迎!提交 PR 前请确保代码通过 linter 和测试。

📚 文档

About

跨平台字幕压制工具:可视化 ffmpeg 参数、LOGO 叠加、AVS 特效字幕、字幕风险检查与实时进度日志。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages