AVC/H264编码教程

AVC/H264编码教程

原作:DeathTheSheep
翻译:Tenlix

编码次数(应当选择何种编码模式)

如果你想要得到一个确定的文件体积,我推荐采用二次编码的模式。例如,你希望你生成的文件体积为精确的170.00MB,那么你就需要采用二次或三次编码。严格地说,一次编码针对的是那些严重缺乏时间或者并不期望得到高质量输出的人。二次编码能够满足大部分人的需要,它可以生成高质量的文件和确切的文件体积。然而,单次编码模式有时候会被用于恒定质量的输出。如果你想要编码得到的是一个统一的、恒定质量的视频而并不在意文件的体积,那么可以参见下面的“恒定量化和恒定质量模式”部分。

恒定量化和恒定编码模式

如果你并不需要你的视频得到一个固定的、明确的体积,或者想让编码器来决定分配多大的文件体积来获得最佳的质量,那么可以考虑一下通过“单次编码 - 量化(Single Pass - Quantizer)”或“恒定质量(Constant Quality)”模式来进行固定质量的编码。这两种模式的不同之处在于“恒定质量”模式采用了更为先进的比率控制算法,能够在复杂度较高而人眼不太注重细节的场景下降低比特率。这就意味着即使质量针对人眼的视觉效果进行了动态分配,它看起来也仍然是恒定的。很多人可能会因为恒定质量模式的这种设计而认为该模式要更胜一筹,但是如果你编码的是比特率很低的动画视频,量化也许是个更好的选择。

  • 确定你在编码选择菜单(A.)中选择了“单次编码 - 量化”或者“恒定质量”模式。
  • 记住更高的量化值或“质量”模式(B.)将会使视频的实际质量更低,而文件体积会更小。“质量”和量化值相近,但是被乘以了10。
  • 除非你是为了存档(收藏)或再现(原来的)品质,否则请不要使用15(或150)以下的量化值。
  • 同样地,也不要使该值大于40(或400):即使最终的文件体积会小到难以置信,这种编码的质量也会使人难以接受,除非你编码的视频具有极其锐利的画质和反差极大的边缘表现。
  • 对大多数热衷于高质量视频的人来说,比较好的估计值是在20(或200)(最高质量)到30(或300)(相对较低的质量)的范围内,根据个人的偏好和硬盘为编码文件所预备的空间来进行具体选择。
  • 对于卡通动画之类几乎没有什么复杂纹理的视频可以考虑使用比较高一些的量化值。
  • 对于现实的题材,特别是那种具有很多晦暗的场景和重要而精细的纹路的视频,应当考虑将量化值降低一个较大的幅度。
  • 继续在其他的选项卡中设定余下的参数。
  • 在恒定质量模式中,“量化压缩(Quantizer compression)”用以控制在复杂的和高运动量的场景中的质量波动,可以参考下面的标题“高速度,高质量”中的描述。
  • 在其他的选项卡中进行其余的设定。
  • 在编码类型菜单(A.)中选择“多次编码 - 第一次编码(Multipass – First Pass)”或者“多次编码 - 第一次编码(快速)(Multipass – First Pass (Fast))”。由于人们热衷于使用三次编码来获得最理想的质量,所以可以考虑使用“快速”的第一次编码模式。对于二次编码,我建议使用标准的第一次编码模式。虽然在第一次编码中,使用快速模式来替代标准模式在大部分的标准中并不会造成任何大的损失,但我还是推荐在二次编码中使用标准模式,以保证对大多数视频及编码的情况取得最佳的质量。
  • 以“千比特/秒(kbps)”为单位的“目标比特率(Target Bitrate)”(B.)是分配给视频的数据码率。这个码率越高,可视信息被压缩的就越少,从而可以获得更好的质量、更清晰的图像、更少的人为编码因素以及更多的细节保留。可以考虑使用比特率计算器来计算决定视频所采用的比特率以达到所需的体积大小(你可以通过在Doom9的论坛狩猎来找到这些,但请不要在那里误杀任何“sheep“)。我建议对高质量的视频使用500到900的比特率,但正如我所说的那样,这完全取决于你希望得到的文件大小。对一部电影来说,根据视频的长度和复杂性的不同,合理的文件体积限制是500、700或1400MB(大量的细节和高度的运动是导致高复杂度的主要原因)。
  • 比特率变量(Bitrate Variance):对指定的比特率所允许的波动范围(用百分比表示)。给编解码器一个围绕目标比特率的波动余地,以备在某些情况下应付额外数据的需要。基本上需要比较接近你所选择的比特率而保持一个较低的数值,从1%到4%。
  • “量化压缩(Quantizer compression)”控制在复杂的和运动量较大的场景中的质量波动。参见下面的标题“高速度,高质量”中的描述。
  • 继续在其他的选项卡中设定余下的参数。
  • 在进行了满意的设定和第一次编码之后,重新输入和你刚才相同的编解码器参数设定并在编码类型菜单中选择“多次编码 - 第N次编码(Multipass – Nth Pass)”,保持其他所有的选项和它们在第一次编码中相同的设定。如果你希望进行三次编码,再重复一次这个步骤。

