Total Pageviews

Saturday 14 October 2017

X264 AVC 设置指南

想过要编码高质量的AVC视频吗?咄,这就是你来这里的原因了。 最基本的,你可以仅使用本指导代替任何讨论XviD设置的指导。XviD…陈旧,古董,XviD…*抖*… 顺便提一下,我是DeathTheSheep,一个可怜而又谦逊的家伙,Doom9.org的一个成员。客套话不多说了,呵呵。

“通过”的数量

我推荐那些渴望文件能是特定大小的人多次通过模式。没错,如果你需要你编码出来的文件最终能精确地到达170.00MB,你一定会用2次或者3次通过编码。1次通过模式是为那些时间极其短缺或者不想要高质量输出的人准备的。2次通过模式则满足大多数人的需要,它生成高质量、大小准的文件。但是,单次通过模式有时也用来生成质量固定的文件。如果你想要使用这种统一的、质量一定的并且无视文件大小的模式,请看下面的“固定量化模式(Constant Quantizer Mode)”部分。

固定量化模式(Constant Quantizer Mode)

如果你并不是一定要使你的视频达到一个固定的、精准的文件大小,或者你更倾向于让编码器决定质量多少时文件有多大,你可以考虑使用这种模式,即“Single Pass - Quantizer”。
  • 确认你已经在“编码模式”下拉列表选择了“Single Pass – Quantizer”模式(A.)
  • 记住,量化值越高(B.),画质就越差;也因如此,文件会更小。
  • 不要使用低于15的量化值,除非你在压制档案资料或者想要完全保持源。
  • 同时,不要使用任何高于40的量化,即使文件会变得不可思议的小,但是这样一种编码质量是无法忍受的。除非你在编码一种极其锐利的、边缘对比度极高的视频。
  • 对于大多数想要高质量视频的人来说,量化值从20(质量最好)到30(质量最烂)是一个很好的选择。这依赖于个人的喜好和为存放编码后的文件准备的磁盘空间。
  • 像卡通、动漫这种没什么详细纹理的片子,可以考虑使用高一点的量化值。
  • 真人内容的话,特别是那种有着大片深色场景和重要纹理细节的片子,请考虑用较低的量化值。
  • 这里就设置好了,保持这些设置,到剩余的其他标签页中看看。

“多次通过(Multipass)”模式

如果你想要你的视频在编码后是某一特定的文件大小,你需要使用多次通过模式。
  • 在“编码模式”下拉列表中选择“Multipass – First Pass”或者“Multipass – First Pass (Fast)”(A.)。对于那些想要得到理想质量而选择3次通过编码的人,第一次通过编码可以考虑使用带有“fast(快速)”那个。如果仅是二次通过编码,我建议使用标准的第一次通过模式。使用快速那个,虽然通常情况下编码质量不会烂到“灾难性”的等级,不过我推荐第一次通过编码使用不带“fast”那个,为了确保在不同情况编码不同视频时总能够得到理想质量。
  • 目标比特率“Target Bitrate” (单位kbps)(B.)是分给视频的数据流大小。这个数字越大,丢失的视频信息越少,质量也就越高,图像也越清楚,看起来越自然,细节保留得越多。可以考虑使用一个比特率计算器去确定文件想要达到指定大小时比特率是多少(你可以去搜索Doom9的论坛,只是在那里的时候不要杀死任何羊)。我推荐给高质量的视频使用500到900kbps的数值,但是如我所说,这完全取决于你想要达到的最终大小。一个合理的文件大小范围是一部电影500,700或1400MB,取决于电影的长度和复杂程度(大量的细节和快速的运动是导致复杂程度提高的元凶)。
  • 到其他标签页中去调整剩下的设置。
  • 在满意地调好了第一次通过编码的设置以后,重新进入编码设置,然后从“通过类型”下拉列表框中选择“Multipass – Nth Pass”,保持所有设置和第一次通过编码时一样,就是做第二次通过编码了。如果你想做第三次通过编码就再多做一遍。

编码:高速高质

