编码器配置文件的内容
我们以下面的encode_RA.cfg配置文件为例
#Note: keep at least two spaces between the command line key word and ":"; otherwise, the cmd parser cannot read the value after ":"
#======== File I/O =====================
input : BQSquare_416x240_60.yuv # file name of input video
output : str.bin # file name of output bitstream
#recon : rec.yuv # file name of reconstructed video
width : 416 # pixel width of input video
height : 240 # pixel height of input video
frame_rate : 60 # frame rate (Hz)
colour_description : 0 # Colour description in sequence_display_extension
#=========== split configuration =================
ctu_size : 128
min_cu_size : 4
max_part_ratio : 8
max_split_times : 6
min_qt_size : 8
max_bt_size : 128
max_eqt_size : 64
max_dt_size : 64
#======== Coding Structure =============
i_period : 64 # I-picture period
max_b_frames : 31 # Number of maximum B frames (1,3,7,15)
frames : 9 # maximum number of frames to be encoded
disable_hgop : 0 # disable hierarchical GOP. if not set, hierarchical GOP is used
skip_frames : 0 # number of skipped frames before encoding. default 0
#=========== Misc. ============
profile : 50 # profile id (default: 0x32, phase-2: 0x32 for 10bit or 0x30 for 8bit, phase-1: 0x22 for 10bit or 0x20 for 8bit)
level : 106 # level id (default: 0x6a)
signature : 0 # embed picture signature (HASH) for conformance checking in decoding
verbose : 1 # verbose level
input_bit_depth : 8 # input_bit_depth
internal_bit_depth : 10 # internal bit depth (8, 10)(default: same as input bitdpeth)
TemporalSubsampleRatio : 1 # temporal subsampling ratio
#======= Quantization =============
op_qp : 37 # QP value (-16~63 for 10-bit internal encoding precision, 0~63 for 8-bit internal encoding precision)
qp_add_frm : 0 # one more qp are added after this number of frames, disable:0 (default)
qp_offset_cb : 0 # qp offset for cb, disable:0 (default)
qp_offset_cr : 0 # qp offset for cr, disable:0 (default)
qp_offset_adp : 1 # frame-level adpative qp offset for cb and cr, (on: 1, off: 0, default: 1)
hdr_chroma_qp_offset : 0 # frame level adaptive Chroma QP offset for HDR content (on: 1, off: 0, default: 0)
lcu_delta_qp : 0 # delta qp for lcu (on: 1, off: 0, default: 0)
cu_delta_qp : 0 # delta qp for cu (on: 1, off: 0, default: 0. Note: only be effective when lcu_delta_qp = 1)
cu_qp_group_size : 16 # qp group size (can be 8, 16, 32, 64, default: 16)
#=========== Filter ============
deblock : 1 # deblock on/off flag (on: 1, off: 0, default: 1)
sao : 1 # sao on/off flag (on: 1, off: 0, default: 1)
alf : 1 # alf on/off flag (on: 1, off: 0, default: 1)
#=========== Coding Tools =================
ipf : 1 # intra prediction filter
tscpm : 1 # two-step cross component prediction
dt_intra : 1 # dt intra on/off flag
pbt : 0 # pbt on/off flag
amvr : 1 # amvr on/off flag
hmvp : 8 # number of hmvp skip candidates (default: 8, disable: 0)
emvr : 1 # extend amvr on/off flag
umve : 1 # ultra motion vector expression scheme
affine : 1 # affine on/off flag
smvd : 1 # smvd on/off flag
libpic : 0 # libpic on/off flag
#------phase-2 tools--------
eipm : 1 # extended intra prediction mode on/off flag
enhance_tscpm : 1 # enhanced TSCPM on/off flag
srcc : 1 # srcc on/off flag
ist : 1 # ist on/off flag
sbt : 1 # sbt on/off flag
dmvr : 1 # dmvr on/off flag
bio : 1 # bio on/off flag
interpf : 1 # inter prediction filter on/off flag
mvap : 1 # mvap on/off flag
affine_umve : 1 # affine_umve on/off flag
mipf : 1 # multiple intra prediction filter
awp : 1 # angular weighted prediction(AWP off: 0, AWP on: 1, AWP SCC refinement adaptive on/off: 2, AWP SCC refinement on: 3)
awp_mvr : 1 # angular weighted prediction with motion vectore refinement
etmvp : 1 # etmvp on/off flag
sbtmvp : 1 # sbtmvp on/off flag
pmc : 1 # pediction from multiple cross-components
mcabac : 1 # counter-based multi-CABAC on/off flag
est : 1 # est on/off flag
st_chroma : 1 # st_chroma on/off flag
umve_enh : 1 # umve enhancement
obmc : 1 # overlapped block motion compensation
esao : 1 # esao on/off flag (on: 1, off:0)
dbr : 1 # dbr on/off flag (on: 1, off:0)
bgc : 1 # bgc on/off flag (on: 1, off:0)
ipf_chroma : 1 # chroma intrapf on/off flag
alf_enhance : 1 # ALF enhancement on/off flag (on: 1, off:0)
fast_ld : 0 # fast lowdelay me method (on: 1, off:0) off for RA case
ccsao : 1 # ccsao on/off flag (on: 1, off:0)
asp : 1 # affine secondary prediction on/off flag (on: 1, off:0)
iip : 1 # improved intra prediction on/off flag (on:1, off:0)
deblock_type : 1 # adaptive control of deblock type on/off flag
sawp : 1 # spatial angular weighted prediction
ipc : 1 # inter predictor correction on/off flag (on:1, off:0)
alo_enable_type : 0 # adaptive lambda optimization for lcu (on:1, off:0)
#-------scc coding tools----
ibc : 0 # intra block copy on/off flag (IBC on: 1, IBC off: 0, IBC adaptive on/off: 2)
abvr : 1 # abvr on/off flag
fimc : 0 # frequency-based intra mode coding on/off flag (for SCC coding)
ists : 0 # ists on/off flag
ts_inter : 0 # ts_inter on/off flag
sp : 0 # string prediction on/off flag
evs_ubvs : 0 # evs_ubvs on/off flag
#================= library picture ===============
#skip_frames_when_extract_libpic : 0 #number of skipped frames before extract libpic. default: the same as the number of skipped frames before encoding
#frames_when_extract_libpic : 100 #maximum number of frames when extract libpic. default: the same as the nmaximum number of frames to be encoded
#=========== patch =================
patch_stable : 1 # stable_patch_flag (0: all the pic as the same patch size; 1: each pic as the different patch size)
cross_patch_loopfilter : 1 # loop_filter_across_patch_flag (1: cross; 0: non cross)
patch_ref_colocated : 0 # indicate whether the MV out of the patch boundary
patch_uniform : 1 # 0: all the patch are in the same size; 1: each patch in the different size
patch_width_in_lcu : 0 # the width of patch in LCU
patch_height_in_lcu : 0 # the height of patch in LCU
#=========== weight quant =================
wq_enable : 0 # Frequency Weighting Quantization (0=disable,1=enable)
seq_wq_mode : 0 # (0:default, 1:user define)
seq_wq_user : [64,64,64,68,64,64,68,72,64,68,76,80,72,76,84,96,64,64,64,64,68,68,72,76,64,64,64,68,72,76,84,92,64,64,68,72,76,80,88,100,64,68,72,80,84,92,100,112,68,72,80,84,92,104,112,128,76,80,84,92,104,116,132,152,96,100,104,116,124,140,164,188,104,108,116,128,152,172,192,216]
pic_wq_data_idx : 1 # Picture level WQ data index (0:refer to seq_header, 1:derived by WQ parameter, 2:load from pic_header)
pic_wq_user : [64,64,64,68,64,64,68,72,64,68,76,80,72,76,84,96,64,64,64,64,68,68,72,76,64,64,64,68,72,76,84,92,64,64,68,72,76,80,88,100,64,68,72,80,84,92,100,112,68,72,80,84,92,104,112,128,76,80,84,92,104,116,132,152,96,100,104,116,124,140,164,188,104,108,116,128,152,172,192,216]
wq_param : 0 # Weighting Quantization Parameter(0=Default, 1=UnDetailed, 2=Detailed)
wq_model : 1 # Frequency Weighting Quantization Model (0-2)
wq_param_detailed : [64,49,53,58,58,64] # User defined Parameters-Detailed
wq_param_undetailed : [67,71,71,80,80,106] # User defined Parameters-UnDetailed
#=========== preprocess =============
temporal_filter : 1
temporal_filter_lookahead : 1
temporal_filter_period_0 : 8
temporal_filter_strength_0 : 95
temporal_filter_period_1 : 16
temporal_filter_strength_1 : 150
#=========== reference picture management =================
#|Type POC temporal_id #ref_pics_active reference pictures
RPL0_0 : B|32|0|2|32|48|64|9999|32|31|33
RPL0_1 : B|16|1|2|16|32|9999|33|32
RPL0_2 : B|8|2|2|8|24|9999|34|33
RPL0_3 : B|4|3|2|4|20|9999|35|34
RPL0_4 : B|2|4|2|2|18|9999|36|35
RPL0_5 : B|1|5|2|1|-1|9999|6|1
RPL0_6 : B|3|5|2|1|3|9999|2|7
RPL0_7 : B|6|4|2|2|6|9999|4|8
RPL0_8 : B|5|5|2|1|5|9999|5|9
RPL0_9 : B|7|5|2|1|3|7|9999|2|6|10
RPL0_10 : B|12|3|2|4|12|9999|8|11
RPL0_11 : B|10|4|2|2|10|9999|9|12
RPL0_12 : B|9|5|2|1|9|9999|10|13
RPL0_13 : B|11|5|2|1|3|11|9999|2|11|14
RPL0_14 : B|14|4|2|2|6|14|9999|4|12|15
RPL0_15 : B|13|5|2|1|5|13|9999|5|13|16
RPL0_16 : B|15|5|2|1|3|7|15|9999|2|6|14|17
RPL0_17 : B|24|2|2|8|24|9999|16|18
RPL0_18 : B|20|3|2|4|20|9999|17|19
RPL0_19 : B|18|4|2|2|18|9999|18|20
RPL0_20 : B|17|5|2|1|17|9999|19|21
RPL0_21 : B|19|5|2|1|3|19|9999|2|20|22
RPL0_22 : B|22|4|2|2|6|22|9999|4|21|23
RPL0_23 : B|21|5|2|1|5|21|9999|5|22|24
RPL0_24 : B|23|5|2|1|3|7|23|9999|2|6|23|25
RPL0_25 : B|28|3|2|4|12|28|9999|8|24|26
RPL0_26 : B|26|4|2|2|10|26|9999|9|25|27
RPL0_27 : B|25|5|2|1|9|25|9999|10|26|28
RPL0_28 : B|27|5|2|1|3|11|27|9999|2|11|27|29
RPL0_29 : B|30|4|2|2|14|30|9999|4|28|30
RPL0_30 : B|29|5|2|1|13|29|9999|5|29|31
RPL0_31 : B|31|5|2|1|3|15|31|9999|2|6|30|32
RPL0_32 : B|32|0|1|32|9999|1
RPL0_33 : B|16|1|2|16|-16|9999|2|1
RPL0_34 : B|8|2|2|8|-8|9999|3|1
RPL0_35 : B|4|3|2|4|-4|9999|4|1
RPL0_36 : B|2|4|2|2|-2|9999|5|1
RPL1_0 : B|32|0|2|32|48|9999|32|31
RPL1_1 : B|16|1|2|-16|16|9999|1|33
RPL1_2 : B|8|2|2|-8|-24|9999|1|2
RPL1_3 : B|4|3|2|-4|-12|-28|9999|1|2|3
RPL1_4 : B|2|4|2|-2|-6|-14|-30|9999|1|2|3|4
RPL1_5 : B|1|5|2|-1|-3|-7|-15|-31|9999|1|2|3|4|5
RPL1_6 : B|3|5|2|-1|-5|-13|-29|9999|3|4|5|6
RPL1_7 : B|6|4|2|-2|-10|-26|9999|5|6|7
RPL1_8 : B|5|5|2|-1|-3|-11|-27|9999|1|6|7|8
RPL1_9 : B|7|5|2|-1|-9|-25|9999|7|8|9
RPL1_10 : B|12|3|2|-4|-20|9999|9|10
RPL1_11 : B|10|4|2|-2|-6|-22|9999|1|10|11
RPL1_12 : B|9|5|2|-1|-3|-7|-23|9999|1|2|11|12
RPL1_13 : B|11|5|2|-1|-5|-21|9999|3|12|13
RPL1_14 : B|14|4|2|-2|-18|9999|13|14
RPL1_15 : B|13|5|2|-1|-3|-19|9999|1|14|15
RPL1_16 : B|15|5|2|-1|-17|9999|15|16
RPL1_17 : B|24|2|2|-8|8|9999|17|16
RPL1_18 : B|20|3|2|-4|-12|9999|1|18
RPL1_19 : B|18|4|2|-2|-6|-14|9999|1|2|19
RPL1_20 : B|17|5|2|-1|-3|-7|-15|9999|1|2|3|20
RPL1_21 : B|19|5|2|-1|-5|-13|9999|3|4|21
RPL1_22 : B|22|4|2|-2|-10|9999|5|22
RPL1_23 : B|21|5|2|-1|-3|-11|9999|1|6|23
RPL1_24 : B|23|5|2|-1|-9|9999|7|24
RPL1_25 : B|28|3|2|-4|4|9999|25|8
RPL1_26 : B|26|4|2|-2|-6|9999|1|26
RPL1_27 : B|25|5|2|-1|-3|-7|9999|1|2|27
RPL1_28 : B|27|5|2|-1|-5|9999|3|28
RPL1_29 : B|30|4|2|-2|2|9999|29|4
RPL1_30 : B|29|5|2|-1|-3|9999|1|30
RPL1_31 : B|31|5|2|-1|1|9999|31|2
RPL1_32 : B|32|0|1|32|9999|1
RPL1_33 : B|16|1|2|-16|16|9999|1|2
RPL1_34 : B|8|2|2|-8|-24|9999|1|2
RPL1_35 : B|4|3|2|-4|-12|-28|9999|1|2|3
RPL1_36 : B|2|4|2|-2|-6|-14|-30|9999|1|2|3|4
编码器配置文件各个参数解读
input
表示编码器输入的原始视频的文件名
支持相对路径,如果使用的是相对路径,那么其基本路径就是当前的工作目录。
output
表示编码器输出码流(.bin)的文件名
recon
表示编码器重建视频的文件名
width
表示输入视频中每一帧的宽度
height
表示输入视频中每一帧的高度
frame_rate
表示输入视频的帧率, i.e. 每秒多少帧
colour_description
视频的色彩类型,默认为0,表示YUV(4:2:0)类型
===split configuration===
用来指示CU如何进行划分,暂时没有进行细致的了解
i_period
表示I帧的周期,i.e. 输入视频每间隔多少帧就要有1个I帧
max_b_frames
表示两个非B帧之间允许出现的最多B帧的数目
要求/限制: i_period 是(max_b_frames+1)的倍数
frames
表示编码器要编码输入视频中前多少帧
disable_hgop
表示是否允许使用分层GOP技术
disable_hgop=0,表示允许使用分层GOP;disable_hgop=1,表示不允许使用分层GOP
profile
profile 表示“配置”,i.e. 编码时采用的特定工具集和技术规范
默认一般使用50(0x32), 此时既可以编码8bit视频,也可以编码10bit视频
signature
是否要计算哈希值来检验编解码匹配。
如果signature=1, 就表示要计算哈希值,MD5。
对于视频中的每一帧f,编码器在编码完之后得到码流b, 对f进行重建,得到重建帧f’, 然后根据f’去计算一个哈希值s. 编码器将码流b和哈希值s都写入到码流中,传送给解码器。
解码器在接收到码流后,从中解码得到帧f的码流b和其哈希值s,使用码流b进行解码,得到重建帧f’‘, 然后根据f’‘去计算解码端的哈希值s’,检查s’是否等于s:
- 如果s’=s, 就表明帧f的编解码匹配
- 如果s’!=s, 就表明帧f的编解码不匹配,存在问题,需要排查错误。
input_bit_depth
输入视频的比特深度, i.e. 输入视频的一个像素的比特深度
internal_bit_depth
编码器内部的比特深度,默认我们一般是用10bit.
这个参数用于表示我们在编码器进行编码(内部计算)的过程中,使用几位来表示一个像素值
TemporalSubsampleRatio
时序下采样率,i.e. 每隔几帧采样一个帧,默认值为1
这个参数取值为k的时候,编码器会依次对第0帧,第k帧,第2k帧,第3k帧…进行编码, 直接忽略其余的帧。
libpic
是否要使用知识图像技术来进行编码
取值为0,表示不使用知识图像技术; 取值为1,表示要使用知识图像技术
op_qp
量化参数qp的值
一般来说,对于一个编码器A和一个视频序列V, 我们要分别测试qp值为27,32,38,45上的性能,然后去计算BD-rate
temporal_filter
时域滤波技术
temporal_filter=0,表示不启用时域滤波技术;temporal_filter=1,表示要启用时域滤波技术
reference picture management部分
这一部分,是用于参考帧管理的.
#=========== reference picture management =================
#|Type POC temporal_id #ref_pics_active reference pictures
RPL0_0 : B|32|0|2|32|48|64|9999|32|31|33
RPL0_1 : B|16|1|2|16|32|9999|33|32
RPL0_2 : B|8|2|2|8|24|9999|34|33
RPL0_3 : B|4|3|2|4|20|9999|35|34
RPL0_4 : B|2|4|2|2|18|9999|36|35
RPL0_5 : B|1|5|2|1|-1|9999|6|1
RPL0_6 : B|3|5|2|1|3|9999|2|7
RPL0_7 : B|6|4|2|2|6|9999|4|8
RPL0_8 : B|5|5|2|1|5|9999|5|9
RPL0_9 : B|7|5|2|1|3|7|9999|2|6|10
RPL0_10 : B|12|3|2|4|12|9999|8|11
RPL0_11 : B|10|4|2|2|10|9999|9|12
RPL0_12 : B|9|5|2|1|9|9999|10|13
RPL0_13 : B|11|5|2|1|3|11|9999|2|11|14
RPL0_14 : B|14|4|2|2|6|14|9999|4|12|15
RPL0_15 : B|13|5|2|1|5|13|9999|5|13|16
RPL0_16 : B|15|5|2|1|3|7|15|9999|2|6|14|17
RPL0_17 : B|24|2|2|8|24|9999|16|18
RPL0_18 : B|20|3|2|4|20|9999|17|19
RPL0_19 : B|18|4|2|2|18|9999|18|20
RPL0_20 : B|17|5|2|1|17|9999|19|21
RPL0_21 : B|19|5|2|1|3|19|9999|2|20|22
RPL0_22 : B|22|4|2|2|6|22|9999|4|21|23
RPL0_23 : B|21|5|2|1|5|21|9999|5|22|24
RPL0_24 : B|23|5|2|1|3|7|23|9999|2|6|23|25
RPL0_25 : B|28|3|2|4|12|28|9999|8|24|26
RPL0_26 : B|26|4|2|2|10|26|9999|9|25|27
RPL0_27 : B|25|5|2|1|9|25|9999|10|26|28
RPL0_28 : B|27|5|2|1|3|11|27|9999|2|11|27|29
RPL0_29 : B|30|4|2|2|14|30|9999|4|28|30
RPL0_30 : B|29|5|2|1|13|29|9999|5|29|31
RPL0_31 : B|31|5|2|1|3|15|31|9999|2|6|30|32
RPL0_32 : B|32|0|1|32|9999|1
RPL0_33 : B|16|1|2|16|-16|9999|2|1
RPL0_34 : B|8|2|2|8|-8|9999|3|1
RPL0_35 : B|4|3|2|4|-4|9999|4|1
RPL0_36 : B|2|4|2|2|-2|9999|5|1
RPL1_0 : B|32|0|2|32|48|9999|32|31
RPL1_1 : B|16|1|2|-16|16|9999|1|33
RPL1_2 : B|8|2|2|-8|-24|9999|1|2
RPL1_3 : B|4|3|2|-4|-12|-28|9999|1|2|3
RPL1_4 : B|2|4|2|-2|-6|-14|-30|9999|1|2|3|4
RPL1_5 : B|1|5|2|-1|-3|-7|-15|-31|9999|1|2|3|4|5
RPL1_6 : B|3|5|2|-1|-5|-13|-29|9999|3|4|5|6
RPL1_7 : B|6|4|2|-2|-10|-26|9999|5|6|7
RPL1_8 : B|5|5|2|-1|-3|-11|-27|9999|1|6|7|8
RPL1_9 : B|7|5|2|-1|-9|-25|9999|7|8|9
RPL1_10 : B|12|3|2|-4|-20|9999|9|10
RPL1_11 : B|10|4|2|-2|-6|-22|9999|1|10|11
RPL1_12 : B|9|5|2|-1|-3|-7|-23|9999|1|2|11|12
RPL1_13 : B|11|5|2|-1|-5|-21|9999|3|12|13
RPL1_14 : B|14|4|2|-2|-18|9999|13|14
RPL1_15 : B|13|5|2|-1|-3|-19|9999|1|14|15
RPL1_16 : B|15|5|2|-1|-17|9999|15|16
RPL1_17 : B|24|2|2|-8|8|9999|17|16
RPL1_18 : B|20|3|2|-4|-12|9999|1|18
RPL1_19 : B|18|4|2|-2|-6|-14|9999|1|2|19
RPL1_20 : B|17|5|2|-1|-3|-7|-15|9999|1|2|3|20
RPL1_21 : B|19|5|2|-1|-5|-13|9999|3|4|21
RPL1_22 : B|22|4|2|-2|-10|9999|5|22
RPL1_23 : B|21|5|2|-1|-3|-11|9999|1|6|23
RPL1_24 : B|23|5|2|-1|-9|9999|7|24
RPL1_25 : B|28|3|2|-4|4|9999|25|8
RPL1_26 : B|26|4|2|-2|-6|9999|1|26
RPL1_27 : B|25|5|2|-1|-3|-7|9999|1|2|27
RPL1_28 : B|27|5|2|-1|-5|9999|3|28
RPL1_29 : B|30|4|2|-2|2|9999|29|4
RPL1_30 : B|29|5|2|-1|-3|9999|1|30
RPL1_31 : B|31|5|2|-1|1|9999|31|2
RPL1_32 : B|32|0|1|32|9999|1
RPL1_33 : B|16|1|2|-16|16|9999|1|2
RPL1_34 : B|8|2|2|-8|-24|9999|1|2
RPL1_35 : B|4|3|2|-4|-12|-28|9999|1|2|3
RPL1_36 : B|2|4|2|-2|-6|-14|-30|9999|1|2|3|4
我们来具体举例说明其含义,
#=========== reference picture management =================
#|Type POC temporal_id #ref_pics_active reference pictures
RPL0_0 : B|32|0|2|32|48|64|9999|32|31|33
RPL0_1 : B|16|1|2|16|32|9999|33|32
RPL0_2 : B|8|2|2|8|24|9999|34|33
RPL0_3 : B|4|3|2|4|20|9999|35|34
根据结构体的定义以及代码中给出的解析过程,可以知道:
"B|32|0|2|32|48|64|9999|32|31|33"这个字符串被赋值给op_rpl0[0]这个字符串了
RPL0_0 : B|32|0|2|32|48|64|9999|32|31|33
表示0号参考帧列表中的第0个帧(简称为当前帧f )的slice_type为B帧(双向参考),f的POC(显示顺序)为32,temporal_id为0,ref_pic_active_num(f有效的参考帧的数目)为2.
当前帧f的所有参考帧的索引(ref_pics)分别为32,48,64.
9999为一个分隔符。
当前帧f的所有参考帧的ddoi值(ref_pics_ddoi)分别为32,31,33.
理解
假设f的第j个参考帧为h,且其对应的ddoi值为x,就表明f和h的doi的差值为x