编码:高速度,高质量

这一部分介绍达到编码质量和编码速度的最佳组合的必要步骤。以下是在将编码速度提升到最高的情况下,制作最高质量的AVC编码的推荐设置。

  • “关键帧增益(%)(Keyframe boost (%))”(A.)控制关键帧(I帧、节点帧、转场帧(I-frames, intra frames, the “scene-changer” frames))超出其他P帧而被增益的质量多少。增益会给这些关键帧一些外加的质量,因此从这些帧中预算出的帧也会具有较高的质量,即获得更好的视觉效果。另外,关键帧经常会给一些静止的场景提供背景基础,在这些场景中,很多静止的元素会在画面上持续停留一段时间(特别是在一些慢节奏的动画中),这样,提升这些关键帧就显得非常重要。保持这个数值在50到0之间(数值是0的话会获得一个更一致的质量,所有的帧都被同样地对待处理)以便达到一个可以被普遍接受的一致结果。对全局来说,40是一个推荐值;然而,在个别情况下,进行少许的增减可能会得到更好的效果(在低比特率/低质量的动画编码中增加该值,在现实题材的视频或明亮的、背景经常变化或移动的连续快速运动的视频中减少该值)。然而,在大多数的普遍情况下,只要你的片源不是太过特别——例如使用了大量的渐变场景转换或者过于发灰或者发亮,抑或是发暗(在这种情况下你可能会想要调整它)——最好是不用过多地担心这个选项。
  • “B帧缩减(%)(B-frames reduction (%))”(B.或者在比特率选项卡)控制B帧相对于其他的P帧所减少的量化值(质量)。对人类的视觉系统来说,这种在B帧的比特率上的减少很难被注意到,因为B帧是不显著地用于其他的P帧之间来更有效地重构视频的运动。将这个值设定地低一些可以从本质上增加压缩率,但是你就可能会遭致视频的运动出现过多的人工计算因素和不协调地细节再现效果的惩罚。对高比特率和低量化值的现实题材的视频,你可能想要将该值下降到略微低于30的推荐值,也许是25或者20,以此来保证一个更一致的细节质量、运动效果和视频整体。对于动画的内容(卡通、动画等),你可以将这个值设定到50,对某些动画的题材甚至可以到60,这是由动画在运动的效果和细节变换的精确性上先天的局限性所决定的。
  • 量化压缩(%)(Quantizer compression(%))”(C.),也被理解为“比特率变动(Bitrate Variability)”,控制x264在你所指定的比特率所确定的量化值(质量)的范围内的波动幅度。这个选项设定得越低,量化(质量)的变化就会更趋于飘忽和不稳定。例如说,将该值设定为0会允许x264在每一帧中剧烈地改变它的质量:缺点是一些“简单”的帧(低细节、低运动量)会在你所选择的比特率下显示出惊人的效果,而其他“复杂”的帧(高细节、高运动量)显示效果就会相当糟糕,因为x264可能会剧烈地降低它的质量来维持所需的比特率,以获得一个比较稳定的、恒定的比特率。然而,这个设定越高,质量就会趋于相等,从而获得一个具有更加稳定的质量的视频。例如,将该值设定为100会强迫x264对所有的帧使用相同的质量(无波动),因此从理论上讲,它可能给某一帧分配10kbps而另一帧是1000来保持两者之间相同的质量(纯VBR);所以从全局上看,所有的帧都会被一致地量化,按照质量波动的限制来处理同样的质量,即使比特率可能会剧烈地波动。
  • 从这个角度来考虑:这个选项的功能正如其名称所说。你将这个“比特率变动”设定得越小,从一个场景到下一个场景之间的比特率的变动就越少,但是其质量会显得更为恒定。
  • 这个选项的设定和个人的偏好有关,如果你不是特别明确地想要进行一个CBR的编码(对数据流之类,在这种情况下你可以设定为0)或者是等质量下的VBR编码(在这种情况下你可以设定为100),我强烈建议你保持默认值60不变以获得最佳的质量。
  • 当然,比特率变动的控制只是在一个比特率可以被控制的模式中可用,例如多次编码或者“单次编码 – 比特率”模式(这里我们将不讨论这个模式),对于恒定量化的模式是不可用的,因为它在质量上已经恒定了。
  • D.,E.和F.的焦点集中在所谓的量化限制上,同样是只能用在比特率可控的模式中。对于大多数的编码来说,你无需接触到其中的任何一个。“最小QP(Min QP)”(D.)设定你的视频在任意一点所能达到的最小量化值(最高质量)。如果你不是打算要在一个低分辨率的视频上实现超高比特率的编码,我的建议值是从10到15。类似地,设定你的视频所能达到的最高量化值(最低质量)。这个设定甚至会更加困难,所以我推荐保持原来的数值而不必更改(默认值51),让x264去决定每个场景的量化。51的最大值看起来虽然有些过度,但是帧的相对复杂度在可控比特率的量化过程中已经被纳入了考虑范围,而x264知道在这种条件下采取最好的处理方式。“最大QP间距(Max QP Step)”控制x264在两个量化(质量)等级之间的变换速率。将这个值设定地过低会强迫编解码器缓慢地变换质量等级,对那些可能突然地需要一个较低的量化值以维持相似的视觉效果的特定场景可能会造成一个毁灭性地打击,而将这个值设定得过高可能会导致质量上的显著跳变。
  • “场景切换阈值(Scene Cut Threshold)”(G.)在x264决定一次场景转换之前,确定一帧所需要变化的程度(因此也会引入一个关键帧)。40是默认的推荐值,但是在每个视频或每次编码时稍作改变会对精确检测场景变换大有裨益。对于昏暗、夜晚、洞穴、水下等等视频,你可以减少这个值以使x264更精确地确定场景的变换。更一般的原则是,具有更精细的场景变换的视频需要一个更高的场景切换阈值(例如45到50),而对那些明亮的、高对比度且具有显著的场景变换的视频,事实上则有理由尝试设定一个较低的阈值(例如35)。同样,需要认识到更短的关键帧间距最好工作在较低等级的关键帧增益下。
  • “最小IDR帧间距(Min IDR-frame interval)”(H.)设定在x264应用一个关键帧之前所需经过的最小帧数。通常来说,你所编码的视频的帧率即可用于该参数,以通过限制在一秒之内两帧之间的帧数插入来有效地控制x264的帧数插入能力。如果这个值设定得过高,在x264没有确定一个场景变换和实现必要的关键帧之前会浪费太多的时间,同样也会导致点击进度滑块的滞后。而设定得过低将会导致比特率的浪费以及产生闪烁现象:在过短的时间内经过了过多的帧数,对人眼来说便无法识别分布在它们之间的附加细节。正如之前所说,需要认识到更短的关键帧间距最好工作在较低等级的关键帧增益下。
  • “最大IDR帧间距(Max IDR-frame interval)”(I.) 设定在x264应用一个关键帧之前所需经过的最大帧数。通常地,将这个值设定为你所编码的视频的帧率乘以10,即如果在10秒的时间内没有确定场景变换,将会强制插入一个关键帧。将该值设定得过低将会导致关键帧的过饱和并可能产生闪烁现象,以及全面的比特率浪费,降低全局质量。将这个值设定得过高则会导致进度条的问题,而且在两个关键帧之间的时间段内,任何人为的、编码的瑕疵都会在屏幕上存在得更久。然而,如果你不介意进度滑块的拖动问题,尤其是你将场景切换阈值设定得足够低以诱导产生有益的关键帧流入时,我相信将这个值设定到1000甚至是更高都是安全的。
  • VBV设定(未显示)和数据率峰值以及变化的比特率有关。这些值是特定针对硬件解码应用和AVC等级的,因此,如果你不是确切地知道在每一栏内应该填些什么,就不要改变原有的默认值(0,0,90)。

 

