Skip to content

ass_render_difference

MIRIMIRIM edited this page Feb 1, 2024 · 2 revisions

下列主要为测试的一些 libass 与 xySubFilter 等主流 VSFilter 不一致渲染的情况,播放端如何避免或解决问题,以及我(MIR)常用的处理方式

可以与 Differences between Libass and VSFilters 对照阅读

  1. \frx \fry 在 ASS 分辨率(PlayResXPlayResY)与播放视频分辨率不同时的渲染效果

    此问题通过 headers LayoutResX / Y 来解决,支援滤镜可以参阅 Differences-between-Libass-and-VSFilters#layoutres

  2. \p 大于 1 时的缩放效果

    • 错误:MPC-BE 内置的 VSFilter
    • 正确:xy-VSFilter、xySubFilter、VSFilterMod、mpv
    • 处理:以正确效果为准
  3. bord shad blur 的渲染效果

    • 错误:xySubFilter 等 VSFilter
    • 正确:mpv 配置 sub-ass-vsfilter-blur-compat=no
    • 处理:影响较小,一般忽略此类标签的效果不同,特殊情况另做分析
  4. 部分字体的竖排效果,如 \fn@Source Han Sans

    • 示例:libass/issues/619
    • 错误:所有 VSFilter 系滤镜,应该是 GDI 的问题?目前无法解决
    • 正确:所有基于 libass 的字幕滤镜
    • 处理:以 libass 为准, libass 可能后续会改为和 VSFilter 同样的显示效果,但由于这个问题在 Windows 下难以解决,可能会考虑对 VSF 系渲染效果的兼容,同时在竖排时尽量避免如「思源」字体这类变化较大的字体 考虑制作一个转换 fs 的程序辅助
  5. fay 的渲染效果

    • libass 在 0.15.1 中使其与 xy-VSFilter 系保持一致
    • 处理:以 xy-VSFilter / libass 0.15.1+ 效果为准
  6. 缺失字体或字符时的字体 Fallback

    • 以简体中文 Windows 10 为例,VSFilter Fallback 到中易宋体,libass Fallback 到微软雅黑,依据系统语言的不同会 Fallback 到不同的默认字体 Fallback 应该是 GDI 和 DWrite 的区别?不确定现在的行为
    • 处理:制作时应避免出现字符尤其是特殊字符的缺失,同时希望观看者无论何时都推荐安装或挂载 ASS 中使用的所有相应版本的字体
  7. ASS 中颜色的色彩空间

    • 最初的 VSFilter 和 r5.2.3 之前的 VSFilterMod 无论何时都只会按照 BT.601 做 YCbCr 和 RGB 之间的颜色转换,xy-VSFilter 在 ASS 头部信息(Script Info)增加了 YCbCr Matrix 以方便按照指定的色彩空间做颜色转换,mpv 使用 sub-ass-vsfilter-color-compat=basic 来兼容指定的 YCbCr Matrix,assrender 也做了相应适配
    • 处理:ASS 的 YCbCr Matrix 均指定为视频的色彩空间(一般情况下,SD 为 BT.601,HD 为 BT.709)None
  8. 观看 PAR 不为 1:1 的视频时的字幕渲染

    • VSFilter 系滤镜、 More - Renderer layout options - Use Original Video Size 的 xySubFilter、sub-ass-vsfilter-aspect-compat=yes 的 mpv、Aegisub 处理字幕时会先按原始视频渲染再按指定的 DAR 拉伸
    • 处理:为避免渲染效果问题,不会基于 PAR 不为 1:1 的视频制作字幕,也不建议用 PAR 不为 1:1 的视频观看字幕
  9. 句末全角空格

    • VSFilter 系滤镜会忽略该空格,libass 会正常渲染
    • 处理:以 libass 为准,删除句末的全角空格