OBS.COM.CN官网 OBS中文版官方分流下载欢迎您!
OBS直播推流软件中文站 OBS官网版本分流下载 OBS插件免费下载
收费技术咨询微信:
OBSStudio
OBS教程

OBS-推流编码参数的设置(质量、带宽和计算负荷相关)

作者:OBS中文官网 日期:2021-04-18 人气:12489

OBS是一个免费的开源网络“直播“软件,任何人都可以免费使用。这里对“直播”二字打引号,是因为该软件目前主要用于网络直播领域,但其实还有别的功能,比如视音频的录制、转文件封装等等。

  在进行直播推流时,为了平衡我们电脑配置、网络带宽和视频主观质量三者之间的问题,我们要做的一件非常重要的事情是对相关的参数进行配置。

  下面是一些主要参数的配置方法。

  一.编码器:OBS-studio(24版本)->右下角设置->输出->串流中,将“输出模式”改为“高级”,既可以看到编码器、码率控制、比特率、CRF等等等参数,我依次做一个总结,如果有错误之处,望指正。

  这里选择编不同的编码器时,所调用的编码芯片不同,在24版本中,支持以下几种编码器:

  1.x264:即使用CPU进行h264编码,使用CPU编码俗称“软编码”。利用该编码器时,会占用大量CPU的计算能力,具体占用的CPU使用率与该编码器下的一些参数设置和CPU本身的计算能力有关,如果自身CPU比较弱的情况下,可以考虑不使用该方式。x264虽然会占用CPU的计算资源,但其优点是在相同的h264参数配置下,其编码后的视频质量是最佳的。

  除了X264编码器之外,以下三种都是GPU编码。采用GPU编码时,要注意观察GPU的负载情况,对于win10系统,右键点击电脑任务栏调出“任务管理器”,选择性能选项卡,即可以看到GPU的占用率情况。

  我们一定要保证GPU不要超负荷,否则会出现视频卡顿、不流畅甚至断流的情况。

  2.NVENC H.264:即使用NVENC的GPU芯片进行h.264的编码,使用GPU进行编码俗称“硬件编码”。采用NVENC H.264编码的前提条件是电脑必须要安装有NV的显卡,且处于激活状态。因为对于有的电脑来说,虽然配有NV的独立显卡,但在主板Bios上没有激活该显卡,而是使用的集成显卡,因此在“编码器”中不会有“NVENC H.264”的选项。采用NV显卡编码时,编码的计算负载由NV显卡的GPU承担,从而大大降低了CPU的压力。NV显卡编码的缺陷是在相同的h.264编码参数设置下,其编码后视频的质量比x264要次,特别是在大量运动画面和转场画面的情况下,会更为明显。

  如果是win7系统,可以在英伟达显卡安装目录C:\Program Files\NVIDIA Corporation\NVSMI里找到文件nvidia-smi.exe,在windows命令行里面执行即可,或者在英伟达的显卡控制面板里面查看。

  3.QuickSync H.264:即采用英特尔的集成显卡进行H.264的“硬”编码。英特尔显卡编码出来的质量介于CPU编码和NVENC编码之间。

  4.H264 Encoder(AMD Advanced Media Framework):采用AMD的显卡进行编码。在其余条件相同的情况下,根据第三方测试结果,在这4种编码中,AMD显卡编码后的视频质量是最低的。

  采用不同的编码器时,我们能调整的参数是不尽相同的,我们接下来的介绍都以x264编码器来进行介绍。

  二.码率控制:码率控制参数是采用H264编码时采用的控制码率的方法。采用不同码率控制方法,对处理器的运算负荷差别不大。

  1.VBR(Variable Bit Rate):这是我们最为常见也是最为常用的码率控制方法,直接翻译就是动态码率,该算法的核心是目标是根据图像内容的复杂程度来分配不同的码率以确保画面的质量。在图像十分复杂,画面运动剧烈的情况下,其码率就会有大幅的提高,而在画面简单以及运动小或者几乎没有运动的情况下,码率会很低。当然这种码率的高度也不是天马行空的,而是围绕我们设定的目标码率(即下面说到的参数三)进行波动,只是该模式波动的幅度会比价到,甚至会达到50%+。比如对于目标码率为5Mbps时,对于会议画面,实际码率可能会低至几十Kb,而对于赛车比赛的画面,背景变化大、转场多的时候,码率可能会飙升至7Mbps+。由于VBR模式下,码率会围绕目标码率有较大的波动,因此在实际工作中采用该码率时,我们要申请足够高的运营商带宽,以确保峰值编码码率<运营商提供 的实际可用带宽,这个可用带宽以我们实际测试为准。

  2.CBR(Constrained VariableBit Rate):即固定码率模式,这种码率控制模式我们也经常用到。这种模式是码率优先,质量第二。当然这里的固定码率也不是完全固定,只是相对于VBR来说,在目标码率附近的波动范围很小,一般不会超过15%。在实际工作中我们会发现,当我们设定的目标码率为5Mbps时,即使我们播放一帧静止画面,实际码率也会接近5Mbps。

  为什么会有CBR这种方式呢?我想至少有一种情形是比较适合的,实际带宽比较低但很稳定的时候,比如我们申请的是10M运营商VPN专线,采用CBR又不能很好的预测实际编码峰值是多少时,就可以选择CBR模式,目标码率可以设置为7~8M。再比如另一种情形:我们申请了50M的带宽,因特殊情况其中40M必须保证另做它用,那么我们的直播流就必须要求所占带宽在10M之内,这种情况也可以使用码率相对比较恒定的CBR模式。

  在相同目标码率的情况下,VBR和CBR哪种编码出来的质量更好呢?当然是VBR,这个也很容易理解,假设画面有剧烈的运动,场景变化快,CBR可能会因为目标码率的限制,不得不牺牲质量来换取码率的相对稳定,而VBR会增大码率以确保画面质量。

  3.CRF:即固定质量模式,该模式下码率由CRF质量值来进行控制,如果没有目标码率,可以选择这种方式,它也是一种变码率模式,码率起伏会比较大,具体码率值也会因为其余参数设置的不同而呈现很大的差别,因此对编码知识储备不足的同学来说,要避免采用这种方式,因为其实际码率不好预估。CRF取值范围在1~51之间,H264编码的默认CRF值为23,取值越低,编码质量越好,同时对CPU或者GPU的压力就越大。

  4.ABR(Average Bit Rate):即平均码率模式,该模式也是以质量为目标,和VBR相比,更加温和一点,实际码率波动不会那么大,但可能就会牺牲一点点的质量为代价,总体上可以看成是CBR和VBR权衡的结果。

  三.码率

  码率是单位时间内编码器产生的数据量。由于H264编码的压缩特性,编码器产生的码率并不是完全等于我们设定的码率。如前所述,码率控制的方式不同,实际码率会有很大的不同,特别是在vbr模式下,如果是静止画面,即使我们设定的目标码率为5M,实际码率可能只有几十K。而对于剧烈运动的场景,码率可能会升至7M+。

  在其余参数相同的情况下,我们设定的目标码率对计算资源的影响不大,比如设定的目标码率为8M和10M相比,CPU的使用率可能基本感觉不出什么变化,当然这也和我们CPU本身的计算能力有关。归结起来就是,目标码率越高,对计算资源要求越高,但该影响不明显。

  码率对视频质量的影响是显而易见的,在其余条件相同的情况下,码率越高,画质质量会越好,这是由于更高的码率携带了更加丰富的视频信息,越能呈现更丰富的细节。

  在实际项目中,我们最要关心的是码率对带宽的影响。OBS中设置的目标码率是编码器编码后的数据率,实际上由于传输中还牵涉到源端和目标端的信息交互、信号重传、协议开销等等,所以实际占用的带宽会比编码器产生的数据率高。推荐申请的运营商接入带宽不能低于目标码率的2倍。如果当地的网络资源不稳定,波动较大的话,那么申请的运营商带宽还应该提高。

  一旦实际码率高于带宽,就会出现丢帧现象。编码器生成的码字会存放在缓存(cache)中,再通过网络传输到目标端,缓存是编码器申请的一块内存空间。

