对于相同的分辨率和帧速率,比特率有何不同?

对于相同的分辨率和帧速率,比特率有何不同?

阅读有关视频质量的文章时,我发现它取决于分辨率、每秒帧数和比特率,这决定了视频的大小。

我的问题是如何计算比特率以及它如何不同。

假设视频的分辨率为 360x240。每帧需要 86400 个像素。帧速率为 30 Hz。因此,视频每秒需要 86400 × 30 = 2592000 个像素。

因此假设 1 个像素是 3 字节(24 位)的数据:我们有每秒 2592000 × 24 位的视频(62208000 位),即 62208 kBits(这听起来不对,也许是我的计算有问题)。

但它有何不同以及它对质量有何影响?

答案1

您计算的是原始、未压缩视频的比特率。除了在研究或其他专业应用中,您通常不会找到这些。即使是广播公司也会使用压缩视频,尽管比特率比典型的 YouTube 视频高得多。

因此,视频质量与视频的压缩方式有很大关系。压缩得越多,每帧占用的比特数就越少。此外,压缩得越多,质量就越差。现在,有些视频比其他视频更容易压缩——本质上,这就是为什么即使它们的分辨率和帧速率相同,它们的比特率也较低。

为了理解为什么会这样,你需要了解视频压缩使用的两个主要原理。它们被称为“空间冗余”和“时间冗余”。

空间冗余

显示自然内容的图像存在空间冗余。这就是原因JPEG效果非常好——它可以压缩图像数据,因为像素块可以编码在一起。例如,这些像素块是 8 × 8 像素。这些被称为“宏块”。

现代视频编解码器也一样:它们基本上使用与 JPEG 类似的算法来逐块压缩帧。因此,您不再按像素存储比特,而是按宏块存储比特,因为您将像素“汇总”为更大的组。通过汇总,算法还会丢弃人眼不可见的信息——这是您可以降低大部分比特率的地方。它的工作原理是量化数据。这将保留更容易感知的频率,并“丢弃”我们看不到的频率。量化因子在大多数编解码器中表示为“QP”,它是质量的主要控制旋钮。

你现在可以继续预测宏块来自之前在同一幅图像中编码的宏块。这称为帧内预测。例如,灰色墙壁的一部分已编码在帧的左上角,因此我们可以在同一帧中再次使用该宏块,例如将其用于紧挨着的宏块。我们只需存储它与前一个宏块的差异并保存数据即可。这样,我们就不必对两个彼此非常相似的宏块进行编码。

为什么相同图像大小的比特率会发生变化?因为有些图像比其他图像更容易编码。空间活动性越高,实际需要编码的就越多。平滑纹理占用的比特数比细节纹理少。帧内预测也是如此:灰色墙壁的帧允许您使用一个宏块来预测所有其他宏块,而流动水的帧可能效果就没那么好了。

时间冗余

之所以存在这种情况,是因为一帧接一帧可能与前一帧非常相似。大多数情况下,只有一点点变化,完全编码是没有意义的。视频编码器所做的只是编码不同之处在两个连续帧之间,就像它们对宏块所做的一样。

以维基百科的文章为例运动补偿,假设这是你的原始框架:

那么与下一帧的区别就如下:

编码器现在只存储实际的差异,而不是逐像素值。这就是为什么每个帧使用的位每次都不相同。这些“差异”帧依赖于完全编码的帧,这就是为什么现代编解码器至少有两种类型的帧:

  • I 帧(又名关键帧)——这些是完全编码的
  • P 帧— 这些只是存储差异

您偶尔需要在视频中插入 I 帧。实际比特率还取决于使用的 I 帧的数量。此外,两个后续帧之间的运动差异越大,编码器需要存储的内容就越多。“无”运动的视频比运动视频更容易编码,并且每帧使用的比特数更少。

答案2

我相信你的数学实际上是正确的,但还有更多内容;压缩是这里缺失的环节。

您计算了未压缩的比特率,并得出了压缩存在的原因。未压缩视频的比特率变得大得不可思议。因此,他们在源端压缩视频,在接收端解压缩,然后比特率就变得可控了。您只需要一个足够快的解压缩器,可以是硬件也可以是软件。

因此,问题变成了可以容忍多少压缩 - 通常情况下,压缩不是无损的,所以会丢失信息,但他们会尝试使其足够智能,以丢失不太明显、不太重要的数据。通常情况下,压缩相当容易,直到出现大量运动,然后就会变得更加复杂。

编辑:忘记添加,但实现压缩方法的部分是编解码器;我注意到您在帖子中使用了它作为标签。

相关内容