这个部分提供了通往编码速度和编码质量最优化的台阶。以下就是提供最好AVC编码质量和编码速度的推荐设置。
  • “Keyframe boost (%)” (A.)控制着关键帧(I帧,intra帧,场景切换帧)的质量比其他帧(P)更好多少。这种质量的提升给对照帧增加了额外的质量,所以根据这些预测出来的帧质量也要更好,整部影片看起来就会更舒服。另外,关键帧出现的频率也为那些长时间不动的静止场景提供了更好的质量(特别是那种比较慢的动画)。所以设定关键帧的提升度非常重要。为了得到通常能够接受的最好结果,把这个设置到40或者0(恒定质量,所有帧都一样有利)。但是,特殊情况调整一点会更有好处(可能是在为低比特率/低质的动画编码时,或者明亮、高速运动、背景经常切换的真人电影)。
  • “B-frames reduction (%)”(B.)控制着B帧的量化值(质量)要比其他帧(P)低多少。这种质量的降低在人类的视觉系统中很难被察觉,是因为B帧被偷偷用在P帧之间更高效地重建图像的运动。这个值的降低可以充分地提高压缩率,但也可能导致运动不自然和不协调的细节损失。对于那种高比特率但是低量化值的真人视频,你还是把这个值从推荐值30降低一些,可能是25或者20,这样可以让细节、运动和视频的总体质量更加统一,动画内容的话(卡通、动漫),你可以把这个值最高设置到50,对于某些动画片,甚至可以直接开到60,这都归功于动画对于统一运动和敏感的细节变化的缺乏。
  • “Bitrate Variability (%)” (C.),也被认为是“qcomp”,控制着X264可以让量化值(质量)在你指定的比特率下能变化的范围。这个选项设置得越低,量化值(质量)的变化也就变得越不稳定、越没有规则。以 0这个值为例,会让X264彻底地改变每一帧的质量:障碍在于那种“简单”的帧(细节少,运动慢)在你选择的比特率下看起来很壮观,同时“复杂”的帧(细节多,运动快)就看起来很“华丽”了。因为X264可以直接降低它的质量去达到你想要的比特率,结果是比特率几乎恒定不变。但是这个选项设置得越高,质量就会变得越相同,出来的视频质量就越稳定。举例说把这个值开到100,将会强制X264为所有帧使用相同的质量(没有起伏)。所以根据这个原理,它可以给一帧分配10kbps的比特率,为了维持相等的质量而给另一帧分配1000kbps(纯粹的VBR)。因此总体来说,所有帧都会被量化得一样,弄出一样的质量,因为被质量的允许起伏值限制,尽管比特率可以随便改变。
    • 请注意:这个选项做的事和它的名字一样。你把“Bitrate Variability”开得越小,在场景切换的时候比特率变化得越小,但是质量可能会变化很大。
    • 这个选项的设定要根据个人喜好,同时我强烈推荐使用默认值60以达到最好的质量,除非你确实需要一个CBR的编码(为了实现流或者什么其他的东西你可能要把这个设置到0)或者一个真正的固定质量VBR编码(这是你要把它设置到100)。
    • 当然,比特率变化控制当且仅当使用比特率控制模式(例如“Single Pass – Bitrate”模式,这里不讨论的一种模式)时有效,不是为了质量已经是固定的固定量化模式设计的。
  • D.、 E.、和F.主要用于所谓的“量化值限制”,也是当且仅当在比特率控制模式下有效。大多数时候,你不要去动它们。“Min QP” (D.) 决定你编码的视频达到的最低量化值(或者说是最高质量)。我建议设置成10到15除非你准备弄出一个极大比特率的编码。“Max QP”类似,设置你编码的视频能达到的最高量化值(最低质量)。这个就更难设置了,我推荐原来是啥就用啥(默认是51),就是让X264决定每个场景量化成什么样。51这个最大值貌似有点过分,但是较为复杂的帧会在“处理比特率控制量化”时计算,而x264往往知道最好用啥。 “Max QP Step”控制着X264能在不同量化(质量)等级之间能够以多快的速度切换。这个值设置过低会强制编码起慢慢改变质量等级,可能会对压缩某个场景有破坏性,比如会为了维持视觉上的质量而突然使用一个很低的量化值,但设置太高会导致不同场景之间的质量有显著波动。
  • "Scene Cut Threshold" (G.) 决定着一帧需要有多少变化才会被X264当作一次场景变化(就会给它一个关键帧)。40是推荐使用的默认值,但是为每个视频编码使用不同的值对精确判断场景变化是有那么一点帮助的。对于那些黑暗、夜晚、洞窟、水下等视频,你可能会想把它调低一点,让X264更精确地判断场景变化。 作为惯例,编码场景变化比较细微的那种视频需要调高这个值(比如从4550)。为了使场景检测更准确,那种明亮、高对比度的场景切换明显的视频请尝试使用更低的值(比如说35)。
  • “Min IDR-frame interval” (H.) 用来设置X264在使用一个关键帧前至少要间隔几个非关键帧。通常,你要编码的视频的帧速率(FPS)可以填写到这里,能够有效地限制X264最少要等1秒才能再插入一个关键帧。如果把这个值设置得太高,X264就会长时间不检测场景变化,即使此时需要关键帧的插入,播放时拖进度条也会很卡。如果把这个值设置过小,画面闪烁时就会导致比特率的大量浪费:短时间内插入极其大量的关键帧,尽管此时眼睛根本就无法觉察到这里的细节。
  • “Max IDR-frame interval” (I.) 用来设置X264在使用一个关键帧前最多能用几个非关键帧。通常情况下,把这个值设置到你要编码的视频的帧速率的10倍,这将会强制X264最多在两个关键帧之间间隔10秒。这个值设置太低将会导致关键帧的滥用,可能导致画面闪动,也是一种比特率的浪费,降低整体画质。这个值设置太高的话,播放时拖动进度条就会很痛苦,任何可能出现的缺陷也会在屏幕上保持更久。我相信设置这个是安全的,但是把这个开到1000或者甚至还要更高,是不是播放时不想要能够拖进度条了,特别是当场景切换极限(G.)设置的够大,严重影响到关键帧的正常插入。

