IINA 下 ass 字幕中文字体问题,怀疑与上游库 libass 有关。不知有没有遇到同样问题的朋友 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hguandl
V2EX    macOS

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

  •  1
     
  •   hguandl 2018-05-11 21:06:15 +08:00 9002 次点击
    这是一个创建于 2724 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题描述

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

    现象截图

    预期结果 Westworld.S02E01.Journey.Into.Night1080p.AMZN.WEB-DL.DDP5.1.H.264-NTb-0001.jpg 实际结果 Westworld.S02E01.Journey.Into.Night.1080p.AMZN.WEB-DL.DDP5.1.H.264-NTb-0002.jpg

    截图中使用的是人人字幕组的 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 费多少脑筋。

    4 条回复    2018-05-12 20:58:02 +08:00
    ZRS
        1
    ZRS  
       2018-05-11 23:04:22 +08:00
    同遇到过这个问题,折腾了很久,最后手动替换包内的 libass 库解决的...

    https://zrstea.com/261/
    ztxgeol
        2
    ztxgeol  
       2018-05-12 15:51:51 +08:00
    是这样的,当年 mpv 就遇到这个问题了,当时的解决方法就是编译 fontconfig 的版本,去年开始虽然换了 IINA,但是不看中文字幕了,也算是解决了问题。。。
    hguandl
        3
    hguandl  
    OP
       2018-05-12 18:28:48 +08:00
    尝试 at 一下作者 @lhc70000,能不能考虑编译的时候使用带 fontconfig 的版本。
    lhc70000
        4
    lhc70000  
       2018-05-12 20:58:02 +08:00
    我觉得最好的方法是搞一个 brew formula,有任何需求自己编译就行了……(如果有人愿意帮忙,请 GitHub 联系,有 issue
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2588 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:44 PVG 21:44 LAX 06:44 JFK 09:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86