vin*_*hew 17 video codec video-conversion
阅读有关视频质量的文章时,我发现它取决于分辨率、每秒帧数和比特率,后者决定了视频的大小。
我的问题是比特率是如何计算的以及它如何不同。
假设视频的分辨率为 360x240。每帧需要 86400 像素。帧速率为 30 Hz。所以视频每秒需要 86400 × 30 = 2592000 像素。
因此,假设 1 像素是 3 字节(24 位)的数据:我们有 2592000 × 24 位/秒的视频(62208000 位),即 62208 kBits(这听起来不正确,可能是我计算中的一些问题)。
但它如何不同以及它如何在质量上产生差异?
slh*_*hck 22
您计算的是原始未压缩视频的比特率。除了在研究或其他专业应用程序中,您通常不会找到这些。甚至广播公司也使用压缩视频,尽管比特率比典型的 YouTube 视频高得多。
因此,视频质量与视频的压缩方式有很大关系。压缩得越多,每帧占用的位数就越少。此外,压缩得越多,质量就越差。现在,有些视频比其他视频更容易压缩——从本质上讲,这就是为什么即使它们具有相同的分辨率和帧速率,它们的比特率也较低。
为了理解为什么会这样,您需要了解视频压缩使用的两个主要原则。这些被称为“空间”和“时间冗余”。
显示自然内容的图像中存在空间冗余。这就是JPEG工作如此出色的原因——它压缩图像数据,因为像素块可以一起编码。例如,这些是 8 × 8 像素。这些被称为“宏块”。
现代视频编解码器也这样做:它们基本上使用与 JPEG 类似的算法来逐块压缩帧。因此,您不再存储每个像素的位,而是存储每个宏块的位,因为您将像素“汇总”为更大的组。通过总结它们,该算法还将丢弃人眼不可见的信息——这是您可以降低大部分比特率的地方。它通过量化数据来工作。这将保留更易感知的频率并“丢弃”我们看不到的频率。量化因子在大多数编解码器中表示为“QP”,它是质量的主要控制旋钮。
您现在甚至可以从之前在同一图像中编码的宏块中预测宏块。这称为帧内预测。例如,灰色墙的一部分已经在帧的左上角编码,因此我们可以再次在同一帧中使用该宏块,例如用于紧邻它的宏块。我们将只存储它与前一个的差异并保存数据。这样,我们就不必对彼此非常相似的两个宏块进行编码。
为什么相同图像大小的比特率会发生变化?嗯,有些图像比其他图像更容易编码。空间活动度越高,您实际需要编码的内容就越多。平滑纹理比细节纹理占用更少的位。帧内预测也是如此:一帧灰色墙将允许您使用一个宏块来预测所有其他宏块,而一帧流水可能效果不佳。
之所以存在,是因为跟在另一帧之后的一帧可能与其前一帧非常相似。大多数情况下,只有一点点变化,完全编码是没有意义的。视频编码器所做的只是对两个后续帧之间的差异进行编码,就像它们对宏块所做的一样。
以维基百科关于运动补偿的文章为例,假设这是您的原始帧:

那么到下一帧的区别就是这样:

编码器现在只存储实际差异,而不是逐像素值。这就是为什么用于每个帧的位每次都不相同的原因。这些“差异”帧取决于完全编码的帧,这就是现代编解码器至少有两种类型的帧的原因:
您有时需要在视频中插入 I 帧。实际比特率还取决于所使用的 I 帧数。此外,两个后续帧之间的运动差异越大,编码器必须存储的内容就越多。“没有”移动的视频比体育视频更容易编码,并且每帧使用更少的比特。
我相信你的数学实际上是正确的,但还有一点点;压缩是这里缺失的环节。
您计算了未压缩的比特率,并提出了压缩存在的原因。对于未压缩的视频,比特率变得不可能大。因此,他们在源端压缩视频,在接收端解压缩,然后比特率变得可控。您只需要一个足够快的解压器,它可以是硬件或软件。
因此,问题变成了可以容忍多少压缩 - 通常它不是无损的,因此您正在丢失信息,但他们试图使其足够智能以丢失不太重要的数据,这些数据不会那么明显。通常很容易,直到有很多运动,然后变得更加复杂。
编辑:忘记补充了,但是实现压缩方法的部分是编解码器;我注意到您在帖子中将此用作标签。
| 归档时间: |
|
| 查看次数: |
27390 次 |
| 最近记录: |