Skip to content

About

A Bilibili-inspired skin and companion app for PotPlayer, featuring redesigned controls, keyboard shortcuts, subtitles, and danmaku.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

BilibiliUI for PotPlayer

开发阶段:pre-alpha。 面向 Windows 64 位 PotPlayer 的哔哩哔哩风格皮肤与辅助程序,目前仍在迭代,功能和配置格式可能变化。

项目保留 PotPlayer 的播放、解码和渲染能力,调整控制栏、键鼠交互、轨道选择及字幕/弹幕界面。它不是哔哩哔哩官方项目,也不提供 B 站账号、在线点播或缓存下载功能。

当前功能

  • 精简控制栏:左侧为上一项、播放/暂停、下一项和时间;右侧为音频参数、视频参数、倍速、字幕和弹幕、音量、全屏。
  • 悬浮控制:音量按钮单击静音,悬停调音量;倍速菜单提供 0.25×、0.5×、1×、2×、3×、5×、10×,1× 时按钮显示“倍速”。
  • 音视频信息与选轨:显示 Hi-Res、空间音频、声道布局、HDR、分辨率和帧率,详细规格保留在悬浮列表中。单轨时不弹出列表,打开文件时沿用 PotPlayer 的自动选轨结果。Hi-Res 标记描述文件规格,不评价实际听感。
  • 字幕和弹幕:自动发现同目录同名文件,支持手动导入和容器内文本软字幕;支持主/副双字幕、普通弹幕独立开关、内容分类、拖动改分类和分页列表。
  • 高级弹幕转换:B 站 Mode 7 通过 DanmakuFactory 转为 ASS,再由 libass 渲染;与不支持的 Mode 8/9 分开列出,可独立开关。
  • 样式设置:字体预览、字号、粗体/斜体、文字颜色、背景填充、描边和投影;弹幕另有类型过滤、显示区域、透明度、速度、随屏幕缩放和防挡字幕。设置与手动分类自动保存。
  • 侧栏内缩:窗口和全屏模式下均在内部缩小视频区域,保持外窗尺寸和鼠标位置;可切换原生浏览器与播放列表,开关侧栏保留当前标签。空间不足时暂时收起,放大后恢复原来的展开状态。进入全屏时临时收起侧栏,退出时恢复窗口模式的记忆;全屏内手动开关会更新这份记忆。全屏右边缘悬停不展开侧栏。
  • 悬浮控制栏与小窗模式:正常模式的半透明底栏在鼠标进入播放区时显示。小窗模式提供悬浮标题栏、精简底栏、字幕/弹幕开关及视频比例锁定,鼠标移出后只保留画面。
  • 360° 操作:隐藏四个固定预览视角,按住中键拖动视角,单击中键回正。

控制栏嵌入播放器原生窗口,跟随最大化、恢复尺寸、全屏和 DPI 变化;普通窗口和全屏下鼠标静止 3 秒后隐藏、移动后恢复,鼠标移出播放区也会隐藏。小窗模式仅在鼠标移出窗口后隐藏。操作悬浮菜单时保持显示,悬浮菜单和快捷键只对获得焦点的播放器启用。

开发计划

弹幕格式相关内容将不再更新,考虑做一个独立的弹幕库。

  • 0.2.x: 优化弹幕显示与交互,完善实时字幕翻译,接入语音生成字幕
  • 0.3.x: 添加设置功能,实现类 B 站播放器的画面与声音调节,实现快捷键框架
  • 0.4.x: 接管 PotPlayer 窗口,尝试接入 Fluent 与 Mica 效果
  • 0.5.x(try): 尝试令魔改版 PotPlayer 兼容部分皮肤
  • 1.0.0: 进一步优化 UX,发布第一个版本

环境要求

  • Windows 10/11 x64 与 64 位 PotPlayer,使用系统 .NET Framework。
  • 安装包包含 MediaInfo、LGPL 版 FFmpeg 及 libass 动态库,无需另装渲染依赖或修改 PATH。
  • 开发构建需要 Git、x64 MinGW-w64 GCC、GNU Make、Bash、CMake、Python 和 PowerShell;C# 使用系统 Framework64 编译器。

安装

