为什么 MacBook 的刷新率里有 59.94Hz 这种奇怪的小数?

打开 MacBook Pro 的显示器设置,刷新率列表大概长这样:

1
2
24Hz / 25Hz / 30Hz / 48Hz / 50Hz / 60Hz / 120Hz
23.976Hz / 47.952Hz / 59.94Hz

整数和小数混在一起。整数好理解,那几个小数是怎么来的?

答案要从 70 年前说起。


刷新率是什么?

显示器的刷新率,就是屏幕每秒重新绘制画面的次数。60Hz 意味着每秒画 60 张,相邻两张之间间隔约 16.7 毫秒。

视频内容也有自己的帧率——每秒包含多少帧画面。播放视频时,显示器刷新率最好和视频帧率一致。不一致会出现两种问题:

  • 画面撕裂:显示器刷新到一半,视频已经换了下一帧,屏幕上同时出现两帧画面,产生一条横向裂缝
  • 抖动(Judder):帧率和刷新率不整除,某些帧被显示 2 次、某些帧只显示 1 次,画面节奏不均匀,看起来像在轻微颤抖

MacBook 的 ProMotion 自适应刷新率会自动切换到和当前视频匹配的刷新率,消除这两个问题。整数刷新率对应整数帧率的内容,小数刷新率对应历史遗留的小数帧率内容。


一切始于 1953 年的彩色电视

黑白电视时代,帧率是整整齐齐的 60Hz,和美国电网频率同步,画面稳定。

1953 年,美国推出彩色电视标准(NTSC)。工程师需要在原有黑白信号里塞入一个彩色信号。问题是,电视信号里同时存在三种频率:

  • 行扫描频率($f_H$):电子束从左到右扫描一行的频率,约 15,750 Hz
  • 彩色副载波($f_{色}$):携带颜色信息的高频信号,约 3.58 MHz
  • 音频载波($f_{音}$):携带声音信息的信号,4.5 MHz

这三个信号同时在一根天线上传输。频率关系稍有不对,就会互相干扰,在画面上产生肉眼可见的条纹。

要消除干扰,三个频率之间必须满足严格的数学关系。工程师算来算去,发现唯一的解法是把帧率从 60Hz 降低 0.1%,乘以 1000/1001:

$$60 \times \frac{1000}{1001} \approx 59.94 \text{ Hz}$$

一个将近整数却永远不是整数的帧率,就这样被写进了全球广播标准,沿用至今。


为什么频率不对会出现条纹?

这里有个物理现象叫差拍(Beat)。

两个频率接近但不相等的信号叠加,会产生一个新的低频信号,频率等于两者之差。440Hz 和 441Hz 的音叉同时响,你会听到每秒”嗡”一下的低频颤音,这就是差拍。

在电视信号里,彩色副载波(3.58 MHz)和音频载波(4.5 MHz)叠加,差值约 920 kHz。这个差拍频率如果和行扫描频率不成整数比,就会在画面上形成缓慢移动的低频条纹——就像两张频率略有差异的网格叠在一起,出现大块明暗图案(莫尔条纹)。

三个频率约束关系


为什么偏偏是 0.1%?

数学逼出来的,不是拍脑袋定的。

第一个约束:彩色副载波必须”隐形”

彩色副载波在画面上会产生细密的点状干扰。要让这些干扰点不可见,需要利用人眼的特性:如果相邻两行的干扰点位置正好相反(一行亮的地方下一行暗),人眼会自动把它们平均掉,看不见。

要实现这个效果,副载波频率必须是行频的奇数倍的一半——比如 2.5 倍、3.5 倍,而不能是整数倍(2 倍、3 倍)。这样每扫描一行,干扰点的相位就翻转一次,相邻行互相抵消。

$$f_{色} = \frac{455}{2} \times f_H \quad \cdots (1)$$

455 是奇数,所以 455/2 满足条件。

干扰消除原理

第二个约束:差拍也必须”隐形”

彩色副载波和音频载波的差拍同样会产生条纹,所以差拍频率也必须是行频的奇数倍的一半:

$$f_{音} - f_{色} = \frac{117}{2} \times f_H \quad \cdots (2)$$

117 也是奇数,这是满足约束的最近整数解。

联立两个约束

将 (1) 和 (2) 相加,$f_{色}$ 消掉:

$$f_{音} = \frac{455 + 117}{2} \times f_H = 286 \times f_H$$

$$f_H = \frac{4{,}500{,}000}{286} \approx 15{,}734.27 \text{ Hz}$$

比黑白电视时代的 15,750 Hz 低了约 0.1%。

推出帧率

NTSC 制式每帧有 525 行,采用隔行扫描(每帧分两场扫描,帧率 = 2 × 行频 ÷ 525):

$$f_{帧} = \frac{2 \times f_H}{525} = \frac{2}{525} \times \frac{4{,}500{,}000}{286} = \frac{9{,}000{,}000}{150{,}150} = \frac{60{,}000}{1001} = 60 \times \frac{1000}{1001}$$

推导流程

1001 从哪来?

$$1001 = 7 \times 11 \times 13$$

  • 每帧 525 行 = 3 × 5² × 7
  • 差拍系数 286 = 2 × 11 × 13

525 × 286 = 150,150,约分后分母剩下 7 × 11 × 13 = 1001。没有人刻意选这个数,它是音频频率、行数、差拍系数的因数结构联立后自然出现的。


MacBook 上的整数刷新率从哪来?

小数的来源说清楚了,整数就好理解了。

整数刷新率对应本来就是整数帧率的内容:

  • 24Hz / 48Hz:电影院标准(24fps),以及高帧率电影(48fps,如《霍比特人》)
  • 25Hz / 50Hz:欧洲 PAL 制式,基于 50Hz 电网,帧率天生是整数
  • 30Hz / 60Hz / 120Hz:日常使用、游戏、桌面 UI

小数刷新率对应经过 ×1000/1001 修正的内容:

  • 23.976Hz:好莱坞电影在流媒体上的标准帧率(24 × 1000/1001)
  • 47.952Hz:23.976 的 2 倍,用于高帧率内容匹配
  • 59.94Hz:北美电视、Netflix、YouTube 的主流帧率(60 × 1000/1001)

各视频标准帧率对比

视频内容 帧率 MacBook 切换到
Netflix / YouTube(北美) 59.94fps 59.94Hz
好莱坞电影(流媒体) 23.976fps 47.95Hz(2倍)
欧洲 PAL 制式 25fps 50Hz
电影院 DCP 24fps 24Hz
桌面 UI / 游戏 60Hz / 120Hz

小结

MacBook 刷新率列表里的小数,是 1953 年美国工程师在数学约束下被迫引入的 0.1% 偏移(×1000/1001)的直接产物。整数刷新率对应那些本来就用整数帧率的内容标准。

两者并存,是因为世界上的视频内容本来就分两个体系:一个带着 70 年前的历史包袱,一个没有。MacBook 都要兼容。