为什么整个屏幕的屏幕录制与 window 与单个选项卡的屏幕录制会导致文件大小明显不同?

Why does screen recording of the entire screen vs a window vs a single tab result in significantly different file sizes?

我正在努力将屏幕捕获集成到我正在扩展的框架中。我正在通过 getDisplayMedia 方法请求屏幕的 MediaStream 并使用 RecordRTC library 记录它。 Firefox 和 Chrome 都允许用户指定要共享的确切内容,例如整个屏幕、特定 window 或单个选项卡(仅 Chrome)。我注意到此处的选择会显着影响生成的视频文件大小。以下结果来自 30 秒的录音,其中浏览器 window 填满了整个屏幕。


Chrome:

整个屏幕:3.44 MB

Window:0.81 MB

选项卡:0.15 MB


Firefox:

整个屏幕:5.23 MB

Window:3.56 MB


当然,当录制 window 相对于整个屏幕时,分辨率会稍微变小。就像 firefox 录制一样:整个屏幕 = 2560x1440 和 window = 2488x1376,但我认为这不会有太大区别。

我已经尝试查看 Chromium 源代码(因为它是开源的并且基于 Chrome)以找出不同选项之间的区别,但似乎无法弄清楚是什么正在进行。 None 我的 Google 搜索也成功了。

有谁知道造成这些巨大差异的原因是什么?

我在 Ubuntu 20.04,如果有影响的话。

这是因为当您记录 window 或选项卡时,浏览器负责呈现内容。所以它知道什么时候画了新东西,什么时候什么都没画。

您可以在 Chrome 中清楚地看到这一点,他们甚至会在 5 秒后在 tab-capture 的 VideoTrack 上触发一个 mute 事件,其中没有任何动画。

因此,他们知道没有绘制任何新内容,他们不会将任何内容传递给流,而是创建持续时间为 long time.

然而,当捕获桌面时,他们不再负责渲染并且不知道是否发生了变化:他们必须将每一帧作为新帧传递。