关闭所有 PotPlayer 窗口,运行 BilibiliBehaviors-版本-win-x64-setup.exe,选择包含 64 位 PotPlayer 的目录。安装程序备份原有鼠标、快捷键、皮肤选择和已有同名资源,然后启用 BilibiliLite。

入口为 Extension/BilibiliBehaviors/BilibiliBehaviors.exe,由 PotPlayer 播放扩展启动并加载 8 个业务/基础 DLL。没有托盘图标、登录自启、服务或计划任务;多个播放器窗口共用宿主,最后一个实例退出后释放资源并结束进程。

原生主窗口自定义快捷键会暂时清空,首次备份保存在 %LOCALAPPDATA%\BilibiliPotPlayer\installation,升级沿用。旧版手动安装需要先恢复,或使用安装参数 /LEGACYBACKUP="原 original-input.json 路径" 导入备份。

安装和卸载细节见 安装说明,模块边界见 架构说明。

常用操作

操作 功能
→ / ← 短按 前进 / 后退 5 秒
→ 长按 按住期间 2 倍速,松开恢复原速度
← 长按 连续后退
↑ / ↓、鼠标滚轮 调整音量,每次 10 个百分点
Space、视频区域左键单击 暂停 / 播放
F、视频区域左键双击 进入 / 退出全屏
Esc 退出全屏
, / [、. / ] 上一项、下一项
M 静音 / 取消静音
Shift+1 / Shift+2 1 倍速 / 2 倍速
D 弹幕总开关(普通与高级)
C 字幕总开关,保留主/副字幕选择
S 切换小窗/正常模式
X 打开 / 收起播放列表
360° 视频中键拖动 / 单击 转动视角 / 回正
F1–F12(F5 除外) 保留原生功能

F5 保留给后续自定义设置页,Enter 当前无动作。右键菜单暂时禁用,未列出的播放器快捷键由辅助程序屏蔽;系统窗口操作和原生菜单/对话框输入不受影响。完整按键表见上表,部署细节见安装说明。

字幕与弹幕

按内容识别 SRT、ASS/SSA、WebVTT、LRC、TTML、B 站 XML 及约定结构的 JSON,扩展名不单独决定用途。有效条目用途不明时进入“分类存疑”,可以拖到对应分类;混有普通和高级弹幕的来源会拆开列出。

自动发现仅限同目录、与视频去掉最后一个扩展名后完全同名的文件(忽略大小写),例如 视频.mp4 搭配 视频.xml。不同名文件可手动导入。没有有效字幕/弹幕条目的文件不会进入列表,通用 JSON 文件也需包含支持的时间文本结构才能导入。

列表中的长文件名截短时保留扩展名,例如 视频名称… .xml;悬停仍可查看完整名称。

自动识别先逐事件检查高级协议和有效运动/特效,再按重叠、聚集、顺序性、水平运动与位置分布区分普通弹幕和字幕。少量样本或证据不足保留存疑;内封 ASS 在分类前保留样式和动画信息。规则与诊断命令见 识别算法说明。

识别优先级为:可核对的原始元数据、已知生成器的样式约定、通用分析。支持读取 dan-any/biliy 的 ASS Raw 数据(新版 Protobuf、旧版 JSON,以及 gzip/brotli/zstd、Base64/Base16384),按文本和时间核对已有事件;不会重新播放 Raw 中已被过滤掉的记录。DanmakuFactory 的普通样式与 SP 高级样式独立识别,静态或水平滚动的 SP 也保留为高级弹幕。未知来源、未知样式或损坏元数据继续使用通用分析,成品无需安装 Node 或 JS 引擎。

单字幕模式再次点击选中项即可关闭。开启多语言字幕后最多选择两条,分别标为主/副;先填空位,满两条时替换副字幕,关闭主字幕会将副字幕提升为主字幕。

实时字幕翻译沿用 PotPlayer 原生翻译扩展的引擎、账户和语言设置,译文仍由现有字幕层显示,保留字体、位置和灰底。选择文本主字幕后,从“实时字幕翻译”进入原生设置并启用翻译;默认关闭,图像字幕和内置 AI 翻译暂不保证兼容。使用方式与支持范围见原生字幕翻译。

普通弹幕支持滚动、反向滚动、顶部及底部固定。主菜单提供显示区域、不透明度和速度,字号移入螺母设置页。默认保留弹幕原色,也可指定统一文字颜色;关闭“启用彩色弹幕”会强制渲染为白色,与按原始颜色过滤弹幕相互独立。