下一个选项卡:体积与帧(MBs&Frames)

  • 区块的搜索和确定被“区块(Partitions)”标题之下在框格J中的选项所控制。该选项通过增加精度来提升编解码器的质量和压缩效率,获得更高的质量输出。作为普遍的规则,编解码器在可视信息上进行的搜索类型越多,它就能够更精确、更有效率地预算和编码,所以我推荐勾选它们全部。然而,有一个特殊的情况需要了解,这将在下一条中提到。
  • “8×8变换(8x8 Transform)”特性是一个非常强大的压缩技术,它作用于更大的可视信息块,并且可以开启使用一些其他高质量的区块选项,例如“8×8节点内搜寻(8x8 Intra search)”(L),它在不使用8×8变换时是不可用的。这两个选项都能够有效地提升质量,但8×8变换的使用会使得你的视频成为“High Profile AVC”,破坏编码视频“Main Profile AVC”的兼容性。如果没有这项兼容,你的视频可能无法在某些不支持“High Profile AVC”的解码器上播放。目前,大多数主流或高端的桌面解码器都支持high profit,所以采用这个特性(的视频)在你的台式机上播放是安全的。参照下面的“兼容性”部分以获得更多关于设备兼容性的信息。
  • x264在一行中可以使用的最大B帧数量由选项M所控制。B帧是在两个P帧(由I帧或关键帧预算出来的标准帧)之间的高压缩的帧,作为一种高效率的预算模式。它们会非常有效地提升压缩率而带来的视觉影响却极其微小,即使它们相对于其他的帧来说通常会被分配一个较高的量化值(可参考上面的B选项)。只要选项P(“Adaptive”复选框)被选中,我建议你将这个限制提高到3或更高,那样的话x264就可以在保持最佳质量的情况下自主地决定所采用的最佳B帧数量。
  • B帧“偏差(Bias)”(N)用于改变x264对B帧的使用。这个数值越高,x264就会越频繁地插入B帧。例如将这个数值设定为100会强制x264使用由框格M所指定的最大数量的B帧;然而,这个结果可以由简单地去掉勾选“Adaptive”(P)来得到。将这个值设定为-100则意味着几乎不使用任何B帧——实际上,对大多数情况来说就是一帧都不使用。对大多数视频来说,理想的B帧使用量在选择偏差值为0的时候往往是最好的,我也推荐保持这一数值。
  • X264编解码器可以通过“使用B帧作为参考帧(Use [B-frames] as references)”(O)来使用B-frame pyramid特性。对其他连续的B帧来使用B帧作为参考帧可以提高少许的质量,因为这些B帧可以从另一个B帧预算出来而不是被限制在使用它附近的P帧进行预算。B-pyramid在搭配使用最大3帧连续B帧的设定(M)时是最有效的。我推荐开启这个选项,因为它可以提高一些质量而几乎不会降低速度。
  • “加权B帧预算(Weighted biprediction)”(Q)被选择时可以允许B帧在预算时相对P帧或另一个帧获得更大的权重。其结果是获得更加准确和有效的B帧,从而提升质量。我强烈推荐勾选该项。
  • “双向运动帧对照(Bidirectional ME)”(R)是一个新的特性,允许x264参照所要预算的B帧之前和之后的运动帧预算出一些B帧,以提升质量。勾选使用。
  • B帧指导模式(Direct B-frame mode)(S)可以使B帧使用“预算运动向量(predicted motion vectors)”来代替实际上的每一帧的运动编码,以有效地节省空间和提升压缩率。我建议将其设定为“Auto”,尤其是在还未明确运动的不一致的存在的二次编码的情况下。如果是在恒定量化编码的模式中,而Auto出现了问题,那么我建议对动画和现实题材视频的所有比特范围均使用Spatial,但是由于极低比特率或者极高量化值的现实题材所具有的运动重构的流动性,需要对其使用Temporal。

