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

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

该用户从未签到

6

主题

46

回帖

0

VC币

注册会员

Rank: 2

积分
882
QH7B 发表于 2024-9-3 09:02:21 | 显示全部楼层
b8b41e3c 发表于 2024-9-2 17:38
mkvtool v5.5.5起已经支持对assfonts重命名字体后的ass文件直接进行子集化,无需还原字体名称.
...

非常感谢!这样修改字幕就不用考虑字体了。另外楼上提出的问题我也很费解,各种查阅资料都查不到 \r0 \fn0 这种用法,还有经常会遇到下面这种封装后会导致成品时长异常的代码:




Dialogue: 0,1:59:51.04,1:59:51.54,OPJP,,0,0,0,fx,{\an5\fad(0,500)\c&HE13F0E&\move(664, 1039, 644, 1030)}愛



一直找不到完美的解决方法,虽然添加--stop-after-video-ends参数可以临时解决,但是这样做可能会导致其他轨道数据丢失。
回复

使用道具 举报

该用户从未签到

1

主题

91

回帖

0

VC币

高级会员

Rank: 4

积分
30507
b8b41e3c 发表于 2024-9-3 11:01:05 | 显示全部楼层
本帖最后由 b8b41e3c 于 2024-9-3 11:03 编辑
QH7B 发表于 2024-9-3 09:02
非常感谢!这样修改字幕就不用考虑字体了。另外楼上提出的问题我也很费解,各种查阅资料都查不到 \r0 \fn ...

"\r"是恢复到当前行定义的样式
"\r<style>"是用名叫"<style>"的样式覆盖当前样式
"\r0"在mkvtool里也会报错的(找不到样式"0"),但"\fn0"不会,因为遇到"\fn"或者"\fn0"的时候会用当前行定义的样式去覆盖.(这在spec文档里没写, 但有人说是约定成俗的内容,于是我就这么处理了.)

至于混流的问题就和子集化操作不相关了.

回复

使用道具 举报

该用户从未签到

6

主题

46

回帖

0

VC币

注册会员

Rank: 2

