XySubFilter是运行在 Windows 平台 DirectShow 播放器上的一款外挂字幕渲染滤镜,由 xy-VSFilter 项目另外开发,以动态链接库 XySubFilter.dll 的形式注册到系统中使用。它与 xy-VSFilter 的最大区别在于不把字幕叠加到视频画面上,而是把字幕单独渲染成位图,通过专门的接口交给视频渲染器在显示阶段合成,因此字幕可以按输出分辨率渲染、由 GPU 参与混合。它通常与 madVR 搭配使用,也被 MPC-HC、MPC-BE 等播放器以特殊方式支持[1]。
定义
XySubFilter 是一个面向 Windows 平台 DirectShow 播放器的字幕渲染滤镜,文件名为 XySubFilter.dll,需要以管理员权限运行安装脚本注册到系统中,之后在播放器的字幕渲染器选项里选用[2]。它属于 xy-VSFilter 项目的一部分,与该项目的另一个组件 xy-VSFilter(VSFilter.dll)共用大部分渲染代码,但两者在播放链路中的位置不同[3]。
XySubFilter 只负责把字幕变成位图并交给下游,不直接改写视频帧,因此它必须依赖支持相应字幕接口的视频渲染器才能工作,与老式滤镜可以配合任意渲染器的情况不同[1]。
原理
传统字幕滤镜以变换滤镜的形式串在视频解码器与视频渲染器之间,先把字幕叠加到收到的视频帧上,再把结果交给渲染器。这种做法使字幕只能在视频原始分辨率上渲染,分辨率低于显示器时字体会发虚、出现锯齿;同时因为解码器与渲染器之间多了一个环节,原生 DXVA2 硬件解码无法使用,反交错也会受到影响[1]。
XySubFilter 的位置在分离器与渲染器之间,不与视频解码器相连。它把字幕输出为独立的 4:4:4 RGB 位图,按视频渲染器请求的分辨率提交,字幕的合成与呈现时机全部由渲染器控制。这样字幕可以按显示分辨率而非视频分辨率渲染,画面放大后字幕依然锐利,也不会阻断 DXVA2 解码与反交错标记[1]。
字幕数据与渲染器之间通过名为 SubRenderIntf 的接口传递。该接口由 madVR 的作者 madshi 设计,基本思路是让 XySubFilter 不再承担呈现与同步职责,只做位图投递,由视频渲染器决定何时显示、以多大尺寸显示。字幕位图还能随视频渲染器一起完成色彩校正与缩放[4]。
由于字幕位图由渲染器缩放,图像类字幕可以适配任意视频分辨率,而 xy-VSFilter 需要图形字幕分辨率与视频一致。XySubFilter 还提供了「按原始视频尺寸渲染」的兼容选项,开启后其表现接近传统滤镜的渲染效果[5]。
发展历程
XySubFilter 的研发在 2013 年前后展开。当年的开发讨论显示,其早期版本已能与 madVR 配合,但存在字幕接口不规范导致的兼容问题;2013 年 7 月 23 日完成了 ASS 字幕黑边渲染的初步实现。
项目以 Beta 版本持续迭代,编号依次有 3.1.0.546、3.1.0.697(BETA2)、3.1.0.746(BETA3)等[6][7]。开发者提示,升级到 BETA3 时必须执行安装脚本而不能只替换动态链接库,否则带外挂字幕进入 DirectShow 播放图所需的自动加载组件不会被安装[8]。
原项目长期停更后出现了若干第三方维护分支。pinterf 的分支把版本推进到 3.2.0.810(2024 年 1 月),并在 x86、x64 平台上同时提供 VSFilter.dll 与 XySubFilter.dll[8]。另一条分支由 Masaiki 维护,把 libass 作为 ASS/SSA 字幕的渲染后端嵌入 XySubFilter,该思路源自原项目的一个合并请求,自 2022 年起持续发布,版本以日期命名,如 20240526、20251002、20260721 等,并陆续加入 HDR 元数据保留、外部 CSRI 渲染后端切换等功能[2][9]。
2025 年 1 月,MPC Video Renderer 加入了与 XySubFilter 直接连接的专用版本,使字幕滤镜可与视频渲染器在此前依赖包装滤镜的情况下直接交互,新版本中滤镜列表里的连接对象由播放器变为视频渲染器[10]。
应用
XySubFilter 的主要使用场景是在支持 SubRenderIntf 接口的播放环境中渲染 ASS、SSA、SRT 以及 PGS/HDMV 等格式的字幕,尤其是字幕带有复杂特效、需要按显示分辨率清晰显示的场合[11]。
它最典型的搭配是 madVR,由 madVR 直接充当字幕消费者;MPC-HC 与 MPC-BE 通过 EVR-CP、VMR9 或内置的转发代码也能使用它,MPC-BE 的选项位于「字幕 → 字幕渲染器」,MPC-HC 的选项位于「回放 → 输出 → 字幕渲染器」[4][2]。使用前通常需要在播放器中关闭自动加载字幕,以免内置字幕渲染器与它同时工作[5]。
该滤镜以动态链接库形式分发,安装与卸载依靠随包提供的批处理脚本完成注册与反注册,配置入口由动态链接库自身提供。它可与 xy-VSFilter 共存:使用 madVR 时由 XySubFilter 接管字幕,使用其他视频渲染器时由 xy-VSFilter 处理[5][12]。
由于它要求渲染器侧提供对应接口,像 Total Commander 的 Lister 这类没有独立输出、又不支持无窗口渲染模式的宿主无法使用,只能改用 VSFilter.dll[13]。
局限
XySubFilter 无法在任意播放器中通用。它的前提是视频渲染器实现 SubRenderIntf 或播放器代为转发,在缺少这一支持的环境里根本不会进入播放图,这与 xy-VSFilter 可配合任何渲染器的情况形成对比[1]。
它与 madVR 配合渲染图形字幕时存在兼容问题:当视频宽高比与字幕不匹配时,图形字幕会被拉伸变形,而 MPC-HC、MPC-BE 自带的字幕渲染器不会出现该现象[14][15]。有用户反馈它也不支持加载外挂图形字幕[15]。
在色彩处理上,XySubFilter 交给下游的是 RGB 格式的字幕位图,自身不做 RGB 到 YUV 的转换,字幕颜色是否准确取决于播放器或渲染器的判断,因此部分情况下会忽略字幕脚本里的 YCbCr Matrix 设置,转而根据视频分辨率进行推测[15]。
性能方面,字幕渲染本身是单线程的,XySubFilter、xy-VSFilter 与 libass 都只能利用单个 CPU 核心[16]。有报告指出在 4K 高帧率片源中,首次出现字幕后会出现持续掉帧,而播放器内置字幕渲染器没有该现象;也有观点认为随着内置渲染器改进,XySubFilter 早年相对内置渲染器的性能优势已不明显[17]。
参见
-
xy-VSFilter —— 同一项目中的传统字幕滤镜,以 VSFilter.dll 分发,把字幕直接叠加到视频帧上。
-
madVR —— 视频渲染器,XySubFilter 最典型的搭档,直接充当字幕位图的接收方。
-
libass —— 跨平台字幕渲染库,Masaiki 分支将其嵌入 XySubFilter 以渲染 ASS/SSA 字幕。
-
DirectShow —— Windows 上的多媒体播放框架,XySubFilter 以滤镜形式接入其中。
-
ASS 字幕格式 —— 支持特效与排版的高级字幕格式,XySubFilter 的主要处理对象。
-
MPC-HC —— 支持通过转发代码使用 XySubFilter 的播放器之一。
参考资料
- showpost [引用日期2026-10-14]
- github.com 上的网页 [引用日期2026-10-14]
- Doom9's Forum - View Single Post [引用日期2026-10-14]
- printthread [引用日期2026-10-14]
- showpost [引用日期2026-10-14]
- Releases · Cyberbeing/xy-VSFilter - Skip to content [引用日期2026-10-14]
- Cyberbeing/xy-VSFilter 3.1.0.697 on GitHub [引用日期2026-10-14]
- pinterf/xy-VSFilter: xy-VSFilter · GitHub [引用日期2026-10-14]
- Masaiki/xy-VSFilter 20260721 on GitHub [引用日期2026-10-14]
- MPC-BE forum [引用日期2026-10-14]
- xy-vsfilter/xysubfilter完美顯示字幕特效和提高字幕質素的濾鏡 - XFastest 最夯的電腦領域 [引用日期2026-10-14]
- Subtitle font/size [引用日期2026-10-14]
- Recommended filters for audio/video in Lister [引用日期2026-10-14]
- xyVSFilterv3.2.0.806外挂字幕插件汉化版 [引用日期2026-10-14]
- xySubFilter 无视字幕"YCbCr Matrix" [引用日期2026-10-14]
- showthread [引用日期2026-10-14]
- printthread [引用日期2026-10-14]