下一个选项卡:其他(More...)

  • “分块检测(Partition Decision)”(A),也可以理解为“Subpixel Refinement Quality”,是一个控制x264关于运动估算的范围的重要特性。选择菜单包含了一个具有7个选项的选单,依次从最低的质量“1(Fastest)”到最高的质量“6b(RDO on B-frames)”。要记住使用质量较高的选项会导致x264在运算确定方面“思考”得更多,从而降低更多的速度。由于这是在x264的质量(和速度)上起决定因素的选项,所以请将其确定在一个合适的范围内。我建议将该值设定为不低于‘5’。‘5’是一个可以允许使用“色度动态预测(Chroma ME)”(参见下面F的说明)的速度很快的选项。然而看起来比较可怕的“6(RDO)”对编码的质量则大有裨益,因为它采用了比率失真优化(rate distortion optimization)(RDO),这是一个以花费更多编码时间为代价来大幅提升分块检测质量(以及由此带来的压缩品质的提升)的特性。但是在我看来,使用比率失真优化(即‘6’)所带来的大幅质量提升并不足以弥补其在编码阶段所大幅降低的速度,因此,除非你的CPU非常之快,我才会推荐采用6。‘7’被称作“Insane(精神错乱的)”可谓名副其实,因为(和6相比)它几乎没有提升多少质量而在速度方面的下降却是一点儿也不含糊。
  • 'RDO for B-frames'对B帧也使用了比率失真优化,尽管使得编码速度略有下降,但是给B帧带来了较大的质量提升。我推荐选择对B帧使用比率失真优化的参数。
  • 运动估算“方法(Method)”选项(B)可以让用户选择x264如何检索画面的运动。这个方法越好,x264找到并且准确地记录运动的可能性就越高,从而提升压缩质量和效率。我建议对较慢的机器和缺乏时间的人群使用“正六边形检索(Hexagonal search)”(水平、垂直和对角检索),而此外则是使用“可变半径六边形检索(Uneven Multi-Hexagon)”(通过复数的六边形二进制组进行检索)比较有优势,由于其更加精确和具有扩展性的算法,将能够带来更佳的质量,编码时间也会随之提升。我不推荐使用“全面检索(Exhaustive Search)”(强制一个像素一个像素地进行检索);它并不会显著地优于“ Uneven Multi-Hexagon”,而且会剧烈地降低速度,(一旦选择了该选项,)如果你的编码能够在一周之内完成,算你走运。它看起来仅仅是为了调试的目的来使用(编写编解码器的程序)而并非实际编码。
  • 注意在使用“可变半径六边形检索(Uneven Multi-Hexagon)”或“全面检索(Exhaustive Search)”(请勿使用)时,用户可以在框格(C)中指定搜索“半径(Range)”。将其保持在16:这是优化算法的取值,通常会带来最佳的速度和质量。但是,如果你有一个高分辨率的视频而其帧率却很低(小于15),可以考虑将该值稍微提高一点,可以是24或32(最大值)。同理,如果你有一个低分辨率的视频而其帧率却非常之高(大于60),你可以考虑降低该值至12或8以节约时间。
  • 你可以通过“最大参考帧数(Max Ref. Frames)”选项(D)来设定x264可以使用的参考帧数。AVC可以通过参考它之前编码的相似帧来有效地编码出新的帧。这个选项用于设置可以被参考的最大帧数。这个值设定得越高,编码质量会越好,而编码速度则会降低。对于现实题材,在大多数保持较高编码速度的情况下,3到5便足够了。对于动画的题材,或者带有冗余的重复运动的题材,更多的参考帧可以带来质量的显著提高,因此在这里我建议无论何时都在勾选“混合参考帧(Mixed Refs)”(G)的前提下采用5到10的设定值,混合参考帧可以使得x264拥有更大的自由来制定参考帧的子帧级别。
  • “快速P帧跳过(Fast Pskip)”(E)被使用以后,x264会加速其编码过程,但有时候会导致在单调的场景或精细的渐变画面中产生人为编码的痕迹。如果你很在意这些问题和现象,不勾选“快速P帧跳过”会有一定的帮助。禁止该选项(强制编解码器彻底地检测每一个区块)之后,对全局的质量会产生及其微小的提升,以及一个细微却很明显的速度下降。因此我建议如果不是十分必要的话,勾选该选项。然而,如果你使用Trellis量化,你可能会想要取消勾选该项以追求最高的质量。这样做可以使得Trellis在信息的扬弃不与其他选项冲突的情况下成为量化的决定因素。
  • “DCT精简(DCT Decimation)”(R)是指由x264来决定什么时候可以忽略向数据流中写入特定的DCT数据块。也就是说,当x264确定不需要进行某个数据块变换的时候,程序会允许x264直接跳过对其的编码,以节约那些原本有可能被浪费在x264认为是无用的信息上的比特率。从这方面看,DCT精简和快速P帧跳过以及Trellis量化有相似之处,即由x264来判断可以忽略的信息。然而,在当前的情况下,我推荐尽可能地勾选该项,因为禁止它会导致在恒定量化下的更大的文件体积,而相对于编码的比特率来说,质量的提升几乎感觉不到。
  • “色度动态预测(Chroma ME)”(F)的工作原理是测定在运动估算期间视频的色度,以提高运动估算的精度和视觉质量。这一般会带来品质的重要提升,尤其是对动画的题材。我建议总是勾选该项。
  • “采样高宽比(Sample AR)”(H)处理视频外观的高宽比——如果你不了解其作用,可以无需接触它。
  • “线程(Threads)”(I)用以设定x264分配给编码进程的线程数。你可用的线程数应当与你电脑处理器的核心数相适应。需要记住每个支持超线程(HT)的处理器按两个线程计算。如果你不知道你的CPU的核心数,或者其是否具有超线程(hyper threading),比较保险的办法是将其设定为1。设定多核心的优点仅仅是在多核心的机器上编码的处理速度会快一些。
  • 调试记录(Debug logging)(J):记录编码过程的相关信息。将其设定为Error——它不会对一般水平的使用者提供(他们所需要的)更多的调试信息。
  • x264生成的AVI文件的FourCC(K)是其中(指AVI容器中)的视频流的标识符。如果没有特别指定,Xvid生成的AVI文件具有“XVID”的FourCC。对AVC文件来说,H264是一个可以被广泛接受和支持的FourCC,依照AVC 1.1标准所建议,你最好保持其默认的H264。
  • CABAC,即双向适应二进制算法编码(L),是x264的main profile中的一项能够允许视频流的构成基础参照之前和之后来进行预算的关键特性。它主要是用以在品质无损耗的前提下提升压缩效率(依具体视频和比特率的不同在10%~15%之间波动),而解码速度会有轻微的下降(通常高比特率和低量化值会导致复杂的CABAC解码)。如果将其禁止,x264会采用较低品质的CAVLC,同时你也就会失去使用Trellis量化特性的机会。我强烈建议你勾选该选项,除非你想要获得一个尽可能快的解码速度(Xbox、掌上电脑等等)。
  • “Trellis”(M)是一个通过选取在压缩过程中存在于编码文件中的数据来提升编码的视觉品质的高级特性。它看上去像是提高了比特率的利用率,但是由于当你选择一直开启该选项(框格呈灰色并被选中)时会造成约10%的速度下降(即CLI中trellis 1和trellis 2的区别),而相对(正常选择状态)提升的品质比较有限,我建议将该选项置于正常选取状态,而当你知道它将会造成问题时,完全取消勾选该项。
  • “交错编码(Interlacing)”(S)是一个可以使得x264对视频源文件进行简单的固定交错编码的特性。如果你的视频源文件不是隔行的,或者你不知道这个选项的作用,最好是敬而远之。反之,如果你确切地知道你的视频源文件是隔行的,则勾选该项。注意:你必须取消勾选Trellis (M)并设定最大连续B帧(max consecutive B-frames,在“体积与帧(MBs&Frames)”选项卡下)为0。
  • “降噪(Noise Reduction)”(O):如果你的视频源文件有很多噪点(比如带有很多类似电影的斑点或者录像/抓取视频时的静电干扰),你可以在这里设定一个降噪值。如果你没有其他的降噪操作,这就是一个很好的预处理特性。范围从0(关闭)到100(极大程度的降噪)。我通常将其设为0,然而,这是在我事先知道我的视频源文件看起来是我想要的那样的前提下。如果我的目的是很低的比特率,由于降噪可以去除那些难以(被通过编码的方式)压缩的噪点,它就会对品质和比特率有所助益。
  • 参照下面的“去马赛克教程”来获得有关如何正确设置使用“去块插件(Deblocking Filter)”(N)的相关信息。