积分
882
QH7B 发表于 2024-9-3 11:56:16 | 显示全部楼层
b8b41e3c 发表于 2024-9-3 11:01
"\r"是恢复到当前行定义的样式
"\r"是用名叫""的样式覆盖当前样式
"\r0"在mkvtool里也会报错的(找不到样式 ...

也就是说遇到 \r0 这种用法报错,直接用记事本替换成 \r 就行了是吗?还有成品时长问题确实和子集化无关,只是这个问题困扰我很长时间,想当题外话请教一下,没有其他意思。
回复

使用道具 举报

该用户从未签到

1

主题

91

回帖

0

VC币

高级会员

Rank: 4

积分
30507
b8b41e3c 发表于 2024-9-3 12:39:04 | 显示全部楼层
本帖最后由 b8b41e3c 于 2024-9-3 12:40 编辑
QH7B 发表于 2024-9-3 11:56
也就是说遇到 \r0 这种用法报错,直接用记事本替换成 \r 就行了是吗?还有成品时长问题确实和子集化无关 ...

不是很清楚有没有所谓约定成俗的内容,如果"\r0"等同于"\r"(就像约定成俗"\fn0"等同于"\fn")的话,是可以的.

混流问题我也不太清楚,我本人一直坚持ass转pgs然后再混流进mkv.

回复

使用道具 举报

该用户从未签到

6

主题

46

回帖

0

VC币

注册会员

Rank: 2

积分
882
QH7B 发表于 2024-9-5 14:13:06 | 显示全部楼层
b8b41e3c 发表于 2024-9-2 17:38
mkvtool v5.5.5起已经支持对assfonts重命名字体后的ass文件直接进行子集化,无需还原字体名称.
...

发现了一个小问题,当 \fn 字体名后面有空格的情况,例如:
  1. Dialogue: 0,0:09:34.70,0:09:37.10,Default,,0,0,0,,{\fnQEUXSHBL \bord0\c&HB1A4D9&\pos(652,126)\fad(300,300)}古桥公主和王子公开接吻计划
复制代码

由于 QEUXSHBL 后面有个空格无法被还原,子集化时还是会提示缺少 QEUXSHBL 字体。

另外在调用 mkvmerge 混流时建议加上 --enable-legacy-font-mime-types 参数,标准的mime类型有些播放器不识别。
回复

使用道具 举报

该用户从未签到

1

主题

91

回帖

0

VC币

高级会员

Rank: 4

积分
30507
b8b41e3c 发表于 2024-9-7 11:18:31 | 显示全部楼层
本帖最后由 b8b41e3c 于 2024-9-7 11:25 编辑
QH7B 发表于 2024-9-5 14:13
发现了一个小问题,当 \fn 字体名后面有空格的情况,例如:

由于 QEUXSHBL 后面有个空格无法被还原,子 ...

关于空格的问题,是assfonts在取原字体名的时候忽略了后续空格,而子集化重命名字体的时候又没擦好屁股.可能作者认为播放器会自动忽略空格吧.这是assfonts的bug.硬要说的话,还是最初的ass文件写得不够规范.这个问题应该属于少见类.
mkvtool的字体名识别是比较严格的.毕竟在"\a<b>\c"中"<b>"里所有的内容都应该被识别成\a指令的参数.
--enable-legacy-font-mime-types 这个以前有人也建议过,但这个是区分版本的,如果有人用了旧版本的mkvtoolnix就会报错,所以为了保持一致性没加.到底是哪个播放器会出问题,至少PotPlayer和mpv系列的不会.
回复

使用道具 举报

该用户从未签到

6

主题

46

回帖

0

VC币

注册会员

Rank: 2

积分
882
QH7B 发表于 2024-9-7 16:15:40 | 显示全部楼层
b8b41e3c 发表于 2024-9-7 11:18
关于空格的问题,是assfonts在取原字体名的时候忽略了后续空格,而子集化重命名字体的时候又没擦好屁股.可能 ...

主要是苹果设备的一些古老播放器,nPlayer之类的。不过用mkvpropedit批量转换也就几分钟的事,不集成那个参数也问题不大。

另外关于微软雅黑字体,系统自带的版本没有Semibold和Semilight字重,我能想到的处理方法是用FontForge提取自带版本的空格字符强行添加到超级字体整合包的版本里,也不知道这样生成的新字体子集化后播放器能不能识别。
回复

使用道具 举报

该用户从未签到

1

主题

91

回帖

0

VC币

高级会员

Rank: 4

积分
30507
b8b41e3c 发表于 2024-9-7 20:45:36 | 显示全部楼层
QH7B 发表于 2024-9-7 16:15
主要是苹果设备的一些古老播放器,nPlayer之类的。不过用mkvpropedit批量转换也就几分钟的事,不集成那个 ...

理论上是可以识别的,我字体兼容性是用PotPlayer+mpv测试的,其他的播放器没测试过,你也可以修改下源码把判断"\u0020"的部分去掉再编译,但这样至少PotPlayer会不正常了.(类似的还有必须至少包含一个字母,如果有数字,必须包含0-9这种奇葩的规则.)
回复

使用道具 举报

  • TA的每日心情
    慵懒
    昨天 00:09
  • 签到天数: 812 天

    [LV.10]以坛为家III

    23

    主题

    362

    回帖

    3986

    VC币

    星辰大海

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

    积分
    537213
    chaos32767 发表于 2024-10-3 20:28:02 | 显示全部楼层
    本帖最后由 chaos32767 于 2024-10-3 20:56 编辑

    災情來自這裡:
    【ListAssFonts: 小工具,分析字幕使用的字型 (2023/06/13 更新)】
    https://bbs.acgrip.com/forum.php ... 56&extra=#pid110582

    「憑一口氣,點一盞燈,要知道念念不忘必有迴響,有燈就有人。」
    回复

    使用道具 举报

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

    [LV.1]初来乍到

    2

    主题

    104

    回帖

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    77344
    wyzdwdz  楼主| 发表于 2024-10-3 21:00:21 | 显示全部楼层
    本帖最后由 wyzdwdz 于 2024-10-3 21:07 编辑
    QH7B 发表于 2024-9-2 08:04
    感谢回复,期待新版本!另外下个版本能提供一个将字体改名处理后的ass文件还原的功能吗?就是把随机字体名 ...

    字体改名后是无法还原的,因为这个改名是不可逆的。本工具生成的随机名会出现多对一的情况,即几个不同名称的字体子集化后的字体名改为相同的一个。字幕里面的 Assfonts Rename Info 仅仅是拿来作为参考,不能用这个来还原。

    这样做的原因是处理粗体和斜体的情况,很多英文字体的正体、粗体、斜体分别对应不同的字体,比如 Arial 字体家族,它们的 family name 都是 Arial,一般我们使用的时候只需要写 Arial,但是实际上当我们在 ass 字幕中指定一个样式是粗体时,实际使用的是 Arialbd.ttf 字体,而不是 Arial.ttf。这时,软件在做子集化时,应该对于这个样式子集化 Arialbd.ttf 这个字体。

    但是,如果同时字幕中还有一个样式也用的是 Arial 字体,却用的是普通版本,即 Arial.ttf ,那么对于这个样式,应该子集化 Arial.ttf。同样的,软件在给这些字体改名的时候,由于它们在字幕中对应的字体名称都是 Arial,所以改名后这些字体的名称也应该都是相同的。

    回复

    使用道具 举报

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

    本版积分规则

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