Danmaku Cosmos 是一个 IINA 弹幕插件。我制作的 IINA-DanmakuCosmos-Patch 没有重写它,而是以 v3.6 为基础,保留原插件的解析、匹配和渲染能力,再加入更完整的外观控制和一套可重复构建的配置方式。
原插件能做什么
Danmaku Cosmos 支持 Niconico XML、Niconico V1 JSON 和基础的 Bilibili XML。它能自动查找与视频同名的弹幕文件,也能从侧栏或 Plugin 菜单手动加载。播放时可以选择 CSS 或 Canvas renderer,并调整开关、透明度和字体缩放。
最简单的本地文件结构是:
video.mp4
video.xml
两个文件使用相同 basename。用 IINA 打开 video.mp4 后,插件会自动寻找 video.xml。它也支持 弹幕、Comments 或 コメント 子目录,以及弹弹play网络匹配。
用 OpenCLI 获取视频与弹幕
如果还没有本地文件,可以用 OpenCLI 下载 Bilibili 视频,并通过它的 Browser Bridge 保存同名 XML。下面需要 yt-dlp、ffmpeg 和 jq;把 BV1xxx 换成实际 BV ID。
# OpenCLI Browser Bridge extension: https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk
# OpenCLI npm package: https://www.npmjs.com/package/@jackwener/opencli
BVID=BV1xxx; OUTPUT=./bilibili; SESSION=bilibili-danmaku; \
mkdir -p "$OUTPUT" && \
opencli bilibili download "$BVID" --output "$OUTPUT" --quality 1080p --site-session persistent --window background && \
VIDEO=$(find "$OUTPUT" -maxdepth 1 -type f -name "$BVID*.mp4" -print -quit) && test -n "$VIDEO" && \
opencli browser "$SESSION" open "https://www.bilibili.com/video/$BVID" --window background >/dev/null && \
opencli browser "$SESSION" eval "(async()=>{const v=await fetch('https://api.bilibili.com/x/web-interface/view?bvid=$BVID',{credentials:'include'}).then(r=>r.json());if(v.code)throw new Error(v.message);const r=await fetch('https://api.bilibili.com/x/v1/dm/list.so?oid='+v.data.cid,{credentials:'include'});return {xml:await r.text()}})()" \
| jq -er '.xml' > "${VIDEO%.*}.xml" && \
opencli browser "$SESSION" close >/dev/null
结果是一份带音视频的 MP4,以及与它 basename 完全相同的 XML。这个片段只负责下载,不参与本项目的插件构建。
修改版增加了什么
修改版主要解决一个问题:让弹幕外观可以明确配置、保存并重复安装,而不是把个人选择散落在 Python 和 JavaScript 代码里。
它增加了字体 family 与 fallback、Regular 到 Bold 的字重选择、顶部显示区域、30–200% 字号范围,以及 IINA 侧栏和 Plugin 菜单里的快捷入口。透明度、描边、速度、renderer、弹幕上限和弹弹play自动联网策略也统一放进项目根目录的 profile.toml。
例如,我当前使用的配置是:
[font]
size_percent = 55
family = ["Doto Medium", "Huiwen-mincho"]
weight = "regular"
[layout]
top_area_percent = 75
这表示弹幕字号为 55%,优先使用 Doto Medium,缺字时由 Huiwen-mincho 或 macOS 字体回退补齐;弹幕画布只占视频顶部 75%,下方保留观看空间。
安装与修改配置
项目需要 macOS、IINA 和 Python 3.11 或更新版本,不依赖第三方 Python package。
git clone https://github.com/codingEzio/IINA-DanmakuCosmos-PatchOSS.git
cd IINA-DanmakuCosmos-PatchOSS
./patch doctor
./patch install
./patch install 会下载并校验固定版本的上游插件,在临时目录应用修改、生成完整 .iinaplgz,然后交给 IINA 安装。IINA 会显示插件权限确认;批准导入即可。
以后修改 profile.toml,再次运行 ./patch install。新配置在安装后首次载入时应用一次,之后不会在每次启动时覆盖你在 IINA 侧栏做的手动调整。只修改注释也不会重置现有设置。
为什么关闭自动更新
这是一个完整的修改版插件,不是运行时注入。输出包会关闭 IINA 的 GitHub 自动更新元数据,避免未经验证的上游更新直接覆盖修改。
这不等于永远停留在旧版本。项目会主动跟进上游:固定新版本及 SHA-256、检查源码兼容性、重新应用 patch,再通过测试和真实视频播放验证。目前使用的是 Danmaku Cosmos v3.6。
边界与限制
这个项目只构建插件,不下载视频,也不下载或整理弹幕文件。Bilibili 高级弹幕、代码弹幕和 BAS 弹幕仍不受支持;普通滚动弹幕与顶部、底部固定弹幕会按照 niconico 风格渲染。
如果只是想直接使用原插件已有的功能,上游 Danmaku Cosmos 已经足够成熟。这个修改版更适合希望精确控制字体、字重、字号、显示区域和默认策略,并愿意用一份可读配置管理这些选择的人。