手动为 STRM / 网盘剧集设置片头片尾跳过标记的 Emby 插件。原理:直接调用 Emby 的
IItemRepository.SaveChapters(),写入 MarkerType.IntroStart / IntroEnd /
CreditsStart 三种 chapter marker。这是 Emby 客户端显示"跳过片头/片尾"按钮的
判断依据,跟这个标记是自动分析出来的还是手动填的没有关系,所以对 STRM 完全没有
兼容性问题——全程不需要真正读取视频流。
打点页面(Web/markereditor.html)是完全独立的静态网页,不挂在 Emby 后台菜单
下,也不依赖 Emby 前端的内部对象——早期版本用过 IHasWebPages 把页面注册进后台
菜单,但这个接口在不同 Emby 版本间不太稳定(4.9.5 上编译不过),干脆去掉,页面
改成拿 API Key 直连 REST 接口,兼容性更好也更简单。
在你的 Emby 服务端安装目录里(Linux 一般在 /opt/emby-server/system,Windows 在
C:\Program Files\Emby-Server\system 附近,Docker 里进容器 find / -name "MediaBrowser.Controller.dll" 搜)找到这三个文件:
MediaBrowser.Common.dll
MediaBrowser.Model.dll
MediaBrowser.Controller.dll
拷贝到本项目的 embylibs/ 文件夹里(跟 EmbyStrmIntroMarker 项目文件夹同级)。
项目编译目标是 net6.0(不是 netstandard2.0——Emby 4.9.5 本身跑在真正的 .NET 运行
时上,直接编译成 net6.0 能免掉一堆类型版本对不上的麻烦)。用 .NET 6/7/8 SDK 都行:
cd EmbyStrmIntroMarker
dotnet build --configuration Release编译产物在 EmbyStrmIntroMarker/bin/Release/net6.0/EmbyStrmIntroMarker.dll。
把 EmbyStrmIntroMarker.dll 拷到 Emby 的插件目录:
- Linux:
/opt/emby-server/plugins/(或你的实际安装路径下的plugins文件夹) - Windows:
C:\ProgramData\Emby-Server\plugins - Docker: 挂载到容器内的
/config/plugins目录
重启 Emby Server。这个插件没有后台配置页(故意去掉了 IHasWebPages,避免不同
Emby 版本内部接口不兼容的问题),装上之后控制台的"我的插件"里能看到它,但点进去
不会有设置界面——这是正常的,打点操作走的是下面单独的网页。
Emby 后台 → 高级 → API 密钥 → 新增一个 API 密钥,随便起个名字(比如 "IntroMarker"),复制生成的密钥,下一步要用。
Web/markereditor.html 是一个完全独立的网页,两种打开方式都行:
- 直接双击在浏览器里打开(file:// 方式)
- 或者放到你 NAS 上任意一个静态网站目录里(比如你已有的 nginx/BT 面板),用
http://你的NAS:某端口/markereditor.html访问,手机也能用这个方式访问
打开后填两个东西:
- 服务器地址:比如
http://192.168.1.10:8096 - API Key:第 4 步生成的那个
点"连接",如果显示"已连接"就说明插件接口工作正常,可以进入 ① 媒体库白名单 → ② 选剧集 → ③ 整剧规则 / ④ 单集微调 的正常打点流程了。地址和 Key 会存在浏览器的 localStorage 里,下次打开会自动重连。
- ① 媒体库白名单:勾选允许这个工具打点的媒体库,保存。没勾选的库,插件的 所有接口都不会返回、也不允许写入,误操作不会碰到别的库。
- ② 选剧集:选剧集 → 选季 → 会列出这一季所有分集,以及已有的标记。
- ③ 整剧统一规则(可选):一次填好片头开始/结束、片尾时间(推荐用"距离 结尾还有多少秒"模式,兼容每集时长有几秒误差的情况),点"保存并应用",会 直接套到这部剧全部季全部集。
- ④ 单集微调:点集数名字在上面弹出内嵌播放器预览,拖到想要的位置点对应
的"标记为..."按钮,会自动把当前播放时间填进输入框(也可以直接手打
mm:ss), 每一集右边单独点"保存"。
- Emby 目前的 chapter 系统只支持
IntroStart/IntroEnd/CreditsStart三种 跳过类型,不支持片尾结束点、重复片段(recap)等,客户端也只会用这三种来判断 显示按钮的时机。 - 保存时会保留原有的普通
Chapter(章节)标记,只替换/新增这三种 marker。 - 客户端要显示"跳过片头"按钮、以及片尾自动连播下一集,还需要在播放设置里把 相关选项打开(跟原生 Intro Skip 功能共用同一套客户端开关,插件本身不用额外 写代码去实现"自动跳到下一集",这是 Emby 客户端看到 CreditsStart 之后的原生 行为)。
- 整剧规则里"距离结尾"模式依赖 Emby 已经扫描出该集的真实时长;STRM 如果还没被
扫描过(没有
RunTimeTicks),这一集会被跳过,返回结果里会提示跳过了几集。