在MPV播放器中加载弹弹play弹幕,基于 uosc UI框架和弹弹play API的mpv弹幕扩展插件
Important
mpv 需基于 LuaJIT 或 Lua 5.2 构建,脚本不支持 Lua 5.1
Note
已添加对mpv内部mp.input
的支持,在uosc不可用时通过键绑定调用此方式渲染菜单
欲启用此支持mpv最低版本要求:0.39.0
插件具体效果见演示视频:
_20240903_023413.mp4
在未安装uosc框架时,调用mpv内部的mp.input
进行菜单渲染,具体效果见此pr
- 从弹弹play或自定义服务的API获取剧集及弹幕数据,并根据用户选择的集数加载弹幕
- 通过点击uosc control bar中的弹幕搜索按钮可以显示搜索菜单供用户选择需要的弹幕
- 通过点击加入uosc control bar中的弹幕开关控件可以控制弹幕的开关
- 通过点击加入uosc control bar中的从源获取弹幕按钮可以通过受支持的网络源或本地文件添加弹幕
- 记忆型全自动弹幕填装,在为某个文件夹下的某一集番剧加载过一次弹幕后,加载过的弹幕会自动关联到该集;之后每次重新播放该文件就会自动加载弹幕,同时该文件对应的文件夹下的所有其他集数的文件都会在播放时自动加载弹幕,无需再重复手动输入番剧名进行搜索(注意
⚠️ :全自动弹幕填装默认关闭,如需开启请阅读auto_load配置项说明) - 在没有手动加载过弹幕,没有填装自动弹幕记忆之前,通过文件哈希匹配的方式自动添加弹幕(
仅限本地文件,现已支持网络视频),对于能够哈希匹配关联的文件不再需要手动搜索关联,实现全自动加载弹幕并添加记忆。该功能随记忆型全自动弹幕填装功能一起开启(哈希匹配自动加载准确率较低,如关联到错误的剧集请手动加载正确的剧集) - 通过打开配置项load_more_danmaku可以爬取所有可用弹幕源,获取更多弹幕(注意
⚠️ :爬取所有可用弹幕源默认关闭,如需开启请阅读load_more_danmaku配置项说明) - 自动记忆弹幕开关情况,播放视频时保持上次关闭时的弹幕开关状态
- 自定义弹幕样式(具体设置方法详见自定义弹幕样式)
- 在使用如Play-With-MPV或ff2mpv等网络播放手段时,自动加载弹幕(注意
⚠️ :目前支持自动加载bilibili和巴哈姆特这两个网站的弹幕,具体说明查看autoload_for_url配置项说明) - 保存当前弹幕到本地(详细功能说明见save_danmaku配置项说明)
- 可以合并一定时间段内同时出现的大量重复弹幕(具体设置方法详见merge_tolerance配置项说明)
- 弹幕简体字繁体字转换,解决弹幕简繁混杂问题(具体设置方法详见chConvert配置项说明)
无需亲自下载整合弹幕文件资源,无需亲自处理文件格式转换,在mpv播放器中一键加载包含了哔哩哔哩、巴哈姆特等弹幕网站弹幕的弹弹play的动画弹幕。
插件本身支持Linux和Windows平台。项目依赖于uosc UI框架。欲使用本插件强烈建议为mpv播放器中安装uosc。uosc的安装步骤可以参考其官方安装教程。当然,如果使用MPV_lazy等内置了uosc的懒人包则只需安装本插件即可。
另外本插件也使用了DanmakuFactory弹幕格式转换工具。在Windows平台和Linux平台上本插件均调用作者自己编译构建的可执行文件。如果本项目仓库中bin文件夹下提供的可执行文件无法正确运行,请前往DanmakuFactory项目地址,按照其教程选择或编译兼容自己环境的可执行文件。
字体简繁转换基于OpenCC简繁转换工具。在Windows平台上本插件调用OpenCC官方编译的x86_64版本,在Linux平台上本插件调用基于作者自己Linux系统编译的二进制文件。如果本项目仓库中bin文件夹下提供的可执行文件无法正确运行,请前往OpenCC项目地址,按照其教程选择或编译兼容自己环境的可执行文件。
一般的mpv配置目录结构大致如下
~/.config/mpv
├── fonts
├── input.conf
├── mplayer-input.conf
├── mpv.conf
├── script-opts
└── scripts
想要使用本插件,请将本插件完整地下载或者克隆到scripts
目录下,文件结构如下:
Important
- scripts目录下放置本插件的文件夹名称必须为uosc_danmaku,否则必须参照uosc控件配置部分修改uosc控件
- 记得给bin文件夹下的文件赋予可执行权限
~/.config/mpv/scripts
└── uosc_danmaku
├── api.lua
├── bin
│ ├── DanmakuFactory
│ │ ├── DanmakuFactory
│ │ └── DanmakuFactory.exe
│ ├── OpenCC_Linux
│ │ └── opencc
│ └── OpenCC_Windows
│ ├── opencc.dll
│ ├── opencc.exe
│ ├── s2t.json
│ ├── STCharacters.ocd2
│ ├── STPhrases.ocd2
│ ├── t2s.json
│ ├── TSCharacters.ocd2
│ └── TSPhrases.ocd2
├── main.lua
├── md5.lua
├── options.lua
└── render.lua
这一步非常重要,不添加控件,弹幕搜索按钮和弹幕开关就不会显示在进度条上方的控件条中。若没有控件,则只能通过绑定快捷键调用弹幕搜索和弹幕开关功能
想要添加uosc控件,需要修改mpv配置文件夹下的script-opts
中的uosc.conf
文件。如果已经安装了uosc,但是script-opts
文件夹下没有uosc.conf
文件,可以去uosc项目地址下载官方的uosc.conf
文件,并按照后面的配置步骤进行配置。
由于uosc最近才更新了部分接口和控件代码,导致老旧版本的uosc和新版的uosc配置有所不同。如果是下载的最新git版uosc或者一直保持更新的用户按照最新版uosc的控件配置步骤配置即可。如果不确定自己的uosc版本,或者在使用诸如MPV_lazy等由第三方管理uosc版本的用户,可以使用兼容新版和旧版uosc的旧版uosc控件配置步骤
找到uosc.conf
文件中的controls
配置项,uosc官方默认的配置可能如下:
controls=menu,gap,subtitles,<has_many_audio>audio,<has_many_video>video,<has_many_edition>editions,<stream>stream-quality,gap,space,speed,space,shuffle,loop-playlist,loop-file,gap,prev,items,next,gap,fullscreen
在controls
控件配置项中添加button:danmaku
的弹幕搜索按钮和cycle:toggle_on:show_danmaku@uosc_danmaku:on=toggle_on/off=toggle_off?弹幕开关
的弹幕开关。放置的位置就是实际会在在进度条上方的控件条中显示的位置,可以放在自己喜欢的位置。我个人把这两个控件放在了<stream>stream-quality
画质选择控件后边。添加完控件的配置大概如下:
controls=menu,gap,subtitles,<has_many_audio>audio,<has_many_video>video,<has_many_edition>editions,<stream>stream-quality,button:danmaku,cycle:toggle_on:show_danmaku@uosc_danmaku:on=toggle_on/off=toggle_off?弹幕开关,gap,space,speed,space,shuffle,loop-playlist,loop-file,gap,prev,items,next,gap,fullscreen
找到uosc.conf
文件中的controls
配置项,uosc官方默认的配置可能如下:
controls=menu,gap,subtitles,<has_many_audio>audio,<has_many_video>video,<has_many_edition>editions,<stream>stream-quality,gap,space,speed,space,shuffle,loop-playlist,loop-file,gap,prev,items,next,gap,fullscreen
在controls
控件配置项中添加command:search:script-message open_search_menu?搜索弹幕
的弹幕搜索按钮和cycle:toggle_on:show_danmaku@uosc_danmaku:on=toggle_on/off=toggle_off?弹幕开关
的弹幕开关。放置的位置就是实际会在在进度条上方的控件条中显示的位置,可以放在自己喜欢的位置。我个人把这两个控件放在了<stream>stream-quality
画质选择控件后边。添加完控件的配置大概如下:
controls=menu,gap,subtitles,<has_many_audio>audio,<has_many_video>video,<has_many_edition>editions,<stream>stream-quality,command:search:script-message open_search_menu?搜索弹幕,cycle:toggle_on:show_danmaku@uosc_danmaku:on=toggle_on/off=toggle_off?弹幕开关,gap,space,speed,space,shuffle,loop-playlist,loop-file,gap,prev,items,next,gap,fullscreen
如果出于重名等各种原因,无法将本插件所放置的文件夹命名为uosc_danmaku
的话,需要修改cycle:toggle_on:show_danmaku@uosc_danmaku:on=toggle_on/off=toggle_off?弹幕开关
的弹幕开关配置中的uosc_danmaku
为放置本插件的文件夹的名称。假如将本插件放置在my_folder
文件夹下,那么弹幕开关配置就要修改为cycle:toggle_on:show_danmaku@my_folder:on=toggle_on/off=toggle_off?弹幕开关
对于坚定的键盘爱好者和不使用鼠标主义者,可以选择通过快捷键调用弹幕搜索和弹幕开关功能
快捷键已经进行了默认绑定。默认情况下弹幕搜索功能绑定“Ctrl+d”;弹幕开关功能绑定“j”
弹幕搜索功能绑定的脚本消息为open_search_danmaku_menu
,弹幕开关功能绑定的脚本消息为show_danmaku_keyboard
如需配置快捷键,只需在input.conf
中添加如下行即可,快捷键可以改为自己喜欢的按键组合。
Ctrl+d script-message open_search_danmaku_menu
j script-message show_danmaku_keyboard
根据此issue中的需求,添加了通过uosc_danmaku.conf绑定快捷键的功能。(请注意,最高优先级仍然是input.conf中设置的快捷键) 想要在uosc_danmaku.conf中自定义快捷键,可以像下面这样更改默认快捷键。
open_search_danmaku_menu_key=Ctrl+i
show_danmaku_keyboard_key=i
可以通过快捷键绑定以下命令来调整弹幕延迟,单位:秒。可以为负数
key script-message danmaku-delay <seconds>
当前弹幕延迟的值可以从
user-data/uosc_danmaku/danmaku-delay
属性中获取到,具体用法可以参考此issue
从弹幕源添加弹幕。在已经在播放弹幕的情况下会将添加的弹幕追加到现有弹幕中。
目前尚未解决弹幕去重等问题
弹幕去重问题已解决,可参考此issue
可添加的弹幕源如哔哩哔哩上任意视频通过video路径加BV号,或者巴哈姆特上的视频地址等。比如说以下地址均可作为有效弹幕源被添加:
https://www.bilibili.com/video/BV1kx411o7Yo
https://ani.gamer.com.tw/animeVideo.php?sn=36843
此功能通过调用弹弹Play的extcomment接口实现获取第三方弹幕站(如A/B/C站)上指定网址对应的弹幕。想要启用此功能,需要参照uosc控件配置,根据uosc版本添加button:danmaku_source
或command:add_box:script-message open_add_source_menu?从源添加弹幕
到uosc.conf
的controls配置项中。
想要通过快捷键使用此功能,请添加类似下面的配置到input.conf
中。从源添加弹幕功能对应的脚本消息为open_add_source_menu
。
Ctrl+j script-message open_add_source_menu
现已添加了对加载本地弹幕文件的支持,输入本地弹幕文件的绝对路径即可使用本插件加载弹幕。加载出来的弹幕样式同在本插件中设置的弹幕样式。支持的文件格式有ass文件和xml文件。具体可参见此issue
#Linux下示例
/home/tony/Downloads/example.xml
#Windows下示例
C:\Users\Tony\Downloads\example.xml
可以清空当前视频所关联的弹幕源。清空过弹幕源之后,下次播放该视频,就不会再加载之前手动添加过的弹幕源,可以重新添加弹幕源。
想要通过快捷键使用此功能,请添加类似下面的配置到input.conf
中。从源添加弹幕功能对应的脚本消息为clear-source
。
key script-message clear-source
Note
该脚本的选项支持运行时更新,故可以通过键绑定的方式动态切换脚本选项状态。示例:
key cycle-values script-opts uosc_danmaku-save_danmaku=yes uosc_danmaku-save_danmaku=no
允许自定义弹幕 API 的服务地址
Note
请确保自定义服务的 API 与弹弹play 的兼容,已知兼容:anoraker/abetsy
想要使用此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并自定义如下内容:
api_server=https://api.dandanplay.net
由于弹弹Play默认对于弹幕较多的番剧加载并且整合弹幕的上限大约每集7000条,而这7000条弹幕也不是均匀分配,例如有时弹幕基本只来自于哔哩哔哩,有时弹幕又只来自于巴哈姆特。这样的话弹幕观看体验就和直接在哔哩哔哩或者巴哈姆特观看没有区别了,失去了弹弹Play整合全平台弹幕的优势。
因此,本人添加了配置选项load_more_danmaku
,用来将从弹弹Play获取弹幕的逻辑更改为逐一搜索所有弹幕源下的全部弹幕,并由本脚本整合加载。开启此选项可以获取到所有可用弹幕源下的所有弹幕。但是对于一些热门番剧来说,弹幕数量可能破万,如果接受不了屏幕上弹幕太多,请不要开启此选项。(嘛,不过本人看视频从来只会觉得弹幕多多益善)
想要开启此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加如下内容:
load_more_danmaku=yes
该选项控制是否开启全自动弹幕填装功能。该功能会在为某个文件夹下的某一集番剧加载过一次弹幕后,把加载过的弹幕会自动关联到该集。之后每次重新播放该文件就会自动加载对应的弹幕,同时该文件对应的文件夹下的所有其他集数的文件都会在播放时自动加载弹幕。
举个例子,比如说有一个文件夹结构如下
败犬女主太多了
├── KitaujiSub_Make_Heroine_ga_Oosugiru!_01WebRipHEVC_AACCHS_JP.mp4
├── KitaujiSub_Make_Heroine_ga_Oosugiru!_02WebRipHEVC_AACCHS_JP.mp4
├── KitaujiSub_Make_Heroine_ga_Oosugiru!_03WebRipHEVC_AACCHS_JP.mp4
├── KitaujiSub_Make_Heroine_ga_Oosugiru!_04WebRipHEVC_AACCHS_JP.mp4
├── KitaujiSub_Make_Heroine_ga_Oosugiru!_05WebRipHEVC_AACCHS_JP.mp4
├── KitaujiSub_Make_Heroine_ga_Oosugiru!_06WebRipHEVC_AACCHS_JP.mp4
├── KitaujiSub_Make_Heroine_ga_Oosugiru!_07v2WebRipHEVC_AACCHS_JP.mp4
└── KitaujiSub_Make_Heroine_ga_Oosugiru!_08WebRipHEVC_AACCHS_JP.mp4
只要在播放第一集KitaujiSub_Make_Heroine_ga_Oosugiru!_01WebRipHEVC_AACCHS_JP.mp4
的时候手动搜索并且加载过一次弹幕,那么打开第二集时就会直接自动加载第二集的弹幕,打开第三集时就会直接加载第三集的弹幕,以此类推,不用再手动搜索
想要开启此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加如下内容:
auto_load=yes
注意
少女歌剧
├── 少女歌剧1.mp4
├── 少女歌剧2.mp4
├── 少女歌剧3.mp4
├── 少女歌剧4.mp4
└── 哭泣少女乐队2.mp4
自动加载播放文件同目录下同名的 xml 格式的弹幕文件
想要开启此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加如下内容:
autoload_local_danmaku=yes
开启此选项后,会为可能支持的 url 视频文件实现弹幕关联记忆和继承,配合播放列表食用效果最佳。目前兼容在使用embyToLocalPlayer、mpv-torrserver、tsukimi等场景时进行弹幕关联记忆和继承。
目前的具体支持情况和实现效果可以参考此pr
另外,开启此选项后还会在网络播放bilibili以及巴哈姆特的视频时自动加载对应视频的弹幕,可配合Play-With-MPV或ff2mpv等网络播放手段使用。(播放巴哈姆特的视频时弹幕自动加载如果失败,请检查proxy选项配置是否正确)
Note
实验性功能,尚不完善
想要开启此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加如下内容:
autoload_for_url=yes
开启此选项后,通过从弹幕源向当前弹幕添加新弹幕内容
功能关联过的弹幕源会被记录,并且下次播放同一个视频的时候会自动关联并加载添加过的弹幕源。
想要开启此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加如下内容:
add_from_source=yes
当文件关闭时自动保存弹幕文件(xml)至视频同目录,保存的弹幕文件名与对应的视频文件名相同。配合autoload_local_danmaku选项可以实现弹幕自动保存到本地并且下次播放时自动加载本地保存的弹幕。此功能默认禁用。
Note
当开启autoload_local_danmaku选项时,会自动加载播放文件同目录下同名的 xml 格式的弹幕文件,优先级高于一切其他自动加载弹幕功能。如果不希望每次播放都加载之前保存的本地弹幕,则请关闭autoload_local_danmaku选项;或者在保存完弹幕之后转移弹幕文件至其他路径并关闭save_danmaku
选项。
save_danmaku
选项的打开和关闭可以运行时实时更新。在input.conf
中添加如下内容,可通过快捷键实时控制save_danmaku
选项的打开和关闭
key cycle-values script-opts uosc_danmaku-save_danmaku=yes uosc_danmaku-save_danmaku=no
想要启用此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并指定如下内容:
save_danmaku=yes
自定义curl
发送网络请求时使用的 User Agent,默认值是mpv_danmaku/1.0
想要使用此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并自定义如下内容(不可为空):
Note
User-Agent格式必须符合弹弹play的标准,否则无法成功请求。具体格式要求见弹弹play官方文档
若想提高URL播放的哈希匹配成功率,可以将此项设为mpv
或浏览器的User-Agent
user_agent=mpv_danmaku/1.0
自定义curl
发送网络请求时使用的代理,默认禁用
想要使用此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并自定义如下内容:
proxy=127.0.0.1:7890
指定是否使用 fps 视频滤镜@danmaku:fps=fps=60/1.001
,可大幅提升弹幕平滑度。默认禁用
注意该视频滤镜的性能开销较大,需在确保设备性能足够的前提下开启
启用选项后仅在视频帧率小于 60 及显示器刷新率大于等于 60 时生效
想要使用此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并指定如下内容:
vf_fps=yes
自定义弹幕的透明度,0(不透明)到255(完全透明)。默认值:48
想要使用此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并自定义如下内容:
transparency=48
指定合并重复弹幕的时间间隔的容差值,单位为秒。默认值: -1,表示禁用
当值设为0时会合并同一时间相同内容的弹幕,值大于0时会合并指定秒数误差内的相同内容的弹幕
想要使用此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并自定义如下内容:
merge_tolerance=1
中文简繁转换。0-不转换,1-转换为简体,2-转换为繁体。默认值: 0,不转换简繁字体,按照弹幕源原本字体显示
想要使用此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并自定义如下内容:
chConvert=0
指定 DanmakuFactory 程序的路径,支持绝对路径和相对路径
不特殊指定或者留空(默认值)会在脚本同目录的 bin 中查找,调用本人构建好的 DanmakuFactory 可执行文件
示例:DanmakuFactory_Path=DanmakuFactory
会在环境变量 PATH 中或 mpv 程序旁查找该程序
想要配置此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加类似如下内容:
Important
不要直接复制这里的配置,这只是一个示例,路径要写成真实存在的路径。此选项可以不配置,脚本会默认选择环境变量或bin文件夹中的可执行文件。
DanmakuFactory_Path=/path/to/your/DanmakuFactory
指定 OpenCC 程序的路径,支持绝对路径和相对路径
不特殊指定或者留空(默认值)会在脚本同目录的 bin 中查找,调用本人构建好的 OpenCC 可执行文件
示例:OpenCC_Path=opencc
会在环境变量 PATH 中或 mpv 程序旁查找该程序
想要配置此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加类似如下内容:
Important
不要直接复制这里的配置,这只是一个示例,路径要写成真实存在的路径。此选项可以不配置,脚本会默认选择环境变量或bin文件夹中的可执行文件。
OpenCC_Path=/path/to/your/opencc
指定弹幕关联历史记录文件的路径,支持绝对路径和相对路径。默认值是~~/danmaku-history.json
也就是mpv配置文件夹的根目录下
想要配置此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加类似如下内容:
Important
不要直接复制这里的配置,这只是一个示例,路径要写成真实存在的路径。此选项可以不配置,脚本会默认放在mpv配置文件夹的根目录下。
history_path=/path/to/your/danmaku-history.json
默认配置如下,可根据需求更改并自定义弹幕样式
想要配置此选项,请在mpv配置文件夹下的script-opts
中创建uosc_danmaku.conf
文件并添加类似如下内容:
#速度
scrolltime=15
#字体
fontname=sans-serif
#大小
fontsize=50
#阴影
shadow=0
#粗体 true false
bold=true
#弹幕密度 整数(>=-1) -1:表示不重叠 0:表示无限制 其他表示限定条数
density=0.0
#全部弹幕的显示范围(0.0-1.0)
displayarea=0.85
#描边 0-4
outline=1
#指定不会显示在屏幕上的弹幕类型。使用“-”连接类型名称,例如“L2R-TOP-BOTTOM”。可用的类型包括:L2R,R2L,TOP,BOTTOM,SPECIAL,COLOR,REPEAT
blockmode=REPEAT
#指定弹幕屏蔽词文件路径(black.txt),支持绝对路径和相对路径。文件内容以换行分隔
blacklist_path=
可能是Windows系统的病毒威胁与保护误查杀了本插件使用的DanmakuFactory.exe,把DanmakuFactory.exe当成了病毒。找到下图中的界面还原DanmakuFactory.exe并允许此应用
感谢以下项目为本项目提供了实现参考或者外部依赖
- 菜单api:uosc
- 弹幕格式转换:DanmakuFactory
- 简繁转换:OpenCC
- lua原生md5计算实现:https://github.com/rkscv/danmaku
- b站在线播放弹幕获取实现参考:MPV-Play-BiliBili-Comments
- 巴哈姆特在线播放弹幕获取实现参考:MPV-Play-BAHA-Comments