Skip to content

关于视频你需要知道的基本概念:码率(Bitrate)、帧率(FPS)、分辨率和清晰度

Posted on:April 22, 2024 at 12:24 PM

前言

想通过一篇文章的科普,让你在使用视频的时候知道如何选择合适的视频参数。

本篇文章会尝试把这些概率都联系起来,对视频相关的概念有整体的认知。

结论先行

用户视角:

开发者视角:

封装格式

就是把视频数据和音频数据打包成一个文件的规范。 一个完整的视频文件,包括音频、视频和基础元信息,我们常见的视频文件如 mp4、mov、flv、avi、rmvb 等视频文件,就是一个容器的封装,里面包含了音频和视频两部分。

封装格式是不会影响视频的画质,封装成什么格式就看在使用的时候解码器是否支持这个封装格式即可。

封装,也叫多路复用(mux)。封装的目的一般为了在一个文件(流)中能同时存储视频(video)、音频(audio)、字幕(subtitle)等内容——这也正是“复用”的含义所在(分时复用)。封装还有另一个作用是在网络环境下确保数据的可靠快速传输。

编码格式

我们知道,其实视频就是一帧一帧的图片。计算一下,一部 25 帧每秒,90 分钟,分辨率为 1024*768,24 位(rgb 每个 8 位)真彩色的视频,没有经过压缩,大小为 :

从上面的计算可以看出,我们储存一部 90 分钟没压缩的电影需要 296GB 的。所以我们需要对视频进行压缩,这种视频压缩技术就是我们所说的编码。

视频编码方式:H.26X(H.261、H.262、…、H.264(目前最常用)、H.265)

音频编码方式:MP3、AAC 等

通过视频压缩算法,减少了视频文件的大小。压缩比越大,解压缩还原后播放的视频越失真,这是因为压缩的同时不可避免的丢失了视频中原来图像的数据信息。

注意编码格式要跟封装格式做区分,两者没有任何关系。

一般我们只需要关注 H.264​ 和 H.265​ 即可,H.264 是使用最广泛,除了 H.265 之外压缩率最高的,也就是说在相同码率下除了 H.265 之外 体积最小的。

而 H.265 相比于 H.264 相同码率下体积还降低了 50%

那是不是就可以无脑使用 H.265 了呢?先说说使用 H.265 有什么问题,我认为最大的两点就是:

  1. 计算复杂性。H.265 的编码和解码过程比之前的标准(如 H.264)更复杂,压缩率更高,解码需要更多的计算资源。这意味着在一些低端设备上可能会面临性能问题。
  2. 兼容性。 尽管 H.265 已经得到广泛支持,但仍然存在一些老旧设备不支持 H.265 的硬件解码,这就会导致播放器只能使用软解,会增加 CPU 的消耗。

硬件解码:顾名思义就是通过硬件进行解码的计算,通常是 GPU。 软件解码:顾名思义就是通过软件计算解码,软件计算主要依靠的是 CPU。CPU 的计算能力相比 GPU 来说弱很多,就会导致 CPU 占用率高,导致设备发热发烫。

所以在设备相对较好的情况下,无脑使用 H.265 是没有问题的,如果对于低端设备使用 H.265 可能会带来性能问题,导致视频播放卡顿,需要用空间来换时间了。

视频分辨率

视频分辨率跟我们平时说的图像分辨率差不多,主要是指单位英寸中所包含的像素点数。 可以用长 x *宽的形式表示比如 1280 ** *720 的分辨率,也可以以像素点总数的形式表示,比如 200 万像素(1920* * 1080)。

常见的分辨率:

另外需要注意分辨率越大在解析到内存之后占用的内存也会更大,这个原理跟图片的分辨率对内存的影响是一致的。对于内存优化,通常降低分辨率是一个有效的方式。

视频帧率

帧率是直接影响流畅度的指标,视频一般 24FPS/25FPS 已经足够,低于 24 将会感到卡顿。

视频码率(视频比特率)

非常非常重要的一个参数。

码率就是数据传输时单位时间(1s)传送的数据位数,一般我们用的单位是 kbps 即千位每秒。

码率与体积的关系:

码率与画质的关系:

联系

帧率相关

码率

分辨率:

清晰度:

总结

没有完美的算法,无非是时间和空间的平衡,二者不可兼得。

作为一个开发者,我们需要在用户的终端性能、网络、成本等各方面权衡,在不同的场景使用不同的参数的视频,可以提升用户的使用体验,降低公司的成本。

在了解各个参数之后,在对视频做优化的时候就会游刃有余:

参考文章: