找回密码
 立即注册
楼主: wyzdwdz

assfonts: 字体文件子集化工具,提供嵌入字幕功能(更新v0.7.3)

  • TA的每日心情
    开心
    2022-11-25 20:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    104

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    77360
    wyzdwdz  楼主| 发表于 2024-10-3 21:29:16 | 显示全部楼层
    本帖最后由 wyzdwdz 于 2024-10-3 21:37 编辑
    chaos32767 发表于 2024-10-3 20:28
    災情來自這裡:
    【ListAssFonts: 小工具,分析字幕使用的字型 (2023/06/13 更新)】
    https://bbs.acgrip.com ...

    唉,搞了这么久,越发觉得字幕的字体子集化就是一个伪需求,因为把字体嵌入 ass 字幕或者是嵌入视频文件就是为了保证字幕显示的跨平台一致性。但是 ass 又是一个可以自由编辑的文本格式,可编辑性与跨平台显示一致性实际上是相悖的,就好比 word 文档在不同操作系统或者不同软件打开是很难保证显示的内容是完全相同的。又或者说 ass 字幕一开始诞生的目的就不是为了追求所谓的在不同设备上显示完全相同的内容,所以 pgs 字幕真的是目前的唯一解,要不然我们就得开发一个全新的类 pdf 格式的矢量字幕。

    评分

    参与人数 2活跃度 +7400 收起 理由
    chaos32767 + 1000
    Yukarubih + 6400 有道理

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 02:34
  • 签到天数: 830 天

    [LV.10]以坛为家III

    23

    主题

    372

    回帖

    4134

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    539703
    chaos32767 发表于 2024-10-3 23:19:10 | 显示全部楼层
    本帖最后由 chaos32767 于 2024-10-3 23:35 编辑

    看片就應該開開心心簡簡單單的。
    播放器打開,影片丟進去,然後……幹又是缺字又是亂碼是哪一家壓的這麼爛以後不抓他們家的東西了啦!!!
    還是回頭去看動畫瘋那個爛爛的硬崁字幕。
    唉。

    另外多講兩句。
    【超级字体整合包 XZ】,不精準統計,一萬八千個字型檔。
    然後各家字型公司還在不斷的生出新的字型。
    然後字幕組不斷換更新更炫的字型。
    然後就是字幕動不動就缺字。
    然後就是問題出不完。
    大家爆炸吧!
    「憑一口氣,點一盞燈,要知道念念不忘必有迴響,有燈就有人。」
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-31 01:33
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    69

    主题

    1377

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    2969813

    卓越贡献

    tonyhsie 发表于 2024-10-4 06:18:53 | 显示全部楼层
    wyzdwdz 发表于 2024-10-3 21:00
    字体改名后是无法还原的,因为这个改名是不可逆的。本工具生成的随机名会出现多对一的情况,即几个不同名 ...

    看完還是沒有理解,為什麼會無法還原



    如你所言,Arial 有 regular、bold、italic、bold italic 四種子型


    四種子型子集化後,是同一個亂數名字,還是四個亂數名字?

    子集化的時候,會更改 .ass 檔案裡相關字型的粗體或斜體設定嗎?

    請問改名後無法還原的關鍵因素是什麼?


    謝謝
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-25 20:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    104

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    77360
    wyzdwdz  楼主| 发表于 2024-10-4 19:10:45 | 显示全部楼层
    本帖最后由 wyzdwdz 于 2024-10-4 19:33 编辑
    tonyhsie 发表于 2024-10-4 06:18
    看完還是沒有理解,為什麼會無法還原


    这四个子集化后有可能会改为同一个乱序名字,粗体和斜体的设置保持不变,只更改字体名。

    至于为什么无法还原,我举一个例子,假设我有一个 ass 文件是这样的


    [V4+ Styles]
    Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
    Style: One,Arial,40,&H00FFFFFF,&H00FFFFFF,&H00FFFFFF,&H00FFFFFF,0,1,0,0,100,100,0,0,1,2,1,2,30,30,10,1
    Style: Two,Arial Italic,40,&H00FFFFFF,&H00FFFFFF,&H00FFFFFF,&H00FFFFFF,0,0,0,0,100,100,0,0,1,2,1,2,30,30,10,1

    [Events]
    Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
    Dialogue: 0,0:00:00.00,0:00:10.00,One,,0,0,0,,This is Style One, it is Arial Italic!!
    Dialogue: 0,0:00:10.00,0:00:20.00,Two,,0,0,0,,This is Style Two, it is also Arial Italic!!

    子集化并改名后是这样的

    [Assfonts Rename Info]
    Arial ---- GHTXBYBR
    Arial Italic ---- GHTXBYBR

    [V4+ Styles]

    Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
    Style: One,GHTXBYBR,40,&H00FFFFFF,&H00FFFFFF,&H00FFFFFF,&H00FFFFFF,0,1,0,0,100,100,0,0,1,2,1,2,30,30,10,1
    Style: Two,GHTXBYBR,40,&H00FFFFFF,&H00FFFFFF,&H00FFFFFF,&H00FFFFFF,0,0,0,0,100,100,0,0,1,2,1,2,30,30,10,1

    [Events]

    Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
    Dialogue: 0,0:00:00.00,0:00:10.00,One,,0,0,0,,This is Style One, it is Arial Italic!!
    Dialogue: 0,0:00:10.00,0:00:20.00,Two,,0,0,0,,This is Style Two, it is also Arial Italic!!

    这个例子比较特殊,仔细看,原始 ass 文件 [V4+ Styles] 中样式 One 和 样式 Two 尽管它们的 fontname 不同,一个是 Arial,一个是 Arial Italic。但是由于样式 One 的 Italic 值为 1,所以它实际上使用的还是 Arial Italic 这个字体。因此,对于这个文件,我们只需要对 Arial Italic 这个字体做子集化,并修改它的名字。但是还原的时候就出了问题,如果你把所有的 GHTXBYBR 都替换成 Arial,那么显然样式 Two 会出错,因为它应该是 Arial Italic。

    当然如果一定要还原原始信息,目前 [Assfonts Rename Info] 中提供的信息是不够的,需要详细记录字幕中每一处被修改的 fontname 的原始字体。

    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-31 01:33
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    69

    主题

    1377

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    2969813

    卓越贡献

    tonyhsie 发表于 2024-10-4 23:27:13 | 显示全部楼层
    wyzdwdz 发表于 2024-10-4 19:10
    这四个子集化后有可能会改为同一个乱序名字,粗体和斜体的设置保持不变,只更改字体名。

    至于为什么无法 ...

    粗體/斜體其實有兩種實現方式

    一種是 "Arial Italic",  這種字型名稱跟 "Arial" 完全不同的斜體
    一種是 "Arial" 加上 {\i1} 或在 style 行設定 italic 值為 -1

    如果是第一種方式,也就是你舉的例子的話
    子集化後其實不應該跟 Arial 使用相同的名字

    也就是 "Arial" 子集化後是一個名字,"Arial Italic" 子集化後是完全不同的另一個名字


    至於第二種方式的話,由於並沒有使用兩種不同 fontname,所以子集化後也只會有一種名字


    而這兩種方式,子集化後應該還是可以還原回原本的字幕才是
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-25 20:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    104

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    77360
    wyzdwdz  楼主| 发表于 2024-10-5 02:50:52 | 显示全部楼层
    本帖最后由 wyzdwdz 于 2024-10-5 02:54 编辑
    tonyhsie 发表于 2024-10-4 23:27
    粗體/斜體其實有兩種實現方式

    一種是 "Arial Italic",  這種字型名稱跟 "Arial" 完全不同的斜體

    你说的这两种实现方式在播放器中选择的其实都是 Arial Italic.ttf 这个字体,表现出来的结果没有任何区别。样式 One 的 fontname 是 Arial,但是由于它的 Italic 为 1(这里 1 或者 -1 都可以),即你说的第二种方式,那么播放器在显示样式 One 时就会直接调用 Arial Italic.ttf 来实现这个斜体效果(只用 Arial.ttf 并不能实现斜体效果)。

    操作系统或者播放器匹配用来显示的字体 (font match) 时一般使用一套算法,我这里参考的是 libass 库中内置的字体匹配算法,当你告诉播放器我需要一个名字为 Arial 的斜体字体时,它会把这一需求转换为 Arial(400, 100) 这一形式,其中 Arial 为 fontname,400 表示字体的粗细度(默认为400),100 表示字体的倾斜度(默认为0)。算法会首先匹配 family name,它会挑出所有 family name 为 Arial 的字体,然后根据一套打分规则计算其中每一个字体与目标字体的距离,最后选取距离最小的作为显示字体。那么在这套规则下, Arial(400, 100) Arial Italic(400, 0) 对应的都是 Arial Italic.ttf。

    那么既然播放器只使用了 Arial Italic.ttf 这一个字体,我们自然只需要对它一个进行子集化,同样的也只改了这一个字体的名字(注意这里更改的是字体的 family name),也就是 GHTXBYBR,由于子集化后只有这一个新字体,那么自然 Arial 与 Arial Italic 都得改为同一个新名字。
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-12-31 01:33
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    69

    主题

    1377

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    2969813

    卓越贡献

    tonyhsie 发表于 2024-10-5 06:07:36 | 显示全部楼层
    wyzdwdz 发表于 2024-10-5 02:50
    你说的这两种实现方式在播放器中选择的其实都是 Arial Italic.ttf 这个字体,表现出来的结果没有任何区别 ...

    我想這樣的作法,是有點混淆了前端跟後端的區別


    前端:ass 檔案實際使用的 fontname
    後端:ass 檔案實際會調用到的字型檔案

    fontname 為 Arial 或 Arial Italic,顯然是兩種不同的 fontname
    雖然對這兩種 fontname 來說,後端可能都是調用同一個 ariali.ttf 沒錯
    但不見得前端就一定要統一成一個名字

    會無法還原回原本的字幕,關鍵也是在此

    如果前端是分成兩個名字分別處理,以後也自然能還原回本名
    但如果在前端就把這兩個不同 fontname 改名成同一名稱,之後當然就無法還原了

    点评

    一开始实现这个功能的时候没有考虑还原的问题,等我之后想一个比较优雅的解决方案吧  发表于 2024-10-5 08:49
    看你覺得你的工具要不要提供還原功能了。Assfonts Rename Info 這東西看起來就是要給邏原用的,但如果還原後粗斜體可能會亂套,也會讓人無所適從  发表于 2024-10-5 08:10
    但是子集化后只剩一个字体了,除非我给这一个字体好几个名字,否则我就只能把这些 fontname 都替换成一个  发表于 2024-10-5 07:21
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表