视频的比特率、关键帧、FPS啥意思?
作者:
| 更新日期:最近在尝试录视频,调参时遇到不少疑问,分享给大家。
本文首发于公众号:天空的代码世界,微信号:tiankonguse
零、背景
元旦那天,我在《观看得到与B站的跨年晚会》文章提到,B站的年会很精彩。
从看了B站元旦晚会之后,我就在琢磨着,通过录一下视频来分享数据结构算法与计算机技术。
后来也录了比赛视频,以及采集CPU的相关视频。
但是,录得视频有时候不清晰,有时候声音太小,有时候杂音太多。
我研究了一番,发现是参数配置的问题,涉及视频比特率、关键帧间隔、音频比特率、分辨率、FPS等。
如果不了解这些参数的含义,想调好参数自然很难。
所以我查阅了大量的资料,了解了一下这些参数都是什么含义,分享给大家。
一、帧 Frame
人眼很奇怪,比如看一个快速画圆圈的燃烧的火把,会看到一个火组成的圆圈。
明明只有一个火把,我们却看到了一圈火把,这种现象称为视觉暂留。
科学研究发现,人眼看到的图像会在眼中保留1/24秒,当一秒看到的图像超过24张时,就可以看到动画的效果了。
这种科学现象也是我们能够制作视频的基础,播放器每秒播放的图像超过24张,看到的画面就是连续的了。
视频中的每一张图片我们就称为一帧。
二、帧率 FPS
每张图片是一帧,图片的个数称为帧数,每秒图片的个数称为帧率,俗称 FPS。
公式:帧率=帧数/时间
帧率对于视频很重要,为了视频连贯,一般最低是 30。
帧率越大,视频看起来越流畅,但是超过一个临界点后,人眼就区分不出差异了。
游戏玩家应该对这个很清楚,一般有一个FPS与体验感的关系。
30FPS 左右,勉强能玩
60FPS 左右,普通
90FPS 左右,优良
120FPS 以上,非常良好
这样看来,我们录视频的视频,FPS 可以设置为 60 或 90 了。
为什么要设置为整数呢?而且是 30 的倍数, 后面会介绍原因。
三、关键帧
之前提到,动画是连续的图片组成,而且每秒有几十上百张,假设是 60 张。
那一个 60 秒的视频,就需要 3600 张图片组成,这样视频就会非常大了。
所以需要想办法减少视频的大小。
程序员们很聪明,很快发现短时间内图片其实是相似的,完全可以只储存一张图片。
周围的图片只储存差异值,播放的时候动态计算出图片即可。
这个在计算机中称为增量储存。
那是不是我们可以只保留一张图片,后面的都通过差异来计算呢?
可以是可以,但是这样播放体验就会特别差。
比如我们拖动进度条了,如果只有一张原始图片,那我们就需要把前面的图像全部下载下来才能计算出当前的图片。
所以实际应用的时候,对这些图片进行了分组。
若干帧数组成一组,一个组内保留一张图片。
每一组称为一个 GOP, GOP 里保留的完整图片称为关键帧。
了解了关键帧,那关键帧间隔就容易理解了。
大概含义就是多少帧遇到一张关键帧,也等价于 GOP 的大小。
一般,为了防止卡顿,GOP 的间隔建议为2秒,最长不超过4秒。
上面提到过 FPS,即每秒的帧数,我配置的是 60。
两个通过相乘,可以得到 GOP大小,建议范围是 120 ~ 240。
当然,如果把 FPS 设置为 30 的话,GOP 就应该是 60 ~ 120。
如果把 FPS 设置为 90 的话,GOP 就应该是 180 ~ 360。
现在我们需要配置 GOP 和 FPS, 还要把这个时间控制在 2~4 秒内,为了容易计算,我们一般都使用 30 的倍数。
这样 GOP 的间隔 就比较精确了。
目前我的配置是 FPS 为 60, 2秒一个分组,即 GOP 大小为 120。
四、比特率
视频比特率是每秒传输的比特数。
啥是比特?大家可以理解为视频的数据即可。
还有一个概念大家应该都知道:分辨率。
分辨率就是一张图片的大小,常见的有640 x 480
、1280 x 720
、1920 x 1080
等。
分辨率越大,一张图像需要的内存也越大。
而结合 GOP 帧数 与 FPS 每秒帧数,我们就能计算出视频平均每秒有多少比特了。
但是呢,通过分辨率、FPS、GOP三个指标来评估一个视频不好标示。
所以大家都是通过每秒的比特来评估一个视频怎么样的,俗称码率。
细心的朋友可能已经在心里默默计算码率了。
压缩前,一算,哇,好大。
一秒的视频竟然需要几百兆比特,所以这里的码率控制至关重要了。
最简单的方法是调整 FPS,比如 60 调成 30, 码率一下减半。
而比较高级的方法是调整压缩算法,比如数据抽样储存。
这也是为什么看视频的视频,明明是1080P,也很流畅,但是画面就是不清晰。
那都是压缩算法在控制。
五、最后
好了,到现在为止比特率、关键帧、FPS我们就都知道了。
FPS:每秒帧数用来控制视频的流畅程度,30和60都行。
GOP:关键帧间隔,越小图片质量越高,一般在2~4秒。
分辨率:当然选择 1080P的了。
码率:FPS选择 30 的话,建议在 3000-6000之间,FPS是 60的话,建议在4500-9000之间。
-EOF-
本文公众号:天空的代码世界
个人微信号:tiankonguse
公众号ID:tiankonguse-code
本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。