支持特定的编码功能,每个profile都规定了一个算法特征和限制的子集,任何遵守某个profile的解码器都应该支持与其相应的子集;
名称 | 参数集 |
---|---|
baseline/PROFILE_BASELINE | param->analyse.b_transform_8x8=0; param->b_cabac=0; param->i_cqm_preset=X264_CQM_FLAT; param->psz_cqm_file=NULL; param->i_bframe=0; param->analyse.i_weighted_pred=X264_WEIGHTP_NONE; |
main/PROFILE_MAIN | param->analyse.b_transform_8x8=0; param->i_cqm_preset=X264_CQM_FLAT; param->psz_cqm_file=NULL; |
high/PROFILE_HIGH | 默认的参数设置就是high级别 |
high10/PROFILE_HIGH10 | x264目前实际不支持 |
high422/PROFILE_HIGH422 | x264目前实际不支持 |
high444/PROFILE_HIGH444_PREDICTIVE | x264目前实际不支持 |
H264中关于profile的IDC解释:
苹果设备对不同profile的支持:
每个level都规定了一组对标准中语法成员(syntax element)所采用的各种参数值的限制;在给定的profile下,level通常与解码器的处理能力和内存容量相对应,每一个档次设置不同的参数(取样速率、图像尺寸、编码比特率等),得到对应的编解码器性能的不同level;
如无特别需要,尽量让level处于4.1以下;
缺省状态是 -1,取值范围如下表;
使用方法:
param->i_level_idc=-1; //代码版
--level 4.1 //命令行版
H264标准中关于level的IDC的解释:
一组编码参数的组合使用,preset作为x264最重要的参数,主要调节编码速度和质量的平衡,有10个等级;
名称 | 参数集 |
---|---|
ultrafast //极快(最快) | param->i_frame_reference=1; param->i_scenecut_threshold=0; param->b_deblocking_filter=0; param->b_cabac=0; param->i_bframe=0; param->analyse.intra=0; param->analyse.inter=0; param->analyse.b_transform_8x8=0; param->analyse.i_me_method=X264_ME_DIA; param->analyse.i_subpel_refine=0; param->rc.i_aq_mode=0; param->analyse.b_mixed_references=0; param->analyse.i_trellis=0; param->i_bframe_adaptive=X264_B_ADAPT_NONE; param->rc.b_mb_tree=0; param->analyse.i_weighted_pred=X264_WEIGHTP_NONE; param->analyse.b_weighted_bipred=0; param->rc.i_lookahead=0; |
superfast//超级快 | param->analyse.inter=X264_ANALYSE_I8x8|X264_ANALYSE_I4x4; param->analyse.i_me_method=X264_ME_DIA; param->analyse.i_subpel_refine=1; param->i_frame_reference=1; param->analyse.b_mixed_references=0; param->analyse.i_trellis=0; param->rc.b_mb_tree=0; param->analyse.i_weighted_pred=X264_WEIGHTP_SIMPLE; param->rc.i_lookahead=0; |
veryfast//非常快 | param->analyse.i_subpel_refine=2; param->i_frame_reference=1; param->analyse.b_mixed_references=0; param->analyse.i_trellis=0; param->analyse.i_weighted_pred=X264_WEIGHTP_SIMPLE; param->rc.i_lookahead=10; |
faster//很快 | param->analyse.b_mixed_references=0; param->i_frame_reference=2; param->analyse.i_subpel_refine=4; param->analyse.i_weighted_pred=X264_WEIGHTP_SIMPLE; param->rc.i_lookahead=20; |
fast//快 | param->i_frame_reference=2; param->analyse.i_subpel_refine=6; param->analyse.i_weighted_pred=X264_WEIGHTP_SIMPLE; param->rc.i_lookahead=30; |
medium//正常 | /* Default is medium */ |
slow //慢 | param->analyse.i_subpel_refine=8; param->i_frame_reference=5; param->analyse.i_direct_mv_pred=X264_DIRECT_PRED_AUTO; param->analyse.i_trellis=2; param->rc.i_lookahead=50; |
slower //很慢 | param->analyse.i_me_method=X264_ME_UMH; param->analyse.i_subpel_refine=9; param->i_frame_reference=8; param->i_bframe_adaptive=X264_B_ADAPT_TRELLIS; param->analyse.i_direct_mv_pred=X264_DIRECT_PRED_AUTO; param->analyse.inter |
veryslow //非常慢 | param->analyse.i_me_method=X264_ME_UMH; param->analyse.i_subpel_refine=10; param->analyse.i_me_range=24; param->i_frame_reference=16; param->i_bframe_adaptive=X264_B_ADAPT_TRELLIS; param->analyse.i_direct_mv_pred=X264_DIRECT_PRED_AUTO; param->analyse.inter |
placebo //极慢 | param->analyse.i_me_method=X264_ME_TESA; param->analyse.i_subpel_refine=11; param->analyse.i_me_range=24; param->i_frame_reference=16; param->i_bframe_adaptive=X264_B_ADAPT_TRELLIS; param->analyse.i_direct_mv_pred=X264_DIRECT_PRED_AUTO; param->analyse.inter |=X264_ANALYSE_PSUB8x8; param->analyse.b_fast_pskip=0; param->analyse.i_trellis=2; param->i_bframe=16; param->rc.i_lookahead=60; |
CRF 码率控制模式下各个 preset的编码耗时、码率、质量对比:
一组编码参数的组合使用,重要性仅次于preset的参数,主要配合视频类型和视觉优化的参数,可以理解为视频偏好;如果视频的内容复合其中一个可用的调整值又或又其中的需要,则可以使用此选项,否则建议不适用。
名称 | 参数集 |
---|---|
film:电影、真人类型 | param->i_deblocking_filter_alphac0=-1; param->i_deblocking_filter_beta=-1; param->analyse.f_psy_trellis=0.15; |
animation:动画 | param->i_frame_reference=param->i_frame_reference>1?param->i_frame_reference*2:1; param->i_deblocking_filter_alphac0=1; param->i_deblocking_filter_beta=1; param->analyse.f_psy_rd=0.4; param->rc.f_aq_strength=0.6; param->i_bframe+=2; |
grain:需要保留大量的gain时使用,颗粒感,噪点 | param->i_deblocking_filter_alphac0=-2; param->i_deblocking_filter_beta=-2; param->analyse.f_psy_trellis = 0.25; param->analyse.b_dct_decimate=0; param->rc.f_pb_factor=1.1; param->rc.f_ip_factor=1.1; param->rc.f_aq_strength=0.5; param->analyse.i_luma_deadzone[0] =6; param->analyse.i_luma_deadzone[1] =6; param->rc.f_qcompress=0.8; |
stillimage:静态图像编码时使用 | param->i_deblocking_filter_alphac0=-3; param->i_deblocking_filter_beta=-3; param->analyse.f_psy_rd=2.0; param->analyse.f_psy_trellis=0.7; param->rc.f_aq_strength=1.2; |
psnr:为提高psnr做了优化的参数 | param->rc.i_aq_mode = X264_AQ_NONE; param->analyse.b_psy=0; |
ssim:为提高ssim做了优化的参数 | param->rc.i_aq_mode=X264_AQ_AUTOVARIANCE; param->analyse.b_psy=0; |
fastdecode:可以快速解码的参数 | param->b_deblocking_filter=0; param->b_cabac=0; param->analyse.b_weighted_bipred=0; param->analyse.i_weighted_pred=X264_WEIGHTP_NONE; |
zerolatency:零延迟,牺牲视频质量较少延迟,比如视频会议 | param->rc.i_lookahead=0; param->i_sync_lookahead=0; param->i_bframe=0; param->b_sliced_threads=1; param->b_vfr_input=0; param->rc.b_mb_tree=0; |
touhou:东方弹幕游戏录像 | param->i_frame_reference=param->i_frame_reference>1?param->i_frame_reference*2:1; param->i_deblocking_filter_alphac0=-1; param->i_deblocking_filter_beta=-1; param->analyse.f_psy_trellis=0.2; param->rc.f_aq_strength=1.3; if( param->analyse.inter&X264_ANALYSE_PSUB16x16 ){ param->analyse.inter |=X264_ANALYSE_PSUB8x8;} |
解释 |
---|
没有缺省值,一旦设置就表示要按照相应的码率控制进行编码; |
使用qp模式,即固定量化值 ,意味着停用弹性量化(aq_mode); |
qp设置为 0 的时候,意味着无损编码; |
用法 |
---|
param->rc.i_qp_constant = -1; param->rc.i_rc_method=X264_RC_CQP;//代码版 |
–qp 28 //命令行版 |
解释 |
---|
固定位元率系数,Constant Ratefactor,缺省值是23,也是x264默认使用的码率控制方式; |
可用的值从1~51,越小编码质量越好,码率越高,一般使用18~28,可以为浮点;此模式把某个“质量”作为编码目标,根据骗子质量自动分配码率的vbr(Variable Bit Rate动态比特率);x264中构想是让【crf n】提供与【qp n】相当的视觉品质,但编码文件更小一些;crf是借助降低“较不重要”帧的品质来达到此目的,在此情况下,“较不重要”是指在复杂或者高动态场景的帧,其品质不是很耗费位元数就是不易察觉,所以会提高它们的量化值,从这些帧里所节省下来的位元数被重新分配到可以更有效利用的帧; |
CRF 模式的唯一负面影响是不知道输出文件的大小,也不知道码率的波动情况如何;因此一般在直播应用 |
当crf = 0时,与qp=0 一样,实现无损编码; |
crf+6,比特率减半;crf-6,比特率翻倍;crf-1,比特率增加10%左右,crf+1,比特率减少10%左右; |
此外还有f_rf_constant_max(crf-max)配合使用; |
用法 |
---|
param->rc.i_rc_method=X264_RC_CRF; param->rc.f_rf_constant=23;//代码版 |
–crf 25//命令行版 |
解释 |
---|
没有缺省值,x264尝试把给定的位元率作为整体平均值来编码,这意味着最终编码文件的大小是已知的,但最终的品质未知,此选项通常与-pass(两阶段编码)一起使用; |
x264开发者不推荐使用这种模式,因为编码器也无法准确知道后面的视频内容是什么;所以必须靠猜来达到目标码率,因此会引起质量波动;这不是一种固定码率模式!尽管 ABR 从技术上来说是一种 VBR 模式,但它并不比指定某个固定码率好多少,因为输出稳定画质的可靠性实在不行; |
FFmpeg中设置bitrate的具体参数为bit_rate,单位是bits/s;(x264里面对应参数i_bitrate的单位则是kbits/s,1kbits为1000bits而非1024bits) |
用法 |
---|
param->rc.i_bitrate = 2000; param->rc.i_rc_method=X264_RC_ABR; //代码版,单位是kbit/s |
—bitrate 2000 //命令行版本 |
https://www.lighterra.com/papers/videoencodingh264/
https://blog.csdn.net/CSqingchen/article/details/106492496
https://aijishu.com/a/1060000000079293
https://blog.csdn.net/CrystalShaw/article/details/89572684?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=2
https://www.itu.int/rec/T-REC-H/en //官方文档链接
https://en.wikipedia.org/wiki/AVC-Intra
https://www.cnblogs.com/wangnath/
https://www.cnblogs.com/jogh/p/4967070.html
https://www.cnblogs.com/wangnath/p/15057854.html
https://www.cnblogs.com/wangnath/p/15057885.html
https://blog.csdn.net/chinabinlang/article/details/78181110