去马赛克教程(Deblocking Guide)

AVC格式内置了一个极其实用的特性,它可以消除马赛克和其他人为编码的瑕疵,而这些问题曾经使得AVC之前的那些格式饱受困扰。它在AVC的编码中相当实用,由于AVC是构筑在这个滤镜之上的事实以及你可能经历到的在视频中存在过多的马赛克以及人为编码的瑕疵(糟糕的片源),一般来说在正常情况下不要禁止这个去块插件。然而,因为它会占用大量的解码时间,如果解码器又不支持在播放时手动关闭它,你可能会考虑(在编码时)禁止掉它以获得尽可能快的解码速度(Xbox、掌上电脑等等)。
应该有这样的认识:即由于人类的视觉系统(human visual system (HVS))在空间上比较复杂的场景中往往会把瑕疵和马赛克当作该场景的固有细节,因此去块插件的使用在原则上常常会存在争议。因为x264会默认地除去这些人为编码的痕迹,人类的视觉系统便会以为这是“损失了细节”,即使从技术角度来讲,x264的细节处理其实相当精确——甚至在相近的比特率之下的表现有过之而无不及。事实上,已经有共识认为(Doom9论坛的编解码器性能对比也很好地支持这一观点)x264确实是在致力于比ASP(未去马赛克的)编解码器在相近的比特率之下更精确地保持更多的细节。然而,去块插件对人为编码瑕疵的去除仍然为人类的视觉系统所干涉并认为它移除了本该存在的画面细节,而存在这些虚假的“细节”的画面正是人们在不使用去块插件的情况下所习惯了的。对于那些认为在编码视频中的噪点可以得到一个更为柔和和舒服的画面的人们来说,去块插件对这些噪点的去除也并不讨巧。这些偏好依据各人的情况是有所不同的,所以请努力地发现什么样的设定对你的眼睛和需求来说是最合适的。
Alpha去块阈值“strength”(P)帮助决定需要多强的去块效果来除去马赛克。Beta去块阈值“threshold”(见上图的Q)确定有多少马赛克需要去除。这个值设定得越高,x264就会将越多的视频部分理解为马赛克(如果设定得过高,会将过多的视频部分判断为马赛克),因而会进行更多的去块操作。当然,如果你对原材料“清洗”(比喻去块)得不够,在那些没有被清洗到的地方就会有污渍(比喻马赛克)残留下来——就这样按照清洗衬衫的方法来考虑它——而如果你清洗的强度不够,有些污渍便不会完全消失。然而,如果你洗得过多,力量过强,你就会毁掉这件衬衫而不是清洗污渍了——会有很难看的褪色,并且纹理和细节都被抹掉了。

  • 两个滑动条的初始设置都是0,这是为什么呢?这是能够在去块和细节保留之间取得计量平衡以产生最高质量的标准值。然而,如果你对默认的0,0编码的结果不满意,可以参考下面的意见:
  • 不要超过-3到2的范围(对两个滑动条来说都是如此)。一般地说,超过2会使解码的结果过于模糊,而低于-3会使结果看起来有点过于锐利——感觉也不会好,因为所有的掩盖都被去除了,细节的缺乏只会显得更加突出。
  • 如果你在编码一个动画类的视频源文件,推荐使用比较强的去块(将两个滑动条都设置为1)以尽可能地去除所有的马赛克。这是由于动画视频内容的边缘具有很高的反差对比,需要去除的马赛克之类会具有较高的抵抗力。从另一个方面说,如果你在编码一个现实题材的视频,尤其是具有复杂的纹理和较低的亮度的那种,则应该考虑降低去块的强度以保持这些细节,以免出现过度的模糊。
  • 努力在这两个设定之间保持一种确定的关系。即如果你想要进行更强力的去块,那么就要确定你同时也提升了阈值以便于使更多的部分得到去块处理,反之亦然(如1,1;2,2;-1,-1;等)。回忆一下那个洗衣服的比方:你不会想要只是很强力地去清洗一小块地方而其他的部分都没有被清洗到(对于一件普通的待清洗衣物来说),这样的话没有清洗到的部分会显得突出而生硬,带来很糟糕的视觉效果。
  • 在高比特率下,为了尽可能保持最多的细节,我建议对两个设置尝试采取-1的设定(阈值可达-2)。然而,根据视频源文件的情况(梯度、纹理和对比度)、采用的比特率以及个人偏好,对其中之一或全部两个设置来说,0可能仍然是最理想的设置。

