找回密码
 立即注册
查看: 459|回复: 1

【新工具】动画字幕字体实现全自动加载!

  • TA的每日心情
    慵懒
    2025-6-6 20:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    0

    回帖

    0

    VC币

    中级会员

    Rank: 3Rank: 3

    积分
    8996
    Ann 发表于 2026-3-25 11:16:08 | 显示全部楼层 |阅读模式
    本帖最后由 Ann 于 2026-3-25 16:51 编辑

    开源仓库https://github.com/naganohara-yoshino/flash-font  感谢星星(bgm24)

    看下载的动画,字幕组的字幕往往需要额外字体。一般可以通过字体包和加载器共同加载字体,但是手动加载未免繁琐,而且加载器加载的比较慢。于是做了一个新的字体库字体加载的CLI工具,配合lua mpv插件,可以将上述过程全部自动化,只要有正确的字幕就能点开即看。

    CLI工具特性
    ◾递归扫描字体库,为 60GB / 18,000+ 的字体整合包建立数据库仅需10秒左右,有数据库的情况下查询与匹配是秒级的;
    ◾自动检测字体库变化(新增 / 删除),不需要手动更新数据库;
    ◾精确匹配 ASS 字幕,提取所有实际使用字体(包括样式变体),即时字体注入。

    使用方法
    0. 准备字体文件夹
    推荐下载字幕论坛的字体包,省去了每次看动画都要额外下载字幕字体的麻烦;若不下载字体包,也可以自己手动把字体拖进一个特定的文件夹里面,当作加载的来源。字体包种子下载链接

    1. 安装CLI 工具
    如果有rust工具链,推荐使用cargo安装
    1. cargo install flash-font-ass --locked
    复制代码


    没有rust工具链可以去GitHub下载预编译版本,地址在此。一般的用户请下载 msvc-x86_64 版本,少部分的win arm用户下载arm64的。解压后exe放置在任何文件夹都可以。

    对于下载预编译版本的,如果知道什么是path环境变量,非常推荐添加,能省去很多麻烦。

    目前只支持Windows。

    2. 初始化CLI工具
    按 Win+R 呼出运行窗口,输入
    1. powershell
    复制代码
    按运行,即能弹出终端。

    如果用cargo安装的或者手动添加了path环境变量的,直接输入
    1. flash-font-ass init
    复制代码


    如果是手动下载的,到你放置exe的文件夹,选中flash-font-ass.exe, 按Ctrl+Shift+C复制路径,回到终端,输入&空格,然后点击鼠标右键即可粘贴刚才的路径,最后输入空格init,整体应该形如
    1. & 路径 init
    复制代码


    输完命令,回车。弹出一个问题,要你填入第0步的字体文件夹的路径。同样的,来到字体文件夹所在的文件夹,选中字体文件夹,按Ctrl+Shift+C,然后来到终端,右键点击就把路径贴在了终端里。再回车就完成了初始化。

    3. 配置MPV插件
    有了cli工具,就可以利用mpv的lua脚本自动的调用它,为我们自动加载字幕。

    首先,到mpv.exe所在的文件夹。如果用的是mpv lazy等整合包,应该可以看到一个名为
    1. portable_config
    复制代码
    的文件夹,里面会有一个
    1. scripts
    复制代码
    文件夹,进入到这个文件夹。(如果没有,就手动创建并进入。)

    如果用cargo安装的或者手动添加了path环境变量的,直接进入GitHub Gist Raw界面,按Ctrl+S下载,会得到文件
    1. load_ass_fonts.lua
    复制代码
    把它拖进刚才的scripts文件夹就全部完成了。

    如果是手动下载的,进入GitHub Gist,然后在刚才的script文件夹,用记事本新建一个txt文件,复制全部1-78行内容,并粘贴进去。注意第网页中显示的30行,内容为
    1. args = { "flash-font-ass", "load", "--subtitle", sub_path },
    复制代码
    把txt文件这里的"flash-font-ass"改成你自己的路径,比如
    1. args = { "D:/文件夹/flash-font-ass.exe", "load", "--subtitle", sub_path },
    复制代码
    保存后重命名为
    1. load_ass_fonts.lua
    复制代码
    即可(注意,后缀也要改,.txt后缀变成了.lua)。

    完成以上配置后,对于媒体文件有对应外挂ass字幕的(MPV能直接相应加载的),现在就不需要再手动加载字幕字体了。

    如果熟悉MPV的也可以自己修改lua脚本。以下附load_ass_fonts.lua的全部内容:
    1. -- mpv Auto ASS Font Loader
    2. -- Requires: flash-font-ass (must be in PATH)
    3. -- Place this script in: mpv_folder/portable_config/scripts/ (or ~/.config/mpv/scripts/ , ..)

    4. local msg = require 'mp.msg'

    5. -- Table to track already processed subtitle files (prevents duplicate loading)
    6. local processed_subs = {}

    7. -- ===================================================================
    8. -- Core function: Load fonts for a given external ASS subtitle file
    9. -- ===================================================================
    10. local function load_fonts_for_subtitle(sub_path)
    11.     -- 1. Basic validation
    12.     if not sub_path or not sub_path:lower():match("%.ass$") then
    13.         return
    14.     end

    15.     -- 2. Skip if this subtitle has already been processed
    16.     if processed_subs[sub_path] then
    17.         return
    18.     end

    19.     msg.info("Detected external ASS subtitle, loading fonts: " .. sub_path)

    20.     -- 3. Call flash-font-ass synchronously (blocks until finished)
    21.     --    This ensures fonts are available before playback starts
    22.     local result = mp.command_native({
    23.         name = "subprocess",
    24.         args = { "flash-font-ass", "load", "--subtitle", sub_path },
    25.         playback_only = false,
    26.         capture_stdout = true,
    27.         capture_stderr = true,
    28.     })

    29.     -- 4. Handle result
    30.     if result.status == 0 then
    31.         msg.info("flash-font-ass executed successfully for: " .. sub_path)
    32.         processed_subs[sub_path] = true          -- Mark as processed
    33.     else
    34.         msg.error("flash-font-ass failed with exit code: " .. tostring(result.status))
    35.         if result.stderr and result.stderr ~= "" then
    36.             msg.error("Error output: " .. result.stderr)
    37.         end
    38.     end
    39. end

    40. -- ===================================================================
    41. -- Scenario A: Automatic font loading when a file is opened
    42. -- ===================================================================
    43. -- on_preloaded hook runs after mpv has parsed the file list but before playback starts.
    44. -- This allows us to load fonts early and avoid font missing issues at the beginning.
    45. mp.add_hook("on_preloaded", 50, function()
    46.     local tracks = mp.get_property_native("track-list")
    47.     if not tracks then return end

    48.     for _, track in ipairs(tracks) do
    49.         -- Only process external subtitle tracks (internal embedded subs don't have external-filename)
    50.         if track.type == "sub" and track["external-filename"] then
    51.             load_fonts_for_subtitle(track["external-filename"])
    52.         end
    53.     end
    54. end)

    55. -- ===================================================================
    56. -- Scenario B: Font loading when user adds/switches subtitle during playback
    57. -- ===================================================================
    58. -- Observes the external filename of the currently active subtitle track
    59. mp.observe_property("current-tracks/sub/external-filename", "string", function(name, sub_path)
    60.     if sub_path then
    61.         load_fonts_for_subtitle(sub_path)
    62.     end
    63. end)

    64. -- Optional: Clear processed list when a new file is loaded (prevents memory growth over long sessions)
    65. mp.register_event("file-loaded", function()
    66.     processed_subs = {}
    67. end)
    复制代码

    flash-font-ass-Windows-msvc-x86_64.zip

    1.54 MB, 下载次数: 17

    cli 工具

    load_ass_fonts.zip

    1.34 KB, 下载次数: 17

    mpv 插件

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2026-4-5 18:15
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    3

    主题

    415

    回帖

    42

    VC币

    至尊会员

    Rank: 16Rank: 16Rank: 16Rank: 16

    积分
    209878

    活跃达人

    shadows 发表于 2026-3-25 13:11:26 | 显示全部楼层
    本帖最后由 shadows 于 2026-3-25 13:14 编辑

    只支持外挂吗…
    回复

    使用道具 举报

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

    本版积分规则

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