默认弹幕采用常规字重、轻描边和 100% 字号,100% 对应 25 个逻辑像素,按窗口 DPI 换算。默认关闭随屏幕缩放;“重墨”、粗体和随屏幕缩放可单独选择。普通弹幕使用整个播放画布,包含视频比例不同产生的上下或左右黑边;字幕仍按实际视频画面定位。

普通字幕默认采用微软雅黑常规白字,不带弹幕描边;在 1080 像素高画面上以 48 像素为基准随视频缩放,与弹幕字号独立。字幕灰底采用圆角和较宽的左右留白。旧默认预设更新到这一外观,自定义样式保留;标准 ASS 字幕继续使用作者样式。

显示区域达到 100% 时显示“弹幕密度”:正常、较多、重叠。正常与较多按来源已有权重采用不同筛选门限,同类型弹幕避免重叠;滚动、顶部固定和底部固定分别排布,互不独占整行。重叠沿用较多的筛选,最多使用三组碰撞池,组内仍避免碰撞,组间允许交叠。无权重的本地来源不作权重筛选,空间不足时仍可能拒绝入场;正常与较多的筛选和排布策略相同。密度选择自动保存,只影响之后入场的弹幕。

“防挡字幕”在当前字幕文字下面显示半透明灰底,只遮住灰底范围内的弹幕像素,不预留底部空带。弹幕仍按原轨迹移动,移出灰底后恢复可见;字幕结束或关闭后,该区域立即恢复显示弹幕。

ASS/SSA 中的普通弹幕与 XML/JSON 使用同一套区域、透明度、速度、字号和过滤设置。播放时间在 PotPlayer 的位置报告之间平滑插值,普通弹幕运动由 libass 连续渲染;暂停冻结,跳转后重新定位。关闭速度同步时,临时倍速不会让已有弹幕横向跳动。

滚动基础时长根据画面与文字的逻辑宽度计算,再应用用户速度;固定弹幕使用独立显示时长。排布按文字高度和换行寻找空间。随屏幕缩放采用分段字号曲线,默认关闭;已有弹幕保留入场时的时长、样式和碰撞组。参考规则见网页端弹幕行为。

滚动弹幕从画面边缘逐条进入,在选定区域内分散排布,避免形成按入场时间排列的斜列;加载、启用来源、跳转或改变设置时,不补播已错过的弹幕。每条弹幕入场时确定样式、区域和速度,样式变更只影响之后入场的弹幕。来源开关、类型过滤及弹幕总开关(D)即时移除对应的在屏弹幕;重新打开后仅显示之后到达的弹幕。

顶部/底部固定弹幕始终显示在滚动弹幕之上,字幕及其灰底再覆盖弹幕;此顺序不受入场先后和速度同步设置影响。

字幕、普通弹幕和标准 ASS/SSA 特效统一由 libass 渲染,并支持容器字体附件。ASS 字幕与高级特效保留作者的画布、样式、Layer、运动、旋转、缩放、淡入淡出、卡拉 OK、裁剪和矢量绘图;普通弹幕采用统一排布和用户设置。高级列表中可单独开关 ASS 特效,“高级”过滤按钮控制这类效果。渲染链路见 渲染说明。

Mode 7 在后台加载时经 DanmakuFactory 转换一次,转换结果复用现有 ASS 渲染链路和高级过滤开关。普通弹幕使用统一排布,标准 ASS/SSA 字幕与高级特效直接渲染;源文件不修改。转换失败与未支持的事件保留计数及原因,不会作为普通弹幕播放。依赖固定为 third_party/DanmakuFactory 子模块,接入与后续改造安排见 弹幕转换说明。

设置保存在 %LOCALAPPDATA%\BilibiliPotPlayer\caption-options.json,包含显示样式和手动分类,不改写源字幕或弹幕文件。

