top of page
XSplit 主页

XSplit质量、VBV缓冲区与预设设置

Melvin Dichoso
2016年3月2日
讀畢需時 5 分鐘

XSplit使用x264编码器,所以先说明,标题中提到的参数(质量参数除外)与x264 Wiki中的参数含义相同,详见此处。


质量

质量有所不同,所以先来讨论这一点。在x264术语中,质量称为CRF因子,即Constant Rate Factor。编码器接受从CRF=0(无损)到CRF=51(糟糕质量)的任何值。

编码视频流时,通常可以使用不同的码率控制方案。XSplit使用基于质量的码率控制,目标是让编码视频达到指定质量,同时遵守码率上限(vbv-maxrate)。不同质量所需的码率有巨大差异(而且并非线性)。大多数人甚至看不出CRF=18和CRF=0有什么区别,除了CRF=0录制会占用相当大的硬盘空间。

在XSplit术语中,我们使用0到10之间的通用质量设置,其中10最高。质量10对应CRF=25,通常属于很好的质量。质量0则对应CRF=35,在某些情况下可以接受,但效果并不漂亮。

虽然这可以讨论,但XSplit的惯例仍然是使用自己的质量参数,并在内部转换为CRF。我们认为人们理解质量,并习惯于0到10的范围,后者最高。但对于愿意走这条路的人,这些都可以轻松自定义。

你会注意到,本地录制时XSplit只提供质量设置,不会定义特定的vbv-maxrate或vbv-buffer。原因是本地录制通常不需要关注带宽使用。因此,录制会以指定质量为目标创建,同一输入在不同质量下生成的文件大小也会不同,这很合理。

在复杂场景(帧)中会使用更多比特,以确保一致的视觉质量;不那么复杂的场景使用更少比特。x264编码器尝试解读帧中变化的重要性,并根据设置(CRF,也就是质量设置)优化视觉质量。质量的基准FPS是每秒25帧。x264会根据视频帧率调整质量,所以同一质量设置在60 FPS视频流中每帧质量比25 FPS低。理由很简单:当整体目标是在25和60 FPS视频流中保持相同的视觉质量时,25 FPS中的单帧比60 FPS中的单帧更重要。

本地录制也可能需要控制最大带宽使用,所以XSplit界面仍允许设置vbv-maxrate和vbv-buffer。我们稍后会回来讨论。


VBV缓冲区和VBV最大码率

x264编码器使用的两种主要数据码率控制机制是

- 平均码率模式- 平均质量模式

如上所述,XSplit界面只允许使用平均质量模式,因为这通常是更有效的机制。

不过,这两种主要码率控制方案通常都使用另一种补充控制,而且要使用XSplit成功直播,这种控制甚至是必需的,即VBV码率控制。基于质量的编码保证指定质量,却不保证指定的带宽使用量。直播时,既不能超过自己可用的上传带宽,也不能超过观众的下载速度。

有些编码器使用恒定带宽直播选项,但这种码率控制机制(或者缺乏控制)会浪费带宽,而且往往对发布者和观众的连接质量都有更高要求。

XSplit采用基于质量的编码,并设置VBV-maxrate和VBV-buffer。这基本意味着,XSplit中的x264编码器会尝试保持直播流的恒定质量,在不复杂或不重要的场景中使用更少带宽。VBV-maxrate为编码器可使用的带宽设置上限,但上限与VBV-buffer相关。

如果设置VBV-maxrate=2000、VBV-buffer=4000,那么VBV缓冲区(解码缓冲区)会以最高2000 Kbps的速率填充。因此视频码率仍可超过2000 Kbps这个离散值,但在2秒内不会超过4000 Kbit。换句话说,VBV-maxrate并不是视频流中可能出现的最高码率,只是能进入缓冲区的最大码率。

理解这个概念后,你也会理解vbv-buffer提供的灵活性。它基本上允许编码器预先查看一系列帧,然后在不超过vbv-buffer的前提下,选择用更多比特编码某些帧,用更少比特编码其他帧。

现在你需要理解的是,vbv-buffer实际上是解码端缓冲区,所以取决于解码器,在我们的情况下主要是Flash Player。Flash Player的缓冲可以从0秒配置到,嗯,我想任何值都可以。但多数直播服务提供商把缓冲设置固定为1或2秒。因此,当vbv-maxrate设为X千比特每秒(Kbps)时,你通常会看到XSplit直播插件把vbv-buffer自动调整为X或2 * X千比特。希望这一切开始有些道理了!所以,如果你的提供商将Flash Player缓冲设置为10秒左右,你就能大幅增加我的vbv-buffer大小,进而用更低的总体带宽获得同样质量,或用同样带宽获得更高质量。你实际上会给编码器更多自由,让它在需要时提高码率峰值。因此,你可以期待XSplit团队与我们的合作伙伴沟通,看看能否让他们调整Flash Player缓冲,使其与XSplit中的VBV缓冲设置相匹配。

最后再回到本地录制。录制没有默认的最大码率(vbv-maxrate),因此也没有默认vbv-buffer。但如果你想把录制视频放到网站上,让访问者通过互联网使用Flash Player播放,就需要仔细考虑。如果预计最终观众的下载带宽不超过1000 Kbps,并希望视频在约4秒后开始播放,那么除了为本地录制设置的质量外,还应应用适当的vbv约束。

因此,在上面的情况下,我们会使用以下XSplit设置:

VBV Max Rate:1000 kbpsVBV Buffer:4000 kbps

我们大概也应补偿音频,不过在这个例子中,只需从VBV Max Rate减去1 x音频码率,从VBV Buffer减去4 x音频码率,就准备好了。


编码器预设

内置了从“Ultrafast”到“Placebo”的多个预设。XSplit使用名为“XSplit Default”的自定义预设。未来,你可以期待默认值设置为“Veryfast”。

但这到底意味着什么?

H.264规定了一组解码器必须能够支持或解码的压缩功能。根据解码器能力,这些功能分为High Profile、Medium Profile和Base Line Profile等配置组。目前我们只考虑Flash Player支持的High Profile。

使用特定预设时,x264编码器会利用多种高级预设功能,更好地压缩视频比特流。任何比“Superfast”更慢的预设都会产生兼容High Profile的比特流,除非加入其他自定义约束,但暂时不用考虑这个。现在只需知道,预设越慢,视频流压缩越多,在有限带宽下能产生的质量越好。但这一切需要相当大的CPU算力,取决于帧率和分辨率。

默认预设是“XSplit Default”或“Veryfast”,两者基本相同。如果没有其他CPU密集型进程同时运行,而且你想使用“Veryfast”预设以1280 x 720、30 FPS进行广播或编码,那么i5处理器应该够用。如果任何核心的CPU使用率超过70%,你就需要:

a) 使用更低分辨率b) 使用更快预设(例如superfast)c) 购买一台好的Core i7电脑

长话短说,所选预设相当于你要求编码器执行的压缩量。更慢 = 更多压缩 = 更高CPU使用率。

进一步解释上面的内容,让我们回答你现在唯一可能想到的问题 -:):


问题:如果我进行本地录制,将质量设置为8,并且不设置任何VBV约束,那么选择更慢的预设是否会得到更高质量的视频?

答案: 不会,绝对不会。质量完全相同,但预设越快,录制视频的压缩就越少(文件越大)。不过,如果VBV-maxrate约束足够严格,你会看到质量差异,因为更慢的预设更擅长将码率保持在指定VBV-maxrate之下。

留言


bottom of page