下个标签:MBs&Frames

  • 各个搜索和决定的分析是由“Partitions”标签(J区域)下的选项控制的。这些选项可以增加分析准确度从而提高编码器的压缩效果和质量,提供更高品质的输出。一般来说,编码器表现在可见内容上的搜索种类越多,预测和编码就越准确有效。所以我推荐把全部都选上。 但是,有一件事情你必须要知道,下面会提到。
  • “8x8 Transform”特性(K)是一项强有力的压缩技术,在可视内容的方块中发挥着作用,还能让你开启其他的一些高质量编码选项,比如“8x8 Intra search” (L)没有8x8 transform的支持就不能用。这些选项都能够让质量上一个意义重大的台阶,但是使用8x8 transform可是会让你编码的视频“High Profile AVC”化, 破坏了编码的视频对于“Main Profile AVC”的兼容性。这种兼容性的失去,可能某些不支持“High profile AVC”解码器就不能播放你编码的视频了。目前,大部分流行的或者高度发达的桌面解码器都能够支持high profile,所以使用这项特性在桌面上播放还是安全的。去看看下面的设备兼容性信息。
  • x264能够使用的最大B帧数是由选项M控制的。B帧是紧凑地夹杂在P帧(标准的从关键帧预测来的帧)之间的帧,作为这些帧中的一种高效率的典型。这些选项能够在几乎不影响视觉效果的情况下大幅度提升压缩效率,即使它们的量化值比其他帧高出许多(去看看前面的选项B,能得到更多信息)。当选项P(“Adaptive”选择框)是选中的时候,我建议把这个加到至少3,以便x264可以自己决定高质量时B帧用多少合适。
  • B-frame “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帧作为其他连着的B帧的对照帧可以轻微地提升质量,因为这些B帧可以和其他B帧对照来压缩,而不是仅仅局限于和附近的P帧或者I帧对照来压缩。B帧叠加在最大连续B帧数(M)开到3以上的时候非常有效果。我推荐开启这个选项,它可以在编码速度下降一点点的情况下面轻微提升质量。
  • 当“Weighted biprediction” (Q)选中时,B帧会从一个P帧或者其他什么帧对照得更多,这个可以让B帧更加精确和有效,因此质量也会上升。我强烈建议选中这个。
  • “Bidirectional ME” (R)是一个可以让x264同时使用前后帧的运动对照的新特性。这个选项可以增加质量,勾了。
  • Direct B-frame mode (S)允许B帧使用“动作方向预测”代替编码实际的运动,从而提高了压缩效果、节省了空间。现在总共有2种模式可以使用,我建议对动画片使用Spatial,对真人片使用Temporal(运动没有动画来得规则)。

下个标签:More...

  • “Partition Decision”(分块检测) (A)的方法,也作为“Subpixel Refinement Quality”所知,是一个至关重要的特性,控制着x264估算运动的范围。列表中一共有7个选项可供选择,从最低质量的“1 (Fastest)”到最高质量的“6b (RDO on B-frames)”按照顺序排列。牢记使用的选项越高,x264就会“考虑”越多关于决定画面如何运动的事,结果是速度大跌。因为这个是最难以决定的选项之一,请一定要合理地设置它。我建议这里设置得不要小于'5'。 '5'是可以使用色深检测(下面的F有介绍)的选项中最快的。但是“6 (RDO)”对于压缩质量要有利许多,因为它开启了rate distortion (RDO),一个能大幅度提升检测质量的选项(因此压缩质量也大增),代价是编码时间大增。'6b (RDO on B-frames)' 选项对B帧也开启了rate distortion,质量将进一步提升速度也进一步下降。依我看,使用rate distortion('6'和'6b')质量上的提升要比速度的损失合算。因此,特别是你的电脑很快的时候,推荐使用“6b (RDO on B-frames)”
  • 运动估计方法选项(B)允许用户选择x264如何查找画面运动。方法越好,x264就越能够精确地查找和记录运动。然后压缩质量和压缩效果就上去了。我推荐电脑烂或没时间的人使用“Hexagonal search”(从水平方向、垂直方向、对角线方向搜索),否则就用“Uneven Multi-Hexagon”(搜索多个六边形)。质量归功于精确地搜索和运算,精确的搜索和计算能提供更好的质量,花的时间当然也会更多。使用“Exhaustive Search”(一个象素一个象素地搜索,全然不存在“预测”)绝对想都不要想;这并不会比“Uneven Multi-Hexagon”好多少,但是它彻底地把速度弄没了。能在一个星期内编码完成可以算是你的运气了。我甚至不知道为什么要有这样的选项。
  • 注意一下,用户可以指定搜索范围“Range”(C),单位是像素。搜索方法用了“Uneven Multi-Hexagon”或者(请不要使用)“Exhaustive Search.”时就可以指定。保持在16就很好了:对运动的运算做了最优化,发现它通常能提供最快的速度和最高的质量。如果你有一个运动很快或帧速率很低(低于15)的片要压缩,考虑把这个调大一点,比如24或者最大值32。同样地,如果你有一个运动很慢、帧速率很高(比60更高)的片要压缩,可以考虑把这个降到10。
  • 通过“Max Ref. Frames”选项(D)你可以设置x264最多能够使用的对照帧的数量。通过和之前编码过的相似帧对照AVC可以有效地编码一个新的帧。最多能够参考的帧数就是这个选项设置的。越高越好,越高越慢。真人片的话,设置成3~5在大多情况下就足够了,还能维持较高的编码速度。动画片,或者片源有很多重复动作的话,值得考虑多开一些。这里我建议开到8或者10。如果还开了“Mixed Refs” (G),x264就更能自由地对照小比例的了。
  • “Fast Pskip” (E)是一个可以使x264变快的选项。但是有时会导致方格出现或某些小偏差的出现。如果对于你来说这是一个问题(或你会注意到这些情况下的不适),不要选“Fast Pskip”会有用。选中这个可以得到非常微小的画质提升(强制编码器检查每一个区块),和得到很小但是意义重大的速度损失。因此我推荐除非需要否则别选这个选项。注意这个选项并不是在所有的编译版本中都可以找到,但是偶尔可以在某些非官方的编译版本中找到。
  • “Chroma ME” (F)通过在运动检测时检测视频色彩浓度中的信息生效,提升运动检测的精确度和视觉上的质量。通常这个特性总是能提供一个意义重大的质量提升,特别是对于动画片。我推荐总是把这个选项开着。
  • “Sample AR” (H)可以处理视频的宽高比——如果你不知道这个是做什么的,你就不需要去碰它 ;)
  • “Threads” (I)是x264编码时使用的线程数。这个数值应当符合你电脑中所有CPU核心数的总和。记住,每个支持HT的CPU算作2个线程。如果你不知道你的电脑有几个CPU核心以及是否支持HT,保持1是最安全的。选择多个核心的唯一好处就是在多核心电脑上编码速度会变快。
  • Debug logging (J):记录关于编码时的信息。请把这个选项保持在Error——更多的Debug信息对于一般的用户来说是没用的。
  • x264产出的AVI的FourCC是视频流的标识符。除非你自己去设置成别的否则XviD产出的AVI的FourCC是“XviD”。对于AVC来说H264是一个被广泛接受和支持的FourCC,AVC1也是。我建议你就保持它的默认值H264
  • CABAC (L) 也叫做双向适应的二进制编码,是x264的main profile中的一项关键技术,允许视频的构成基础由前后部分来预测。主要说来,它在没有任何画质损失的前提下能够提升压缩效果(10-15%因视频和比特率的不同而不同),尽管它轻微影响你的解码速度 (通常高比特率 [由于比特率的关系,同时很低的量化值也是] 能导致复杂的CABAC解码)。如果关掉,x264将使用劣质的CAVLC,你也会丧失使用Trellis quantization特性的机会。我强烈建议你保持这个选项勾着的除非你想要解码速度尽可能地快(用在XboX,便携设备等)。
  • “Trellis” (M) 是一个高水品的特性,通过操纵稍后的压缩过程中什么数据存在文件中,可以在视觉上提升编码质量(这个定论是主观的,因为人/比特率/片源类型的不同而不同)。推测它可以提升比特率的使用效率,当然也归功于它降低编码的速度(~10%)。在固定量化模式中这个是无法预测的, 经常也能听到有人说它造成的画质提升很微小(甚至没有)。我建议把它关了,特别是在固定量化模式中,而且如果你有快的电脑也只有当使用多次通过模式时开启——如果你想榨干此编码器的最后一滴油。
  • 请参考下面的方格解除向导获取如何正确配置“Deblocking Filter”(N)选项的信息。

