TA的每日心情 | 开心 2022-11-25 20:15 |
---|
签到天数: 1 天 [LV.1]初来乍到
白金会员
  
- 积分
- 62178
|
本帖最后由 wyzdwdz 于 2023-4-26 01:15 编辑
新人报道,分享一个自己写的小工具 assfonts
v0.3.0 新版整合 asshdr 程序,提供两个预设选项: HDR High 对应的输出亮度为
203nit,HDR Low 对应的输出亮度为 100nit 。这个功能主要用来解决观看 HDR
视频时字幕亮度过高的问题。
注意如果只想用HDR的功能,可以把 Subset only 和 Embed only 同时勾选上。
写了一个简单的 GUI 界面,直接打开 assfonts_gui.exe 即可,它可以独立运行。
GUI的使用方法在最后
因为平时有把字体文件嵌入mkv的需求,但是有时字幕需要的字体太多,如果全部
嵌入会导致视频文件体积暴涨。但其实一个字幕并不需要字体中的所有字形,因此
只需要保留所需的字形并剔除无用的部分就可以显著地缩小文件体积,并且不会影
响到字幕的渲染,这一过程又被称为字体的“子集化”。
基于这一思路,开发了这个小程序。它可以根据ASS字体文件在指定的字体库中查
找所需字体并对其进行子集化。本程序还提供另外一个功能,根据ASS字幕文件的
一个特性,即允许直接在字幕脚本中嵌入经过UUEncode编码后的字体文件,本程
序可以将经子集化后的或任意指定的字体直接嵌入ASS字幕中。这样只需要一个字
幕文件就可以包含全部信息,实现类似PGS等图形字幕的效果,而且与之相比具有
更小的体积、放大不会模糊的特性。
程序确保无毒,可以放心下载,提供源代码链接 github.com/wyzdwdz/assfonts
不放心的可以自己编译。
简单介绍一下程序的使用方法,首先在你的终端或者命令提示符中进入程序所在的
目录(或者直接把这个目录添加进环境变量中)。输入
- .\assfonts.exe -h 或者省略前面的 .\ 如果已经加入到环境变量中的话
复制代码
出现类似这些内容就说明运行成功了
接着如果你已经拥有一个自己的字体库(类似“超级字体整合包”)的话,建议首先
初始化字体库,以我自己的目录为例
- .\assfonts.exe -f "D:\超级字体整合包 XZ\完整包" -b
复制代码 它会自动扫描这个目录及其子目录下全部的字体文件并生成一个名叫fonts.db的数据
库文件(注意!如果你没有通过 -d 选项指定数据库的路径的话,它是默认保存在你
当前终端的运行目录下面的,这个可能不会是程序所在的目录),之后程序在检索字
体时即使你没有通过 -f 指定 fontpath 或者 fontpath 中的字体没满足要求,它也会
自动调用这个数据库中信息。当然如果你的字体库有了更新只需要重新输入这条命令
就可以更新数据库了。
下面假设我有一个字幕文件路径是 D:\test dir\test.ass,最简单的就是直接输入
- .\assfonts.exe "D:\test dir\test.ass" 或者 .\assfonts.exe -i "D:\test dir\test.ass"
复制代码 这样就可以自动生成一个已经嵌入字体信息的字幕 test.assfonts.ass 和一个文件夹 test_subsetted,
文件夹里面有子集化后字体文件,输出目录默认与输入的字体同目录,你也可以通过 -o
选项指定其它输出目录。这样一个最简单的使用流程就结束了。另外,有时候你下载的
字幕包会附带一个字体文件夹,你也可以使用 -f 命令指定这个文件夹,这样程序就会
优先从这个文件夹中检索字体。
- .\assfonts.exe -f "D:\test dir\test-fonts-dir" "D:\test dir\test.ass"
复制代码
注意!根据 ASS Specs 标准文件所述,ASS 字幕只能够嵌入 Truetype 字体,即 ttf
文件,但是本程序忽略了这个规定,允许任意类型的字体嵌入。这些非 ttf 字体可能不
会被某些播放器识别,造成字幕显示异常。
这里提供一种解决方法,还是以上面为例,首先键入 -s 选项,使程序只做子集化,不
嵌入字幕中。
- .\assfonts.exe -s "D:\test dir\test.ass"
复制代码 然后通过第三方工具把 test_subsetted 文件夹中的非 ttf 字体转换成 ttf(推荐使用
otf2ttf 这个 python 工具),接着使用 -e 选项,规定程序只将所需的字体嵌入字幕而
不再对其做子集化(因为这些已经子集化过了)。
- .\assfonts.exe -e -f "D:\test dir\test_subsetted" "D:\test dir\test.ass" 注意使用 -f 指定已经子集化后的字体目录
复制代码
这样就解决了。实在不能转换的话,也可以直接用 mkvtoolnix 等工具把字体嵌入视频
文件中。
GUI 程序使用说明
与命令行程序一样,首次运行最好先建立字体库,在 Font directory 中选择你的字体目
录,然后点击 Build database,字体库默认保存在该程序所在的目录下面,这样以后就
不用再指定字体文件夹了。
上面的四个目录除了点击 “...”选择以外,也可以直接把文件或者文件夹拖进去。
Subset only 选项,表示只做子集化,不嵌入到字幕中
Embed only 选项,表示不做子集化,直接把字体嵌入字幕中
两个选项都选上,一般用于清理输入字幕中的字体,如果字幕里没找到字体,就什么也
不做。
关于其它选项和更多的使用方法,可以通过 --help 查看(命令行),也欢迎在评论区中
咨询。
目前软件只提供了 X64 的 Windows 版本,理论上可以跨平台,不过还没有测试,如
果有需求欢迎提出。
软件只经过个人有限的测试,不保证稳定,欢迎大家使用并提交 BUG,我会尽快完善。
最后求管理员给个置顶,让更多人看到,谢谢!!!
更新日志:
v0.3.8
- 修复 Windows 系统下的内存泄漏 bug
v0.3.6 - v0.3.7
- 支持对字体库的增量更新,软件会自动忽略没有改动的字体,提高更新字体库的速度
- 修复字体解析bug
- 修复字幕解析bug
(注意,更新到这个版本后必须重新建立字体库,否则字体无法选取)
v0.3.5
- 减小子集化后的字体大小
v0.3.4
- 将 "Style not found" 的告警等级由 "Error" 降为 "Warning",不再阻止程序运行
- 修复字幕解析闪退 bug
- 解决 xy-subfilter 在渲染全角数字和省略号时丢失字符的 bug
v0.3.3
- 修复闪退 Bug
- GUI 添加帮助弹窗文本
v0.3.2
- 修复 GUI 中 subset only 与 embed only 选项的 bug
- 允许命令行程序同时输入多个字幕
- 提高程序安全性
v0.3.1
- 修复多个字幕输入后程序中断的 Bug
- 重写 GUI 布局
v0.3.0
- 修改对 \r 样式覆写代码的解析方式
- 添加彩色 GUI 日志窗口
- 整合 asshdr 功能
- 把二进制字体库改为 JSON 文本文件,方便直接查看与修改,注意升级到这个版本需要
重新建立字体库
v0.2.7
- 优化 GUI 界面布局
- 优化依赖结构,大幅缩小程序体积
v0.2.6
- 添加对老SSA字幕标准(V4 Style)的支持
- 优化多任务处理性能
v0.2.5
- GUI 现在允许同时添加多个字幕进行处理了
- 允许添加非UTF-8文件,当检测到输入文件的编码后会尝试自动将其转码为UTF-8后再
进行处理
v0.2.4
- 修复无法完全清理 ASS 中原有字体的 bug
- 修复检索字体文件时闪退的 bug
v0.2.3
- 添加对命令行程序的多语言支持
v0.2.2 - v0.2.1
- Windows 下添加对多语言文件名的支持,确保 GUI 程序在采用不同编码的操作系统下
都可以正常使用。对于某些非中文或英文名称的字体现在也能够正常解析了(经过超级
字体整合包 XZ 完整包测试,其中所有字体都可以正常解析)。
- 发布 x64 Linux 版本 (仅支持UTF-8文件系统)
v0.2.0
- 更新 GUI 版本,程序独立于命令行版本,可以单独使用,不需要任何依赖
- 重写了错误处理机制
- 修复了一处 ass 解析错误的 bug
v0.1.4
- 添加解析字体文件时的多线程支持
显著提高建立字体库的速度
v0.1.3
- 添加对 ASS 样式覆写代码 (\r) 的支持
- 添加对默认样式的支持
- 优化错误处理机制
v0.1.2
- 添加"粗体"与"斜体"的支持,除了记录字体库中每一个字体的家族名与全名外,还记
录了它的字重与倾斜度。(由于增加了字体信息,注意更新到这个版本后必须重新建
立字体库,否则字体无法选取)因此,在选取字体时不只比较字体的名称,还会计算
各字体与目标字体的"距离",选取最近的那一个。该方法参考 libass 与 fontconfig
的开源实现,Windows系统也应该采取的是类似的实现方式,因此基本能够确保字体
选取的结果与ass渲染器一致
- 若选取的字体中有需要的码位缺失,程序会发出告警并打印出缺失的码位
- 修复了一些 ass 解析错误的 bug
v0.1.1
- 修改原选项"-n,--no-subset"为"-e,--embed-only",只修改名称,功能不变
- 修改输出文件的后缀格式,由"xxx_assfonts.ass"更改为"xxx.assfonts.ass"
- 添加”清除字体“功能,若检测到输入字幕已含有字体文件,程序首先创建一个不含
字体的版本"xxx.cleaned.ass",并在这个文件基础上嵌入新的字体
- 允许"-s,--subset-only" "-e,--embed-only"两个选项共同使用,一般用于只清除字体
的情况
- 更新“使用说明”
Windows 7 及以上
Ubuntu 22.04 及以上
Debian 11 及以上
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
评分
-
查看全部评分
|