wakou 发表于 2025-3-30 16:27:28

mpv-font-loader: mpv脚本, 播放视频时自动加载字体

本帖最后由 wakou 于 2025-5-18 22:38 编辑

这个脚本会在mpv启动时解析字幕文件并加载相关的字体, 设计来自yzwduck大佬的FontLoaderSub

能够实现将字体放在一个文件夹下,实际观看视频时根据字幕文件按需加载

原理是使用mpv的sub-fonts-dir参数, 为相关的字体在临时文件夹下创建一个软连接, 将sub-fonts-dir参数设置为这个文件夹


关于在Windows下使用的特别说明

本脚本的运行需要进行创建软链接的操作。但在Windows系统上,默认是无权限创建软链接的,因此需先取得权限。

以下操作只在Win10上测试过,但Win11应该也可用相同步骤操作。

## 对于系统为家庭版,教育版等版本的

1. 打开设置,进入【更新和安全】-【开发者选项】页面
2. 打开开发人员模式

## 对于系统为专业版及以上版本的

除了像家庭版那样开启开发人员模式外,还可选择为当前用户单独打开创建软链接权限。

### 通过gui操作

1. 打开程序【本地安全策略】
2. 在程序中进入【本地策略】-【用户权限分配】-【创建符号链接】
3. 在【创建符号链接 属性】选项卡中,点击【添加用户或组】
4. 输入你的账号名,点击【检查名称】,然后点击确定

### 通过脚本操作
1. 下载我上传的"allowCreateSymbolicLink.ps1.zip"文件,解压后得到“allowCreateSymbolicLink.ps1”脚本
2. 以管理员权限打开powershell, 输入"Set-ExecutionPolicy RemoteSigned"
3. 执行"allowCreateSymbolicLink.ps1"脚本

v0.5.1
修复了某些情况下风格覆盖代码中解析字体错误的问题

v0.5
之前的版本在第一次扫描fc-subs.db文件后,会生成缓存文件,之后就不会在扫描fc-subs.db文件,因此后期新加入字体文件的话,脚本无法正确载入。
该版本在检测到特定文件后,会重新扫描fc-subs.db文件。
使用FontLoaderSub重新生成fc-subs.db文件后,在字体库文件夹下创建一个空的update.txt文件,脚本检测到该文件存在后会自动扫描fc-subs.db文件并更新缓存


v0.4.2
本次更新需要删除font-index文件重新生成
1. 修复缺陷:字体库文件夹中存在子文件夹时,无法正常加载子文件夹中的字体


v0.4

1. 通过调用uchardet和libiconv实现了字幕文件编码的检测与转换, 需要根据不同系统下载不同版本
2. 去除了对busybox的依赖, windows 现在不需要额外安装软件
3. 优化性能, 减少解析fc-subs.db文件的耗时


安装方法


解压font_loader.conf.zip, 得到font_loader.conf, 修改font_loader.conf文件中fontDir配置的值为你自己字体库文件夹所在路径

MPV

[*]找到mpv的设置文件夹, 将font_loader目录放置在scripts文件夹下
[*]将font_loader.conf文件放置在script-opts目录下, 修改font_loader.conf, 将fontDir的值改为用户存放字体文件的目录
IINA
IINA用户需要进入[设置]-[高级]菜单, 打开启用高级设置选项
[*]使用配置目录

[*]勾选使用配置目录, 并选择配置目录(下面以~/.config/iina/为例)
[*]在目录~/.config/iina/下新建文件夹scripts和script-opts
[*]将font_loader目录放置在scripts文件夹下, font_loader.conf文件放置在script-opts目录下
[*]修改font_loader.conf, 将fontDir的值改为用户存放字体文件的目录
[*]不使用配置目录

[*]不勾选使用配置目录, 以下操作假定脚本路径为~/mpv_script/font_loader
[*]在额外mpv选项栏中添加两个选项scripts, script-opts
[*]设置scripts选项的值为脚本所在路径, 即~/mpv_script/font_loader, 若需添加多个脚本, 则脚本路径以逗号,分割, 如~/mpv_script/font_loader,~/mpv_script/scriptA
[*]设置script-opts选项的值为font_loader-fontDir=字体目录,font_loader-fontIndexFile=customDir/font-index,font_loader-cacheDir=customDir1, 根据实际情况替换字体目录, customDir, customDir1的值


注意事项

1. 需要先在Windows上通过yzwduck大佬的FontLoaderSub程序生成fc-subs.db文件
2. mpv最低版本需要为0.36.0, 从该版本开始mpv才支持sub-fonts-dir参数
3. 安装完成后初次打开mpv会解析fc-subs.db的内容,会卡1-2s,之后会生成一个索引文件,再次打开就不会卡了
4. 字幕文件中标注的字体较多时(10个以上), 字幕使用新字体时会卡一下(自测只在Windows上出现此问题, 不明白为啥)


wakou 发表于 2025-3-30 16:31:45

没办法上传附件...没法发url....

github.com/wakou/mpv-font-loader/releases/tag/v0.2

shadows 发表于 2025-3-30 17:42:00

本帖最后由 shadows 于 2025-3-31 18:50 编辑

Windows用户需要额外安装busybox
可以用mp.get_property("platform")获取平台,然后运行不同的命令呗……
我简单看,就是link和unlink需要

我个人觉得windwos上用 https://github.com/Apache553/SubtitleFontHelper 会更好,基本上播放器都支持,字体加载也不会有卡顿延迟。并且效率也比mpv脚本高一些,不需要解析字幕

liewhong 发表于 2025-3-31 18:26:59

wakou 发表于 2025-3-30 16:31
没办法上传附件...没法发url....

github.com/wakou/mpv-font-loader/releases/tag/v0.2

已star等更新不要下载别的依赖的版本

漂律 发表于 2025-3-31 22:18:23

用这个加载字体简单一点https://github.com/hooke007/MPV_lazy/blob/main/portable_config/scripts/auto_sub_fonts_dir.lua

lisbt 发表于 2025-4-22 23:25:48

漂律 发表于 2025-3-31 22:18
用这个加载字体简单一点https://github.com/hooke007/MPV_lazy/blob/main/portable_config/scripts/auto_su ...

这个跟https://github.com/dyphire/mpv-config/blob/master/scripts/sub-fonts-dir-auto.lua 哪个更好用

liewhong 发表于 2025-5-7 02:50:04

本帖最后由 liewhong 于 2025-5-7 19:57 编辑

不确定成功了没有

font loader


stack traceback:
C:/MPV-lazy/portable_config/scripts/font_loader/fc. lua:12: in function 'buildIndex'
C:/MPV-lazy/portable_config/scripts/font_loader/main. lua:58: in main chunk
: at 0x7ff6243fd9d0
: at 0x7ff6243fc7a0

cplayer]


正在运行 全局属性保存恢复 模式1
create base cache dir: C:/MPV-lazy/portable_config/fontCache/
Subprocess failed: init
no fount index cache file, build index from fc-subs.db
open font cache db file: fc-subs.db
font_loader





Lua error: C:/MPV-lazy/portable_config/scripts/font_loader/fc. lua:12: fc-subs. db: No such file or directory
Resuming playback. This behavior can be disabled with -- no-resume-playback.
(heve 1920x1080 23.976 fps)
(flac 2ch 48000 Hz)
isc.assº (ass)
Using hardware decoding (d3d11va-copy).
Applying auto profile: vsync_auto
A0: 48000Hz stereo 2ch float
V0: 1920x1080 p010

O Video -- vid 1
O Audio -- aid 1 -- alang jpn
o Subs
-- Sid 1 -- slang sc

liewhong 发表于 2025-5-7 02:53:17

https://raw.githubusercontent.com/hong-tm/blog-image/main/Snipaste_2025-05-07_02-52-26.png

ausar 发表于 2025-5-7 09:34:33

这个用处是什么? mpv.conf里面加一个sub-font-provider = fontconfig不就行了吗

漂律 发表于 2025-5-10 11:23:05

lisbt 发表于 2025-4-22 23:25
这个跟https://github.com/dyphire/mpv-config/blob/master/scripts/sub-fonts-dir-auto.lua 哪个更好用 ...

功能完全一样。MPV_lazy里的更简短一些。
页: [1] 2 3
查看完整版本: mpv-font-loader: mpv脚本, 播放视频时自动加载字体