欢迎来到DeathTheSheep的AVC VfW编码教程,这个内容丰富而易用的教程将会在AVC编码中最大限度地帮助您。不论您是新手还是想要在编码细节方面增进理解的专家,都可以在本教程中学到相应的知识。基本上,您可以用本教程替代任何有关Xvid/Divx的设置教程。下面就让我们前进吧!

然而,我们首先需要提出一些术语。为了充分利用本教程,我们最好对这些编码相关的词汇及其用法有一个了解。

1.编解码器(Codec):压缩器(Compressor)/解压缩器(Decompressor)。这里,x264是一个编解码器,也被称作“编码器(encoder)”。Divx是一个编解码器,Xvid也是一个编解码器。如果你下载了DTS_x264的程序包,你会得到一个编码器(压缩视频的部分)和一个被称为“解码器(decoder)”的解压缩器(使你能够播放你制作或者“编码”的视频的那一部分)。由于你可能并不需要调整解码软件,这个教程便没有提及这方面的内容。值得注意的是,“编解码器(Codec)”同“标准(Standard)”是有区别的:H.264是x264所基于的标准,MPEG4-ASP是Xvid和Divx所基于的标准。MPEG4既不是编解码器,也不是MP3,而是一个标准。

2.比特率(码率、Bitrate):这和你编码生成的最终文件的大小(“filesize”)有关。比特率越高,文件质量就越高,而文件体积也会越大。它通常用(数据量/时间)的单位形式来表示,例如“千比特/秒(KB/sec)”或者kbps。在视频中,有大量运动的场景通常需要较高的比特率来将画面质量维持在一个可以接受的水准;因为运动量越大,编解码器就需要将更多的数据储存在文件中。

