找回密码
 立即注册
查看: 40416|回复: 217

mkvtool:一个ass字幕子集化/mkv文件处理一条龙工具

该用户从未签到

1

主题

92

回帖

0

VC币

高级会员

Rank: 4

积分
30514
b8b41e3c 发表于 2022-4-26 11:55:37 | 显示全部楼层 |阅读模式
本帖最后由 b8b41e3c 于 2024-10-8 15:53 编辑

是一个自用为主的超级缝合怪
v5版本已发布,更易用的命令行风格.
v5.5.0版本已发布,性能更好,无需FontTools以及自带ASS转PGS.(仅自动化提供Windows,macOS,Linux的amd64及arm64架构的可执行文件.)
从v5.5.9起,将以字幕用到的所有字体文件为单位,取出这些字体文件的共用字体名作为子集化后的新字体名,以解决一些奇葩字幕因为子集化后分配了错误的新名字而导致"缺字"的问题.
从v5.6.3起,将默认对字体名混用的字幕报错,可用--no-font-check-strict来忽略.

下载:
https://github.com/MkvAutoSubset/MkvAutoSubset/releases
GUI版本:
https://github.com/MkvAutoSubset/MkvAutoSubset/releases/download/gui/mkvtool-win64.zip
Docker:
https://github.com/MkvAutoSubset/MkvAutoSubset?tab=readme-ov-file#docker%E9%95%9C%E5%83%8F%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E
Win64的所有依赖:
https://github.com/MkvAutoSubset/MkvAutoSubset/releases/download/win64_assets/win64_assets.zip
(用法:下载并解压,运行"install.bat")

什么叫字幕字体子集化
  • 这里说的字幕特指ass(ssa)这种带有特效的文本字幕;
  • ass字幕会引用一些字体,这些字体在播放器所在的系统里可能有安装,也可能没有;
  • 为了实现在任意地方都能有完整的视觉体验,可以把字幕以及字幕里所引用的字体文件一起打包进mkv文件里;
  • 以上的操作存在一个问题,有些字幕会引用很多字体,这些字体文件体积动辄几十MB,而字幕只用到了其中的几个字而已;
  • 比如一个番剧本体200M,但打包了字体文件后变成400M,这像画吗?
  • 综上所述,子集化的目的就是把字体拆包,找出字幕用到的那部分字形并重新打包;
  • 好处不仅限于节约存储空间,加快缓冲速度;
  • 想想看:在一个只有30Mbps上传的网络环境下,要看上面那个光字体就200M的番剧,这河里吗?



主要功能

1. 列出.ass字幕实际用到的字体(在建立了字体缓存的情况下可以复制对应字体到指定目录)
2. 根据ass字幕内容对字体进行子集化
3. ass字幕转pgs
4. 从mkv文件导出字幕和字体
5. 将字幕和字体封装进mkv
6. 查看一个字体包含的字体名和族名
7. 生成测试用视频(可指定源亦可生成空白视频,字幕可内封亦可烧录.)



详细使用方法请看:
https://github.com/MkvAutoSubset/MkvAutoSubset


关于字幕解析的说明

1. 支持\b \i \r \fn以及style里的bold,italic
2. 支持字体fallback,例:[xxx Bold]不存在的时候会fallback到[xxx Regular]

关于字幕默认轨道的说明

1. v4.3.2以前的版本,根据mkvmerge的版本,可能会出现有多轨字幕时,输出的mkv文件里所有的字幕轨道都被设置成默认轨道.这个问题在v4.3.2得到解决.
2. 处理方式是如果字幕文件名不以"#"开头,将去掉该字幕默认轨道的标志.换而言之,如果一个mkv里的字幕的文件名都不以"#"开头,那么这个mkv文件就没有默认的字幕轨道.

温馨提醒

这个工具近期因为如上的字幕解析修改过解析器的部分,希望能有更多的样本测试健壮性,请大家多多反馈。
另提供sdk,欢迎二开(比如做个gui版本,原有的已弃坑,仅更新依赖库.),也欢迎pr。