pre-alpha 限制

  • B 站 Mode 8(代码)与 Mode 9(BAS)仅识别、分类与计数,暂不播放或执行。Mode 7 按 DanmakuFactory 当前能力转换,路径等上游未处理的表现不承诺完整还原;弹幕格式支持保留当前范围。
  • PGS、VobSub 等图像字幕沿用 PotPlayer 原生渲染,面板会列出,但暂不支持在此切换。
  • 语音生成字幕、自定义右键菜单和 F5 设置页尚未实现;智能识别人像的防挡弹幕尚未实现。
  • Hi-Res、HDR、空间音频标记基于源文件信息,不表示当前设备或渲染链路已经完整输出对应效果。
  • 窗口宽度低于 1024 或高度低于 540 逻辑像素时暂时关闭并禁止展开侧栏,正常控制栏保持一致;宽度低于 800 或高度低于 480 时进入小窗模式。这些数值按本皮肤控件空间制定,并非 B 站官方阈值。S 默认使用约 640 像素宽的视频窗口,返回时恢复至允许侧栏的最小尺寸,并按记忆状态展开侧栏。
  • 触控布局保留,但尚未像常规桌面布局一样完整验证;不同 PotPlayer 版本、渲染器和多屏 DPI 组合仍需进一步验证。

卸载与恢复

关闭 PotPlayer,在 Windows“已安装的应用”中卸载 Bilibili Behaviors for PotPlayer。卸载恢复原操作配置、快捷键及皮肤选择,恢复安装前已有的同名文件,移除本项目记录的安装文件。字幕/弹幕偏好保留在用户目录。

构建与验证

# 首次克隆或更新已有检出后初始化依赖源码
git submodule update --init --recursive

# 完整构建、验证并生成安装包,输出到 build/out/dist/
.\build\package.ps1

# 只改 C# 后编译 DLL 并运行检查
.\build\managed.ps1 -Test

# 修改 C 源码或皮肤覆盖文件后
.\build\native.ps1
.\build\skin.ps1

# 修改转换适配器或 DanmakuFactory 源码后
.\build\danmaku-factory.ps1

# 开发诊断(只读)
.\scripts\dev.ps1 status

build/ 保存构建、依赖下载、安装与卸载逻辑,scripts/ 保存开发诊断和样本生成。GitHub Actions 的普通 push/PR 复用第三方依赖缓存,每次编译本项目 DLL,运行逻辑、原生提取、转换/像素渲染和安装恢复检查。缓存缺失或依赖输入改变时编译一次并缓存;手动触发或推送 tag 时完整重建外部依赖并生成安装包工件,不自动发布 Release。详细流程见 安装与构建说明。

目录

src/Host/            BilibiliBehaviors.exe 与 PotPlayer 启动扩展
src/Contracts/       跨模块接口和配置/数据结构
src/Runtime/         生命周期、模块校验和每窗口组合
src/Platform/        Win32、DPI、公共绘制与资源
src/Input/           键鼠与相机手势
src/Windowing/       侧栏、全屏、小窗和原生布局桥接
src/Playback/        控制栏、进度、倍速和音量
src/Media/           媒体规格、轨道和选轨
src/Captions/        字幕、弹幕和设置界面
src/Native/          PlayerLayout、FFmpeg 文本适配器与 libass 渲染适配器
skin/base/           固定的默认皮肤底包和校验值
skin/overrides/      8 个修改定义和 1 个新增图标
config/             输入配置
third_party/        MediaInfo、LGPL FFmpeg、libass、DanmakuFactory 子模块及构建配置
LICENSES/           第三方许可证与声明
scripts/            开发工具
build/              构建、安装与卸载;out/ 不进入 Git
tests/              逻辑、原生提取、窗口和安装检查

皮肤构建时将底包与覆盖文件合并为完整 DSF。配置备份及开发验证产物不进入 Git。

授权与资源来源

本项目原创代码采用 MIT License。皮肤基于 PotPlayer 随附的默认皮肤修改,原始皮肤资源不属于本项目原创内容;Dolby 标志、哔哩哔哩播放器图标及相关商标归各自权利人所有,不包含在原创代码的 MIT 授权范围内。

第三方许可证与声明统一放在 LICENSES/。FFmpeg 动态库使用 LGPL 构建;libass 使用 ISC 许可,字体依赖采用 FTL/MIT/LGPL 许可。安装包包含对应原始源码压缩包、配置及构建脚本。

About

A Bilibili-inspired skin and companion app for PotPlayer, featuring redesigned controls, keyboard shortcuts, subtitles, and danmaku.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages