你的 Jellyfin 服务器在电视上播放时卡顿是因为你错过了这个设置
前几天,我在忙碌了一整天后坐下来想看电影。我自豪地打开电视,直接进入Jellyfin。我感到非常高兴,因为我不必应付通常的流媒体服务网络问题,因为我花时间在自己的硬件上自建了整个媒体库。我点击播放,果然,电影立即开始播放。没有加载转圈,也没有缓冲——太棒了。
但是随后,我注意到一个非常恼人的微卡顿。就好像每两秒钟,电影会以一种奇怪的慢动作播放一秒钟。也许别人不会注意到它,但它绝对让我抓狂。起初我无能为力去修复它。我检查了从以太网电缆到服务器的 CPU 使用率,但问题最终归结为一个简单但被忽视的设置。
让我们来谈谈帧的数学
方钉和圆形刷新率
当流媒体出现卡顿时,我的本能反应是责怪管道或引擎。我的视频是在服务器端转码的,而不是在电视上。此外,当我在 MacBook 上或直接在作为服务器的 PC 上播放同一部高比特率电影时,播放非常顺畅。事实证明,罪魁祸首是帧率不匹配。
大多数电影的拍摄帧率是 23.976 FPS,我们通常简称为 24p。我的电视,就像几乎所有现代显示器一样,是 60Hz 屏幕,这意味着它每秒刷新六十次。然而,我的 Android 电视盒当前设置为 50Hz。如果你尝试计算 24 FPS 的电影如何适配 50Hz 或 60Hz 的刷新率,你很快就会明白为什么我的播放感觉如此不对劲。
当你在 60Hz 屏幕上播放 24 FPS 的电影时,设备需要执行一种叫做 3:2 补帧 的操作。由于 60 不能被 24 整除,数学运算结果为 60/24=2.5。为了实现这一点,播放器会先显示电影的第一帧三次,然后显示第二帧两次 (3 + 2=5)。这个模式会在整秒内重复,从而达到 60 次刷新。这通常会导致一种非常轻微的“抖动”,大多数人已经习惯,但当你的设备设置为 50Hz 时,运算情况就会变得更加复杂。
对于50Hz输出,计算变为50/23.976 ≈ 2.08。没有一种干净、均匀的方式来分配这些帧。硬件本质上是在试图把方钉塞进圆孔,为了让视频与音轨同步,不得不以不规则的间隔重复或丢弃帧。我看到的那种节奏感慢动作效果,是电视盒每隔几秒试图赶上自身的结果。最终导致视频文件与实际显示之间的帧不匹配,这正是微卡顿的根本原因。
在 Jellyfin 中找到解决方法
这只是一个开关
幸运的是,有一个简单的设置可以解决这个问题,但你必须知道在哪里找。我实际上并没有在官方的 Android TV 版 Jellyfin 客户端中找到这个选项,它的界面比较简化。相反,我使用了一个叫做 Dune 的替代客户端。如果你使用像 Dune 这样更高级的播放器,甚至是 Kodi 之类的播放器,你就可以更好地控制硬件如何处理视频信号。
这个修复方法是一个叫做刷新率切换的功能。它的作用是告诉你的电视盒子根据你观看的电影的帧率实际调整输出。如果你播放一部24p的电影,电视盒子将停止以60Hz或50Hz输出,并将硬件切换到24Hz(或者像48Hz或120Hz这样的倍数)。这样就能形成1:1的节奏,确保电影的每一帧在屏幕上显示的时间完全相同。
在《沙丘》中,你只需进入播放设置,高级设置,然后将刷新率切换选项切换为按设备缩放。当我切换后返回观看电影时,差别立刻显现。播放时,屏幕短暂变黑——这是 HDMI "握手" 过程,设备在同步到新的刷新率时发生的——然后电影就开始播放了。那种恼人的、有节奏的卡顿完全消失了。
你有三种刷新率切换选项。禁用是我们不想要的。选择在设备上缩放会将切换的负担转移到设备上,而在电视上缩放则会将其转移到电视上。第二种方法有点不稳定,因为它必须通过 HDMI-CEC 与电视屏幕协商,将自己设置为 24Hz。
一切都在于时机
有了这个设置,现在你终于可以看到导演和剪辑师所希望呈现的动作画面,不会再有 3:2 下拉或 50Hz 冲突的人为干扰。这是一个小修正,但导致画面卡顿的原因比比如说 CPU 超载要有趣得多——我不得不分享。我希望你和我一样喜欢它!