详情:
https://github.com/MkvAutoSubset/MkvAutoSubset/tree/master/mkvlib/c

另应楼下要求提供一个ass2mks的脚本,虽然我并不喜欢这种东西。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 3活跃度 +29600 收起 理由
charlieego + 3200 超好用。
kavenliang + 25600 很给力!
StarRingChild + 800 赞一个!

查看全部评分

回复

使用道具 举报

  • TA的每日心情
    开心
    2023-1-26 20:58
  • 签到天数: 77 天

    [LV.6]常住居民II

    13

    主题

    248

    回帖

    456

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    36160
    StarRingChild 发表于 2022-4-26 14:25:32 | 显示全部楼层
    本帖最后由 StarRingChild 于 2022-4-26 14:41 编辑

    mkv 里要封装有字幕和字体才行是吗,像这种文件结构,字幕和字体单独存放,而且视频还是 MP4 就没法用吗。我觉得其实也可以导出子集化之后的 mks 文件,最好不要动视频文件。

    ├── Amagi Brilliant Park - 01.mp4
    ├── Amagi Brilliant Park - 02.mp4
    ├── Amagi Brilliant Park - 03.mp4
    ├── Amagi Brilliant Park - 04.mp4
    ├── Amagi Brilliant Park - 05.mp4
    ├── Amagi Brilliant Park - 06.mp4
    ├── Amagi Brilliant Park - 07.mp4
    ├── Amagi Brilliant Park - 08.mp4
    ├── Amagi Brilliant Park - 09.mp4
    ├── Amagi Brilliant Park - 10.mp4
    ├── Amagi Brilliant Park - 11.mp4
    ├── Amagi Brilliant Park - 12.mp4
    ├── Amagi Brilliant Park - 13.mp4
    ├── Amagi Brilliant Park - 14.mp4
    ├── Amagi Brilliant Park - Subs
    │   ├── Amagi Brilliant Park - 01.ass
    │   ├── Amagi Brilliant Park - 02.ass
    │   ├── Amagi Brilliant Park - 03.ass
    │   ├── Amagi Brilliant Park - 04.ass
    │   ├── Amagi Brilliant Park - 05.ass
    │   ├── Amagi Brilliant Park - 06.ass
    │   ├── Amagi Brilliant Park - 07.ass
    │   ├── Amagi Brilliant Park - 08.ass
    │   ├── Amagi Brilliant Park - 09.ass
    │   ├── Amagi Brilliant Park - 10.ass
    │   ├── Amagi Brilliant Park - 11.ass
    │   ├── Amagi Brilliant Park - 12.ass
    │   ├── Amagi Brilliant Park - 13.ass
    │   ├── Amagi Brilliant Park - 14.ass
    │   └── [VCB-Studio&KTXP] Fonts
    │       ├── Source Han Sans JP Medium.otf
    │       ├── SourceHanSansCN-Medium.ttf
    │       ├── msyh.ttc
    │       ├── msyhbd.ttc
    │       └── 宋体 & 新宋体.ttc


    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    92

    回帖

    0

    VC币

    高级会员

    Rank: 4

    积分
    30514
    b8b41e3c  楼主| 发表于 2022-4-26 16:27:34 | 显示全部楼层
    本帖最后由 b8b41e3c 于 2022-4-26 16:59 编辑
    StarRingChild 发表于 2022-4-26 14:25
    mkv 里要封装有字幕和字体才行是吗,像这种文件结构,字幕和字体单独存放,而且视频还是 MP4 就没法用吗。 ...

    你可以使用-c模式,按照说明里的文件树布局,详情:
    https://github.com/MkvAutoSubset ... 8%E7%A4%BA%E4%BE%8B
    即使是非mkv也可以用-c模式,但用到抽取功能的仅限mkv。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-26 20:58
  • 签到天数: 77 天

    [LV.6]常住居民II

    13

    主题

    248

    回帖

    456

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    36160
    StarRingChild 发表于 2022-4-26 17:00:30 | 显示全部楼层
    b8b41e3c 发表于 2022-4-26 16:27
    你可以使用-c模式,按照说明里的文件树布局,详情:
    https://github.com/MkvAutoSubset ... 8%E7%A4%BA%E4% ...

    跑起来了,但是没跑成


    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    92

    回帖

    0

    VC币

    高级会员

    Rank: 4

    积分
    30514
    b8b41e3c  楼主| 发表于 2022-4-26 17:10:30 | 显示全部楼层
    本帖最后由 b8b41e3c 于 2022-4-26 17:12 编辑
    StarRingChild 发表于 2022-4-26 17:00
    跑起来了,但是没跑成

    更新一下程序,另外你的字体好像有问题。遇到有问题的字体要是子集化出错了是不会出成品的。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-26 20:58
  • 签到天数: 77 天

    [LV.6]常住居民II

    13

    主题

    248

    回帖

    456

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    36160
    StarRingChild 发表于 2022-4-26 17:16:15 | 显示全部楼层
    b8b41e3c 发表于 2022-4-26 17:10
    更新一下程序,另外你的字体好像有问题。遇到有问题的字体要是子集化出错了是不会出成品的。
    ...

    请问可以增加导出 mks 的选项吗
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    92

    回帖

    0

    VC币

    高级会员

    Rank: 4

    积分
    30514
    b8b41e3c  楼主| 发表于 2022-4-26 19:15:26 | 显示全部楼层
    StarRingChild 发表于 2022-4-26 17:16
    请问可以增加导出 mks 的选项吗

    v3.4.3支持,请更新。具体用法见README.md


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-26 20:58
  • 签到天数: 77 天

    [LV.6]常住居民II

    13

    主题

    248

    回帖

    456

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    36160
    StarRingChild 发表于 2022-4-26 19:46:12 | 显示全部楼层
    本帖最后由 StarRingChild 于 2022-4-26 19:47 编辑
    b8b41e3c 发表于 2022-4-26 19:15
    v3.4.3支持,请更新。具体用法见README.md


    所有的字幕文件都只用到了同一种字体,文件也没有问题
    mkvtool -mks -s .  依然报错
    1. 2022/04/26 19:45:13 Failed to get the mkv file info: "v/[Nekomoe kissaten&VCB-Studio] Fruits Basket 2nd Season [01][Ma10p_1080p][x265_flac].mkv".
    2. 2022/04/26 19:45:13 Failed to dump the mkv file "v/[Nekomoe kissaten&VCB-Studio] Fruits Basket 2nd Season [01][Ma10p_1080p][x265_flac].mkv".
    3. 2022/04/26 19:45:13 Dump (1/25) done.
    复制代码
    按理来说,导出 mks 只需要字幕文件和字体文件,为什么会读取 mkv 文件呀

    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    92

    回帖

    0

    VC币

    高级会员

    Rank: 4

    积分
    30514
    b8b41e3c  楼主| 发表于 2022-4-26 20:03:05 | 显示全部楼层
    StarRingChild 发表于 2022-4-26 19:46
    所有的字幕文件都只用到了同一种字体,文件也没有问题
    mkvtool -mks -s .  依然报错
    按理来说,导出 mks  ...

    你的需求应该用-c模式,你一直在用标准工作流.仔细看看说明啊.

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-26 20:58
  • 签到天数: 77 天

    [LV.6]常住居民II

    13

    主题

    248

    回帖

    456

    VC币

    金牌会员

    Rank: 6Rank: 6

    积分
    36160
    StarRingChild 发表于 2022-4-26 20:21:27 | 显示全部楼层
    b8b41e3c 发表于 2022-4-26 20:03
    你的需求应该用-c模式,你一直在用标准工作流.仔细看看说明啊.

    你再补充下文档吧,-c 模式基本上只字未提,我一开始就加了 -c 什么都没有发生才换到工作流模式的。
    回复

    使用道具 举报

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

    本版积分规则

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