image.png


网络传输的速度小于编码器产生码字的速度时,缓存会被逐渐填充满而导致溢出,产生丢帧现象。

  四.关键帧间隔(单位:秒)

  在H264编码中,图像会进行分组,每一组叫一个GOP序列,在一个GOP序列中的第一帧是关键帧,关键帧的特点是只要接收端接收到了该帧的数据,就可以还原这一帧的完整画面,该序列中的其余帧是参考关键帧进行了数据压缩,这些帧的数据本身是不完整的,需要借助关键帧的信息才能完整还原这些帧的图像信息。

  关键帧间隔越大,也就是GOP越长,数据压缩越大,实际码率就会越低。但GOP太大会导致画质变差,特别是在运动画面中最为明显。所以我们不建议GOP设置太长,以确保画面质量,默认情况下可以设置为0,即系统自动设定。如果自己设置,可以考虑在半秒到2秒之间。

  五.CPU使用预设

  这是指在使用X264编码时,对CPU运行能力的要求。

image.png


  从下拉框中我们可以看出一共分成了10级,即从最下面的placebo到最上面的ultrafast。级别越靠上,CPU处理的数据量越小,编码时对CPU的处理能力要求越低,但画质会越来越差。该参数对CPU的影响非常大,即使是从faster到fast一个级别的变化,CPU的运行量可能就会翻倍。一般可以选择在fast~veryfast级别之间,平衡画质与CPU的负载。


付款方式
×