解决 IINA 及 mpv 无法正确挂载 ass 字幕字体问题
在 macOS 下使用 mpv 及基于 mpv 的播放器如 IINA 时遇到了尽管所有字体均已正确安装在~/Library/Fonts/
,却无法正确识别字幕中所指定的字体名的问题,该问题主要体现在东亚文字字体中。
在 mpv log 中可以看出字体无法被正确匹配,最终指向系统默认字体,对观看体验造成了较严重的影响。
1 | [sub/ass] fontselect: Using default font family: (EPSON 太丸ゴシック体B, 700, 0) -> /System/Library/Fonts/Helvetica.ttc, -1, Helvetica-Bold |
这个问题是因为 mpv 采用了 libass 作为 ass 字幕的渲染器,libass 从 0.13.0 版起采用了 macOS 原生的 Coretext 作为 font selection backends。但很不幸的是,Coretext 进行字体选择是基于字体的 PostScriptName,而字幕组在制作字幕使用字体时均使用了字体的 FullName。
以方正准圆为例,其 FullName 为方正准圆_GBK
, PostScriptName 为FZY3K--GBK1-0
,字幕组使用前者的原因显而易见。
想要修复这个问题,需要禁用 libass 的 Coretext,更换为 fontconfig 方式,默认使用 FullName 匹配字体。
在命令行下执行,brew reinstall libass --with-fontconfig
,homebrew 就会使用--disable-coretext
参数来编译 libass。
编译安装完成后,在~/.config/mpv/
目录下新建fonts.conf
配置文件,文件内容可参考 fonts.conf。其中可以自己指定字体的 alias,和搜索路径等。不过我还没弄明白这个文件是否为必须,可以考虑先不添加。
如果你是使用brew install mpv
命令安装的 mpv,且字体安装在~/Library/Fonts/
或~/.local/share/fonts/
此时字体选择应该已正常。
如果你安装的是已编译打包好装入/Application
文件夹的程序, 如从官网下载或使用brew cask
方法安装。则需要手动替换软件包中的 libass library。
如果你不懂得如何编译,可以点击下载我编译好的 libass.9.dylib 文件完成替换。
以 IINA 为例:
使用编译好的 libass library/usr/local/Cellar/libass/0.13.7/lib/libass.9.dylib
,替换掉 IINA.app/Contents/Frameworks/libass.9.dylib
即可解决问题。mpv 也同理。
替换后打开应用可能会被提示未受信任的开发者开发的应用程序,这是因为对软件包的修改破坏了开发者签名,在安全性与隐私设置中同意即可使用。
————————-Update 2019.12.30—————————–
未安装 fontconfig 相关依赖的用户可能会导致替换文件后程序crash等问题,这是因为我编译的libass.9.dylib
中采用了绝对路径,这里提供一份 @LIznzn 提供的修复版本,使用方法同上,感谢 LIznzn 。
————————-Update 2019.12.30—————————–
修正前后的效果对比如下,强迫症终于可以舒服的看动画啦。
修正前:
修正后: