Jellyfin 12.0 来了:升级前先备份

Jellyfin 跳过了 10.12,把稳定版直接发到了 12.0。9/7 官方公告把这次的变更写得比以往都细——因为这次真不是小升级,数据库 schema 要重写,第三方插件全要重新编译。

公告第一段就用大写加粗写了 “IT IS VERY IMPORTANT THAT YOU READ THIS SECTION BEFORE UPGRADING”——从开发者的口气看,这次升级出错的代价比平时大。下面是升级前你需要做的事,按公告 TL;DR 复述:

  • 先把 Jellyfin 停掉,全量手动备份 data 目录和 config 目录。公告原话:”This release changes the database schema and actively rewrites data on first boot, so a backup is the only way back to your previous version.” 备份是回滚的唯一通路。
  • 起始版本必须是 10.10.7 或任意 10.11.x。还在更老版本的人,要先升 10.10.7 再升 12.0,不能从老版本直接跨。
  • 把所有第三方插件先卸载。10.11 时代的插件不兼容 12.0——公告里写得直白:“Plugins built for 10.11 will not load on 12.0.” 官方插件已经更新,第三方要看作者跟没跟上。
  • 检查用户名:现在用户名大小写不敏感,“two accounts can’t have names that only differ in capitalization”。如果你有两个仅靠大小写区分的账号(比如 tanTan),数据库迁移会直接挂掉。
  • 升完别动,让首次启动自己跑完迁移。公告警告:“Do not stop the server while migrations are running.” 第一次全库扫描也会明显比平时长,不要中途打断。

这是公告里的关键变更,挑几个对自托管玩家影响大的说:

  • 版本号从 10.x 跳到 12.0。如果你的 docker-compose 里写了 image: jellyfin/jellyfin:10.11.0 这种标签 pin,要改成 12.0.x,或者改成 latest 让它自己跟着走。监控脚本、Jenkins、自动化部署凡是解析版本号的地方都要看一眼。
  • 数据库结构重写。播放列表和合集以前是嵌在一行里的大 JSON,现在每条记录都是独立行,”Continue Watching” “Next Up” 这些查询变快,删大量项目不再中途失败。代价就是上面说的”全量重写 + 不可中断”。
  • FFmpeg 升级到 8.1。CUDA 转置、OCL 缩放和色调映射针对 Mali GPU 重新调过;HLG 色调映射改用 BT.2446 Method B;新增 Dolby Vision Profile 5 的 dvh1 HLS 变体。
  • AV1 直接串流到电视客户端。另外 webOS 25+ 的 MKV 文件支持杜比视界,Tizen 支持变形视频直播,iOS 后台播放 + 锁屏下继续。Android TV 加了无法处理旋转视频的设备 profile 兜底。
  • .NET 10 + 插件接口变更。第三方插件作者得重新 target、重新编译。原来调替代版本、播放列表相关方法的插件要走新的库方法。Scryer 这类依赖 Jellyfin API 的”自托管全家桶”短期内大概率要等社区跟进。
  • 移除 /emby//mediabrowser/ 旧地址。如果你还在用特别老的第三方客户端访问这两个路径,升完直接连不上。
  • 内部 TLS/SSL 移除被推迟。本来说这一版要拿掉,现在推到下个版本。公告里的建议没变:Jellyfin 前面还是放一层反向代理(nginx/Caddy),不要直接暴露 8096。

两个我比较在意的”软”改动:搜索插件化和音乐推荐。搜索现在支持插件并行返回结果,相当于第三方可以挂自己的元数据源(Last.fm、MusicBrainz 之外的东西也能并进来)。音乐推荐里加了 ListenBrainz 集成——这个对在 Jellyfin 里听本地音乐的人是好事,能拿到基于真实收听数据的”相似艺术家”,不再是纯算法拼凑。

Web 端 Modern 布局成了默认,老版叫 Legacy,TV 还是用 TV 布局。”still watching” 提示、逐帧拖动(,.)、拖动进度条显示章节名、文件夹可标记已观看——这些是小细节但对每天在用的人很值钱。Bookshelf 插件正式弃用,功能并入核心或拆成 ComicVine / GoogleBooks 插件,用书库漫画的人要重新装一下提供商。

我自己还没升。原因不复杂:第三方插件生态要一两周才能稳定下来,Scryer 这类上下游的兼容补丁通常要等几个 PR 合并后才敢动生产库。还有就是公告里把”全量备份”和”不可中断迁移”写得很重,这套流程我没在测试环境跑过之前,不打算在跑着的实例上直接试。理论上备份+恢复的流程不复杂,但”理论”和”真的能 rollback 回去”之间经常有 1 个小时的故障时间。

如果你和我一样是 NAS 上跑单实例、给家人一起用的,可以等两周看社区反馈,再决定要不要进。如果是不停机要求高的(朋友/客户也在用),建议先在测试容器里走一遍迁移流程,确认数据库改写能跑完、关键插件作者发了 12.0 兼容版再上生产。

对跑 Jellyfin 的人来说,12.0 是那种”应该升但不急着今晚升”的版本。FFmpeg 8.1 和 AV1 直解是真香,数据库重写是必要代价。把备份做扎实、等插件跟上、再动手,是更稳的姿势。

发表评论