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
|