目录
随着视频编码器的不断迭代和更新,会有一些工具的优化,也会有一些代码结构的优化,有一个比较重要的问题是,现如今的编码器中各类工具在不同情况下的编码器性能是怎样的,这是优化编码器的重要依据。本文记录x264编码器中各类工具在不同的情况下的编码性能,可以做有限性的参考。需要注意的是,本文的测试只局限于工具级别,不讨论使用什么样的参数会带来特定场景下更好的性能,例如码率控制模块使用多少目标比特,滤波模块使用什么样的alpha和beta值。
1.实验方法
1.1 实验序列
随机选择了一些不同分辨率的序列,包括832x480、1280x720和1920x1080,其中一些场景属于运动较为剧烈的场景,如BasketballDrill和BasketballDrive,一些属于会议或直播类的画面平缓场景,如FourPeople和KristenAndSara,还有一些类似于摄像头监控场景,如PartyScene和BQTerrace。这些序列场景不同,分辨率不同,帧率也不同,能够在一定程度上反应x264的泛化编码性能。本文记录时,使用的x264的软件版本为164,使用的处理器为AMD Ryzen 5 4600H with Radeon Graphics 3.00 GHz。
名称 | 分辨率 | FPS | 帧数 |
---|---|---|---|
BasketballDrill_832x480_50.yuv | 832x480 | 50 | 500 |
PartyScene_832x480_50.yuv | 832x480 | 50 | 500 |
BQMall_832x480_60.yuv | 832x480 | 60 | 600 |
FourPeople_1280x720_60.yuv | 1280x720 | 60 | 600 |
Crew_1280x720_60.yuv | 1280x720 | 60 | 600 |
KristenAndSara_1280x720_60.yuv | 1280x720 | 60 | 600 |
BasketballDrive_1920x1080_50.yuv | 1920x1080 | 50 | 500 |
BQTerrace_1920x1080_60.yuv | 1920x1080 | 60 | 600 |
Cactus_1920x1080_50.yuv | 1920x1080 | 50 | 500 |
1.2 实验指标
通常来说,评估编码器的性能使用的是BD-BR(G. Bjontegaard, “Calculation of average PSNR differences between RDcurves,” in the 13th Meeting of VCEG-M33, Austin, TX, Apr. 2–4, 2001.,可以参考,视频编码指标中的BD-BR/BD-rate和BD-PSNR的说明和计算(Excel Method and Matlab Method)),需要测试4个QP点对应的码率和PSNR。对于H264标准编码器而言,测试的QP点通常为 {22, 27, 32, 37},但是这样的测试比较耗费时间。为了简便起见,本文使用x264默认的编码参数,即crf = 23(不进行外部指定),评估了FPS,Bitrate,PSNR这3个指标,分别对应于编码帧率,编码比特率,编码质量。
对于FPS和Bitrate,增益(gain)的计算公式如下。如果计算的是FPS,则gain为正时,代表提升性能,如果计算的是Bitrate,则增益为负时,代表提升性能。
g
a
i
n
=
(
t
e
s
t
a
n
c
h
o
r
−
1
)
∗
100
%
gain=(\frac{test}{anchor}-1) * 100\%
gain=(anchortest−1)∗100%
对于质量指标PSNR,仅使用test和anchor的差值来衡量,差值为正时,代表提升性能。
1.3 实验脚本
在实验时,为了保证编码速度测试的合理性,将命令行写在一个script中,这样就在同一个线程下进行测试。同时,关闭所有其他的软件,防止产生内存竞争,影响测试性能。在实验时,对一种情况需要多测试几遍,以避免产生误差。
实验的命令行举例如下,在下面的例子中,计算了一个分辨率为1280x720序列,不同profile的性能,包括baseline、main和high。参数–psnr表明x264编码器需要输出PSNR。这里需要解释一下–tune这个参数(可以使用help查看),–tune psnr展开为–aq-mode 0 --no-psy,即不开启aq,也不使用psy(心理视觉)情况下计算psnr。psy是心理视觉来调整码控的一种工具,以主观的感知来调整qp,从而获得主观上的质量提升,但是PSNR是客观质量,所以应该禁用psy。同时,aq也是用于调整主观质量的技术,在计算PSNR时需要禁用aq,所以不能够直接计算客观质量。
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile baseline --psnr --tune psnr -o test.h264 > .\test_log\profile_baseline.log
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile main --psnr --tune psnr -o test.h264 > .\test_log\profile_main.log
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -o test.h264 > .\test_log\profile_high.log
另外,如果想计算SSIM,可以使用参数–ssim --tune ssim,与计算PSNR不同的是,–tune ssim展开为–aq-mode 2 --no-psy。
展示一个测试出来的log文件,是Crew序列的high profile,其中124.30fps表示FPS,4084.72kb/s表示编码码率,本文记录的PSNR来自于下面的Avg:39.589,单位是dB。
yuv [info]: x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x264 [info]: profile High, level 3.2, 4:2:0, 8-bit
x264 [info]: frame I:4 Avg QP:27.55 size: 40176 PSNR Mean Y:40.25 U:44.43 V:44.87 Avg:41.27 Global:41.27
x264 [info]: frame P:172 Avg QP:29.32 size: 16097 PSNR Mean Y:38.85 U:43.41 V:43.66 Avg:39.93 Global:39.91
x264 [info]: frame B:424 Avg QP:30.86 size: 5133 PSNR Mean Y:38.32 U:43.11 V:43.50 Avg:39.44 Global:39.42
x264 [info]: consecutive B-frames: 3.5% 5.0% 5.5% 86.0%
x264 [info]: mb I I16..4: 37.5% 50.3% 12.2%
x264 [info]: mb P I16..4: 18.0% 13.8% 1.9% P16..4: 28.7% 7.9% 2.3% 0.0% 0.0% skip:27.5%
x264 [info]: mb B I16..4: 3.9% 2.3% 0.3% B16..8: 24.8% 4.1% 0.5% direct: 2.2% skip:61.9% L0:40.1% L1:49.2% BI:10.7%
x264 [info]: 8x8 transform intra:39.9% inter:76.8%
x264 [info]: coded y,uvDC,uvAC intra: 32.4% 36.1% 13.1% inter: 12.3% 11.0% 0.3%
x264 [info]: i16 v,h,dc,p: 47% 22% 17% 13%
x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 12% 27% 5% 7% 8% 6% 6% 6%
x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 30% 17% 21% 4% 7% 7% 6% 4% 4%
x264 [info]: i8c dc,h,v,p: 64% 11% 21% 4%
x264 [info]: Weighted P-Frames: Y:50.0% UV:41.9%
x264 [info]: ref P L0: 49.7% 18.7% 16.7% 10.8% 4.1%
x264 [info]: ref B L0: 88.9% 8.9% 2.1%
x264 [info]: ref B L1: 97.2% 2.8%
x264 [info]: PSNR Mean Y:38.489 U:43.204 V:43.554 Avg:39.589 Global:39.563 kb/s:4084.72
encoded 600 frames, 124.30 fps, 4084.72 kb/s
2. 配置文件(profile)
profile是实验的基础,不同的profile会使用不同的编码工具,在这里测试了3种配置文件,分别是baseline、main和high,使用的命令行为
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile baseline --psnr --tune psnr -o test.h264 > .\test_log\ssim\profile_baseline.log
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile main --psnr --tune psnr -o test.h264 > .\test_log\ssim\profile_main.log
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -o test.h264 > .\test_log\ssim\profile_high.log
profile | FPS | Bitrate | PSNR |
---|---|---|---|
Anchor (baseline) | |||
main | -12.59% | -28.59% | 0.259dB |
high | -14.20% | -26.35% | 0.435dB |
从表2中看出,从baseline profile到main profile,编码速度减慢了12.59%,但编码码率同时下降了28.59%,同时还有0.259dB的质量增益。
同时,从baseline到high,编码速度下降了14.20%,但码率下降了接近26.35%,并且带来了多达0.435dB的PSNR增益。对比main和high两个档位,编码速度和比特率相差不大,但编码质量相差很大,high profile带来的码率节省和PSNR增益明显优于main档位,这也是为什么在x264当中默认使用high profile。
在后续的实验当中,均以high profile作为anchor,以此为基础来考察不同工具带来的性能增益。
3. 块尺寸
块划分是编码器执行的第一步,不同的尺寸会影响后续的分析过程(预测过程),这里测试不同的块尺寸的性能,但不会测试16x16块的skip,因为全部skip就不存在编码了。
查看一下x264当中关于块尺寸的初始化配置,位于common/base.c的x264_param_default()中,默认会配置analyse.intra为I4x4和I8x8,analyse.inter为I4x4,I8x8,PSUB16x16以及BSUB16x16。
// 在分析模块中会分析4x4和8x8的块
param->analyse.intra = X264_ANALYSE_I4x4 | X264_ANALYSE_I8x8;
// 会分析4x4, 8x8, P帧16x16和B帧16x16的块
param->analyse.inter = X264_ANALYSE_I4x4 | X264_ANALYSE_I8x8
| X264_ANALYSE_PSUB16x16 | X264_ANALYSE_BSUB16x16;
3.1 Intra划分
通过外部参数可以控制intra的划分尺寸,例如可以通过配置ultrafast模式,禁用intra分析,可以配置–preset ultrafast来启用这个模式
static int param_apply_preset( x264_param_t *param, const char *preset )
{
char *end;
int i = strtol( preset, &end, 10 );
if( *end == 0 && i >= 0 && i < ARRAY_ELEMS(x264_preset_names)-1 )
preset = x264_preset_names[i];
if( !strcasecmp( preset, "ultrafast" ) )
{
// ...
param->analyse.intra = 0;
param->analyse.inter = 0;
param->analyse.b_transform_8x8 = 0;
// ...
}
如果使用其他模式,可以通过analyse.b_fransform_8x8这个参数来控制intra不对8x8的块进行分析
if( !h->param.analyse.b_transform_8x8 )
{
h->param.analyse.inter &= ~X264_ANALYSE_I8x8;
h->param.analyse.intra &= ~X264_ANALYSE_I8x8;
}
但是,上述的两种做法也会影响到inter划分。如果想只考虑intra划分,可以通过hardcode的方式来跳过针对于I4x4或者I8x8的分析。举例来说,可以在mb_analyse_intra()中配置跳过I4x4分析,这样的修改方式不会影响其他的地方,打包生成exe就可以用script测试了
if( flags & X264_ANALYSE_I4x4 ) // 将括号中判断条件置零,来跳过I4x4分析
{
// printf("impl. test, should not analyse 4x4");
int i_cost = lambda * (24+16); /* 24from JVT (SATD0), 16 from base predmode costs */
int i_satd_thresh = a->b_early_terminate ? X264_MIN3( i_satd_inter, a->i_satd_i16x16, a->i_satd_i8x8 ) : COST_MAX;
h->mb.i_cbp_luma = 0;
if( a->b_early_terminate && a->i_mbrd )
i_satd_thresh = i_satd_thresh * (10-a->b_fast_intra)/8;
// ...
}
3.2 inter划分
x264中允许通过参数来控制inter划分,如下所示
-A, --partitions <string> Partitions to consider ["p8x8,b8x8,i8x8,i4x4"]
- p8x8, p4x4, b8x8, i8x8, i4x4, none, all
(p4x4 requires p8x8. i8x8 requires --8x8dct.)
其中,[“p8x8,b8x8,i8x8,i4x4”]表示默认会考虑的划分尺寸,包括P帧8x8,B帧8x8,I帧8x8以及I帧4x4,也可以再自行添加一个p4x4的尺寸考虑,p4x4需要p8x8,i8x8需要开启8x8的DCT。
配置输入参数,位于common/base.c的x264_param_parse()中,其中根据外部输入的尺寸来设置analyse.inter,这里配置的参数仅对inter有效,对intra没有影响。
OPT2("analyse", "partitions")
{
p->analyse.inter = 0;
if( strstr( value, "none" ) ) p->analyse.inter = 0;
if( strstr( value, "all" ) ) p->analyse.inter = ~0;
if( strstr( value, "i4x4" ) ) p->analyse.inter |= X264_ANALYSE_I4x4;
if( strstr( value, "i8x8" ) ) p->analyse.inter |= X264_ANALYSE_I8x8;
if( strstr( value, "p8x8" ) ) p->analyse.inter |= X264_ANALYSE_PSUB16x16;
if( strstr( value, "p4x4" ) ) p->analyse.inter |= X264_ANALYSE_PSUB8x8; // 默认不启用
if( strstr( value, "b8x8" ) ) p->analyse.inter |= X264_ANALYSE_BSUB16x16;
}
举例来说,可以通过如下的方式来调整inter划分
// 默认配置
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high -A p8x8,b8x8,i8x8,i4x4 -o test.h264
// 禁用inter 4x4
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high -A p8x8,b8x8,i8x8 -o test.h264
// 禁用inter p8x8,表示不会对小于16x16的块进行分析
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high -A b8x8,i8x8,i4x4 -o test.h264
3.3 测试
针对上述intra和inter划分的情况进行测试,结果用百分比显示。实验script举例如下
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -o test.h264 > .\test_log\org.log
:: intra
.\intra_analyse_no_4x4.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -o test.h264 > .\test_log\intra_analyse_no_4x4.log
.\intra_analyse_no_8x8.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -o test.h264 > .\test_log\intra_analyse_no_8x8.log
.\intra_analyse_no_4_8.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -o test.h264 > .\test_log\intra_analyse_no_4_8.log
:: inter
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -A p8x8,b8x8,i8x8 -o test.h264 > .\test_log\inter_analyse_no_i4x4.log
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -A p8x8,b8x8,i4x4 -o test.h264 > .\test_log\inter_analyse_no_i8x8.log
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -A b8x8,i8x8,i4x4 -o test.h264 > .\test_log\inter_analyse_no_p8x8.log
.\x264.exe test.yuv --input-res 1280x720 --fps 30 --profile high --psnr --tune psnr -A p8x8,i8x8,i4x4 -o test.h264 > .\test_log\inter_analyse_no_b8x8.log
FPS | Bitrate | PSNR | |
---|---|---|---|
Anchor (high profile) | |||
intra_no_4x4 | -0.10% | 0.45% | -0.008dB |
intra_no_8x8 | 1.38% | 0.56% | -0.004dB |
intra_no_4_8 | 1.73% | 2.15% | -0.077dB |
inter_no_i4x4 | 0.50% | 0.25% | -0.008dB |
inter_no_i8x8 | 0.94% | 0.43% | -0.028dB |
inter_no_p8x8 | 11.84% | 3.08% | -0.004dB |
inter_no_b8x8 | 5.01% | 1.66% | -0.020dB |
值得一提的是,在intra_no_i4x4的测试中,出现了BQMall这个序列FPS异常低的情况,相对于org降低了45%,属于异常值,没有纳入统计的结果之中。
从测试结果中可以得出一些结论:
(1)intra块的处理带来的帧率和码率影响程度比较小,这是因为使用x264默认的配置时,intra帧的数量非常少,大部分是B帧,其次是P帧
(2)inter_no_p8x8尺寸对于帧率影响比较大,为11.84%,码率的影响为3.08%,这是比较单独处理块尺寸中影响最大的一个尺寸。这是因为P帧是帧间预测中最耗时的帧,如果禁用,会带来很大的FPS增益。
(3)inter_no_b8x8尺寸对于帧率有一定影响,大约为5%,码率的影响为1.66%。B帧的处理相对于P帧的处理而言,帧率的影响较小,尽管编码过程中B帧序列是最多的,但是B帧的编码工具较少,所以产生的FPS增益比较小。
举例而言,对于BasketballDrive这个1080P序列而言,使用x264时的默认配置,编码I帧数量为2帧,P帧数量为126帧,B帧数量为372帧。尽管inter帧中也有可能存在intra块,但是数量是非常少的。
x264 [info]: frame I:2 Avg QP:27.23 size: 92264 PSNR Mean Y:38.90 U:43.39 V:43.99 Avg:40.00 Global:39.98
x264 [info]: frame P:126 Avg QP:28.23 size: 50261 PSNR Mean Y:37.62 U:42.03 V:42.55 Avg:38.69 Global:38.67
x264 [info]: frame B:372 Avg QP:30.55 size: 15030 PSNR Mean Y:37.13 U:41.82 V:42.15 Avg:38.23 Global:38.19
4.预测工具
在预测模块,帧内预测影响性能的方式主要来自于不同的预测模式,这里不做记录。主要查看帧间预测当中使用的一些工具,包括
(1)参考帧数量,配置项为 --ref,设置参数内容为 {1, 2, 4, 8, 16}
(2)I帧和P帧之间B帧数量,配置项为 --bframes,设置参数范围为 [0, 3]
(3)运动搜索范围,配置项为 --merange,配置内容为 {20, 24}
(4)运动搜索方法,配置项为–me,配置内容为 {dia, umh, esa, tesa}
(5)亚像素搜索精度,配置项为–subme,配置范围为 [1, 9]
这些工具不能直接禁用,可以通过配置参数来调整,默认的配置为
param->i_frame_reference = 3; // 参考帧数量 = 3
param->i_bframe = 3; // B帧数量 = 3
param->i_bframe_pyramid = X264_B_PYRAMID_NORMAL; // B帧结构 = normal
param->analyse.i_me_range = 16; // 运动搜索范围 = 16
param->analyse.i_me_method = X264_ME_HEX; // 运动搜索方法 = 六边形搜索
param->analyse.i_subpel_refine = 7; // 亚像素优化 = 7
FPS | Bitrate | PSNR | |
---|---|---|---|
Anchor (high profile) | |||
ref 1 | 13.74% | 4.16% | -0.059dB |
ref 2 | 7.13% | 0.99% | -0.012dB |
ref 4 | -0.23% | 0.01% | 0.000dB |
ref 8 | -30.23% | -1.87% | 0.033dB |
ref 16 | -57.98% | -3.29% | 0.059dB |
bframes 0 | 3.87% | 24.78% | -0.234dB |
bframes 1 | 9.19% | 10.56% | -0.056dB |
bframes 2 | -0.23% | 3.09% | -0.032dB |
me range 20 | -0.13% | 0% | 0dB |
me range 24 | -1.34% | 0% | 0dB |
me dia | 2.86% | 0.01% | -0.003dB |
me umh | -13.42% | -0.29% | 0.009dB |
me esa | -46.94% | -0.28% | 0.019dB |
me tesa | -53.04% | -0.53% | 0.029dB |
subme 1 | 80.93% | 17.51% | -0.173dB |
subme 2 | 53.49% | 4.48% | -0.258dB |
subme 3 | 28.69% | 7.99% | -0.048dB |
subme 4 | 21.97% | 6.44% | -0.034dB |
subme 5 | 13.59% | 5.87% | 0.000dB |
subme 6 | 4.73% | 3.96% | 0.002dB |
subme 8 | -6.03% | -0.77% | 0.004dB |
subme 9 | -30.29% | -1.08% | 0.021dB |
从帧间预测的一些工具上看,可以获得一些结论
(1)默认的参考帧数量为3,如果减小为2,编码速度提升约7%,如果减小为1,编码速度会加快13.74%,对编码码率的影响相对较小。
(2)默认B帧数量为3,减少B帧数量会带来很小的速度提升,但会带来很大的码率损失
(3)对于运动搜索方法,使用更快的dia搜索(钻石搜索),会带来少量速度提升;使用umh以及更慢的搜索方法,会带来极为明显的编码速度损失。对于最慢速度的TESA搜索,编码速度会减慢约53%。
(4)对于亚像素精度,从默认的7增加到8,速度会降低6%,几乎没有码率节省;如果从7降低到5,会带来13.59%的速度提升,但会带来5.87%的码率损失。
(5)扩大搜索范围并不会带来任何质量上的增益,也没有码率的影响。
5.变换工具
在变换模块,主要考察两个可配置参数,分别是
(1)自适应空域变换尺寸8x8,配置参数为–no-8x8dct
(2)P帧系数阈值控制,配置参数为–no-dct-decimate
这两个参数默认的配置项为
param->analyse.b_transform_8x8 = 1;
param->analyse.b_dct_decimate = 1;
FPS | Bitrate | PSNR | |
---|---|---|---|
Anchor (high profile) | |||
no_8x8dct | 2.79% | -3.04% | -0.176dB |
no_dct_decimate | -1.23% | 0.51% | 0.009dB |
这里有一点奇怪,禁用8x8的dct反而带来了码率的增益
6.码率控制
在码控模块,没有考虑具体的参数数值(例如应该如何选取bitrate,如何选取VBV Buffer Size),而是考虑aq和mbtree是否使用,由于aq和mbtree是主观优化技术,所以不能计算客观质量psnr和ssim,同时主观质量评价也是一个大的领域,所以这里只记录aq和mbtree对于编码时间的影响程度。
FPS | Bitrate | |
---|---|---|
Anchor (high profile) | ||
aq = 0, mbtree = 0 | 10.63% | 2.46% |
aq = 1, mbtree = 0 | -1.31% | 31.63% |
aq = 0, mbtree = 1 | 6.73% | -4.45% |
值得注意的是,mbtree依赖于aq,如果使用mbtree但禁用aq,编码器会强制开启aq,此时aq-strength为0,这种情况是不完整的aq模式。从上表中可以看出,单独禁用mbtree会带来明显的比特率损失,约为31%,可见mbtree在x264当中的重要作用;单独禁用aq(不完整禁用,但是aq-strength为0),反而会使得比特率有增益,这种增益应该来自于aq-strength的调整,使得与一些编码工具产生了比较好的耦合。如果同时禁用aq和mbtree,会带来10.63%的速度损失和2.46%的码率损失。
7.滤波
在滤波模块,考虑是否使用环路滤波deblock,配置参数项为–no-deblock,测试结果如下
FPS | Bitrate | PSNR | |
---|---|---|---|
Anchor (high profile) | |||
no_deblock | -2.10% | 1.64% | -0.104dB |
8.熵编码
对比CAVLC和CABAC两种熵编码工具,使用参数–no-cabac来禁用CABAC。
FPS | Bitrate | PSNR | |
---|---|---|---|
Anchor (high profile) | |||
no_cabac | -1.76% | 8.96% | -0.050dB |
9.其他工具
除了前面描述的一些工具之外,还存在一些其他可以考察的工具,如下所示
(1)汇编加速工具
直接将汇编加速禁用,使用参数为–no-asm
FPS | Bitrate | PSNR | |
---|---|---|---|
Anchor (high profile) | |||
no_asm | -75.28% | 0.02% | -0.0002dB |
(2)场景切换
FPS | Bitrate | PSNR | |
---|---|---|---|
Anchor (high profile) | |||
no scenecut | 0.75% | -0.03% | 0.0008dB |
scenecut 20 | -10.17% | -0.03% | -0.0005dB |
scenecut 30 | 0.11% | -0.07% | -0.0005dB |
scenecut 40 | 0.40% | 0.23% | 0.004dB |
10.总结
本文简单记录了x264编码器当中一些工具带来的性能增益,使用了3种不同分辨率的测试序列,并使用x264中默认的量化参数。
(1)第一,测试了不同profile之间性能的差异,发现high profile相对于main和baseline而言,有着显著的码率下降和编码质量提升的效果,码率至多下降-26.35%,PSNR至多提升0.435dB,并将此作为后续测试的anchor。
(2)第二,测试了不同块尺寸对编码性能的影响,interPSub8x8对编码速度的影响很大,如果禁用,会带来11.84%的速度增益,但会带来约3%的码率损失,这在一些快速算法当中可以考虑使用(如果可以接收这样的trade-off)。
(3)第三,测试了不同的预测工具对编码性能的影响,参考帧数量和亚像素精度影响较大,而增大搜索范围对编码质量几乎没有影响。预测工具的影响主要还是来自于预测的模式,H265当中的预测模式数量增加了许多,也带来了不小的增益。
(4)第四,测试了变换模块中禁用dct8x8的影响,奇怪的是这里禁用dct8x8反而会有一定量的码率增益,感觉与所选择的序列有很大的关系。
(5)第五,测试了滤波模块带来的影响,如果禁用deblock,会带来约1.64%的码率损失,但速度并没有提升多少
(6)第六,测试了熵编码模块中禁用CABAC的影响,如果禁用CABAC,会带来非常大的编码码率损失,为8.96%
(7)第七,测试了汇编加速影响,如果禁用汇编加速,编码速度会下降超过75%,使用汇编加速是x264比标准软件JM更快的主要原因之一
(8)最后,值得说明的是,x264当中工具很多都互有关联,即会有耦合的功效,很可能会出现1+1<2的情况,即A工具加上B工具的性能增益不如两者加起来。
目前的测试结果就是如此,以后有需要时再结合特定的序列再补充一些测试数据。