IINA 下 ass 字幕中文字体问题,怀疑与上游库 libass 有关。不知有没有遇到同样问题的朋友

2018-05-11 21:06:15 +08:00
 hguandl

问题描述

IINA 在渲染 ass 特效字幕时,无法正确调用已安装的字体,而是 fallback 到 Helvetica 或苹方。

现象截图

预期结果 实际结果

截图中使用的是人人字幕组的 ass 外挂字幕,理应使用的字体是微软雅黑(已安装),而实际情况却是变成了观感 细很多的 Helvetica。同样使用 libassFFmpeg 也会出现类似问题:

$ 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,很多字体相关问题都是从这开始的。

解决方案

方案一 修改字幕,把字体名改成 PostScript 名称

这个方法比较简单直接,在字体册.app离我们可以得知“微软雅黑”和“方正黑体_GBK ”的 PostScript 名称为 MicrosoftYaHeiFZHTK--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 费多少脑筋。

7364 次点击
所在节点    macOS
4 条回复
ZRS
2018-05-11 23:04:22 +08:00
同遇到过这个问题,折腾了很久,最后手动替换包内的 libass 库解决的...

https://zrstea.com/261/
ztxgeol
2018-05-12 15:51:51 +08:00
是这样的,当年 mpv 就遇到这个问题了,当时的解决方法就是编译 fontconfig 的版本,去年开始虽然换了 IINA,但是不看中文字幕了,也算是解决了问题。。。
hguandl
2018-05-12 18:28:48 +08:00
尝试 at 一下作者 @lhc70000,能不能考虑编译的时候使用带 fontconfig 的版本。
lhc70000
2018-05-12 20:58:02 +08:00
我觉得最好的方法是搞一个 brew formula,有任何需求自己编译就行了……(如果有人愿意帮忙,请 GitHub 联系,有 issue

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454158

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX