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

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

1

主题

102

回帖

0

VC币

高级会员

Rank: 4

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

mkvtool v5.5.5起已经支持对assfonts重命名字体后的ass文件直接进行子集化,无需还原字体名称.
回复

使用道具 举报

0

主题

10

回帖

0

VC币

中级会员

Rank: 3Rank: 3

积分
6779
deadblue 发表于 2024-9-2 21:17:01 | 显示全部楼层
本帖最后由 deadblue 于 2024-9-2 21:19 编辑

\fn0会识别为字体0

  1. [WARN] Missing the font: "0" (400,0)
复制代码

  1. Dialogue: 0,0:07:35.13,0:07:38.55,Comment,,0,0,0,,{\an7}註:{\u1}あたし(atasi){\u0\fn0}\N女性專用自稱
复制代码

点评

\fn0应该是什么意思?\fn还有别的用法吗?  发表于 2024-9-5 00:08
回复

使用道具 举报

17

主题

106

回帖

0

VC币

中级会员

Rank: 3Rank: 3

积分
9993
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

主题

102

回帖

0

VC币

高级会员

Rank: 4

积分
30552
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文档里没写, 但有人说是约定成俗的内容,于是我就这么处理了.)

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

回复

使用道具 举报

17

主题

106

回帖

0

VC币

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

1

主题

102

回帖

0

VC币

高级会员

Rank: 4

积分
30552
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.

回复

使用道具 举报

17

主题

106

回帖

0

VC币

中级会员

Rank: 3Rank: 3

积分
9993
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

主题

102

回帖

0

VC币

高级会员

Rank: 4

积分
30552
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系列的不会.
回复

使用道具 举报

17

主题

106

回帖

0

VC币

中级会员

Rank: 3Rank: 3

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

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

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

使用道具 举报

1

主题

102

回帖

0

VC币

高级会员

Rank: 4

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

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

使用道具 举报

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

本版积分规则

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