方格消除向导

AVC格式与生俱来的是一个特别有用的特性,可以减轻那些折磨了许许多多AVC前辈的方格或其他编码偏差。事实上AVC是围绕着这种滤镜构建的,不然你就可能体验巨多的格子和视频偏差(填充错误)。通常使用时请不要禁止它。但是,由于事实上它在解码的时候非常费CPU,如果是为了获得最快的解码速度但是解码器又不支持在播放的时候手动关闭它,你可以禁止它(用于Xbox、便携播放设备等)。
请记住使用in-loop滤镜(方格消除)的准则是非常受争议的,因为人类的视觉系统(简称HVS)不能够很好地依照原有的细节来看出复杂场景中的瑕疵和格子。因为x264默认把这些东西弄没了,HVS把这个认为是一种“细节损失”,尽管技术上x264保留的细节已经足够精确了——或者在很多情况下用相同的比特率表现得更厉害。事实上,至今通常的舆论认为(Doom9的编码比较和质量理论大力支持了这个舆论)在相似的比特率下x264能够比ASP(不使用方格消除)保留更多的细节。但是,方格消除时去除的偏差偶尔也会使HVS困惑,那些不使用方格消除的人认为的合理细节没掉了。但是,对于那些认为视频编码中的噪音是让人看起来更加愉快的图的人,方格消除造成的噪音减少经常会令他们不愉快。由于个人喜好不同,所以请努力寻找出最适合你自己的设置。
方格消除的threshold(请查看前面对于Q的说明)决定着多大的格子才需要消除。格子是啥?这就是threshold努力要辨别的。这个设置得越高,x264就会把视频中越多的部分当作格子(如果设置太高通常效果会过火),所以方格消除也就会用得越多。方格消除的strength (P)决定着消除被认为的方格需要用多大的力度。如果你方格消除设置不够,自然就会有一些格子漏网。就当作是洗衬衫,如果你洗得不够用力,就会洗不干净。但是如果你洗得过于用力,你会毁了衬衫。因为格子消失了,取而代之纹理细节交界的地方会出现很恶心的颜色丢失。
  • 最初两个值都开到0的原因:这是一个能够在最高质量和最多细节之间平衡的标准设定。但是如果你觉得这个设置不能让人满意,看看这些建议:
  • 要确定什么设置是你看来最好的,请在一个短小而又有代表性的视频片段上测试标准的 0/0 设置,记着以下的指导方针。
  • 对于这两个设置,不要尝试开到-3~2的范围之外。通常说来,开到比2更大的值方格消除功能会有点失灵,反而使质量更差。同时比-3更小的值会导致画面看起来有点尖锐——也不是一种好感觉,因为纹理的缺失只会在某些东西出现在画面上时显得特别突出。
  • 如果你编码的片源是动画,推荐使用稍微厉害一些的方格消除(两个都开到1)可以消除所有可能的方格。另一方面,如果你编码的视频是真人的,特别是那种画面纹理复杂亮度又不高的,就要考虑把方格消除开低一些,防止“洗过头”的效果出现。
  • 努力使2个选项保持一些有意义的联系,也就是说,如果你想要方格消除工作得厉害些,请确认一下threshold已经开大了以便于有更多得部分被执行方格消除。回忆一下那个洗衣服的比喻:你不会希望只有一小部分洗过了而其他部分都是脏的,因为这没洗的部分将会赤裸裸地展现给别人看,造成很坏的印象。
  • 在高比特率下保持较多的细节,我建议试试看两个选项都开到-1。但是,0仍然是这几个设置中最理想的,当然这依赖于片源的性质、(梯度、纹理和对比度)、比特率的使用和个人喜好。
from http://blog.sina.com.cn/s/blog_5062b3790100iifv.html

No comments:

Post a Comment