3.量化(Quantizer):编解码器决定质量的基础单位。注意较高的量化值会产生较低的质量和比特率。

4.Pass:对输入的源文件进行一轮完整的处理。根据你所选择的模式不同,编解码器会对文件进行特定次数的全局处理。第一次的全局处理("Pass 1" 或 "First Pass")通常是用来对源视频文件有一个总体的了解,编解码器同时会将这些结果写入到一个被称作pass file的文件中,该文件会(作为参考)用来对视频文件进行第二次或者第三次的处理,以决定如何对视频文件分配比特率和量化值,从而达到(在给定条件下)它所能达到的最好质量。需要注意的是在恒定质量或恒定量化的模式中,由于编解码器已经知道了采用怎样的质量进行编码,所以只会用one pass(一次编码)的方式,而这个质量值是由使用者设定的。同时它的比特率也是独立的,编解码器会以一种简单的方式尽可能多地调用它所需的比特率来达到给定的质量。

5.编码速度(Encoding Speed):其定义为:“在任意特定的时间点内,编码器处理/编码整个文件所需要的时间,用帧/秒(frames/sec、fps)来表示”。意思是在编码过程中,会有一个全局的或平均的编码速度(根据从开始到完成所花费的时间)和一个在每个视频场景改变时的瞬时编码速度。在处理运动变化较为激烈的场景时,编码速度会趋向于更慢。

你可能感兴趣的:(优化,算法,search,optimization,compression,Codec)