
IINA 在渲染 ass 特效字幕时,无法正确调用已安装的字体,而是 fallback 到 Helvetica 或苹方。
预期结果
实际结果 
截图中使用的是人人字幕组的 ass 外挂字幕,理应使用的字体是微软雅黑(已安装),而实际情况却是变成了观感 细很多的 Helvetica。同样使用 libass 的 FFmpeg 也会出现类似问题:
$ ffmpeg -i Westworld.S02E01.Journey.Into.Night.1080p.AMZN.WEB-DL.DDP5.1.H.264-NTb.mkv -vf ass=sub.ass output.mkv ... [Parsed_ass_0 @ 0x7fa292503140] fontselect: (方正黑体_GBK, 400, 0) -> /System/Library/Fonts/Helvetica.ttc, -1, Helvetica [Parsed_ass_0 @ 0x7fa292503140] fontselect: (方正黑体_GBK, 700, 0) -> /System/Library/Fonts/Helvetica.ttc, -1, Helvetica-Bold [Parsed_ass_0 @ 0x7fa292503140] Glyph 0x300A not found, selecting one more font for (方正黑体_GBK, 700, 0) [Parsed_ass_0 @ 0x7fa292503140] fontselect: (方正黑体_GBK, 700, 0) -> /System/Library/Fonts/PingFang.ttc, -1, PingFangSC-Semibold frame= 47 fps=0.0 q=0.0 size= 11kB time=00:00:02.71 bitrate= 33.0kbits/s[Parsed_ass_0 @ 0x7fa292503140] fontselect: (微软雅黑, 400, 0) -> /System/Library/Fonts/Helvetica.ttc, -1, Helvetica [Parsed_ass_0 @ 0x7fa292503140] Glyph 0x6B22 not found, selecting one more font for (方正黑体_GBK, 400, 0) [Parsed_ass_0 @ 0x7fa292503140] fontselect: (方正黑体_GBK, 400, 0) -> /System/Library/Fonts/PingFang.ttc, -1, PingFangSC-Regular 一开始我百思不得其解,对 fontconfig 进行各种设置都没有作用。后来在搜到了这个 issue,才知道新版的 libass 使用了 macOS 原生的 CoreText 取代了 fongconfig,很多字体相关问题都是从这开始的。
这个方法比较简单直接,在字体册.app离我们可以得知“微软雅黑”和“方正黑体_GBK ”的 PostScript 名称为 MicrosoftYaHei 和 FZHTK--GBK1-0,打开字幕文件,把字体名称批量替换掉即可。这比较适合少量的字幕文件。
libass 库,使用依赖 fontconfig 的版本另一种方法就是直接更换库,可以从项目地址自行编译,在 configure 选项里加入 --enable-fontconfig --disable-coretext 即可;或是直接 brew install libass --with-fontconfig。然后找到编译出来的 dylib 文件,替换 /Applications/IINA.app/Contents/Frameworks/libass.9.dylib。
现在还无法完全确定是 libass 的实现问题还是 CoreText 本身问题。不过考虑到之前 Office 等软件上字体名称的不匹配,后者的可能性比较大。为了解决这个问题折腾了一下午,不知道以后还会为 macOS 上的 bugs/features 费多少脑筋。
1 ZRS 2018-05-11 23:04:22 +08:00 |
2 ztxgeol 2018-05-12 15:51:51 +08:00 是这样的,当年 mpv 就遇到这个问题了,当时的解决方法就是编译 fontconfig 的版本,去年开始虽然换了 IINA,但是不看中文字幕了,也算是解决了问题。。。 |
4 lhc70000 2018-05-12 20:58:02 +08:00 我觉得最好的方法是搞一个 brew formula,有任何需求自己编译就行了……(如果有人愿意帮忙,请 GitHub 联系,有 issue |