可扩展的 HEVC 编码:如何设置 cfg 文件以实现质量可扩展性?

Scalable HEVC encoding: How to setup cfg files for quality scalability?

我下载了 SHM12.3 并开始了可伸缩编码。

这是我在终端中使用的脚本:

/TAppEncoderStatic -c cfg/encoder_scalable_journal_B2.cfg -c cfg/per-sequence-svc/C_L-SNR.cfg -c cfg/layers_journal.cfg -b C_L_SSIM_B2.bin -o0 rec/C_L_B2_l0_rec.yuv -o1 rec/C_L_B2_l1_rec.yuv >> results_B2_26_06_2017.txt

这是软件描述中给出的示例脚本。

我需要对具有不同视频质量或具有不同比特率的视频执行可伸缩编码。

谁能帮我编辑配置文件以支持质量可扩展性?

提前致谢!

我找到了解决方案。第一个配置文件是ncoder_scalable_journal_B2.cfg

我的设置包括 3 层以实现 SNR 可扩展性。

#======== File I/O =====================
BitstreamFile                 : str.bin
#ReconFile                     : rec.yuv

#======== Profile ================
NumProfileTierLevel           : 3
Profile0                      : main                # Profile for BL (NOTE01: this profile applies to whole layers but only BL is outputted)
                                                    #                (NOTE02: this profile has no effect when NonHEVCBase is set to 1)
Profile1                      : main                # Profile for BL (NOTE01: this profile applies to HEVC BL only)
                                                    #                (NOTE02: When NonHEVCBase is set to 1, this profile & associated level should be updated appropriately)
Profile2                      : scalable-main       # Scalable profile

#======== Unit definition ================
#MaxCUWidth                    : 64          # Maximum coding unit width in pixel
#MaxCUHeight                   : 64          # Maximum coding unit height in pixel
#MaxPartitionDepth             : 16           # Maximum coding unit depth
#QuadtreeTULog2MaxSize         : 5           # Log2 of maximum transform size for
                                            # quadtree-based TU coding (2...6)
#QuadtreeTULog2MinSize         : 2           # Log2 of minimum transform size for
                                            # quadtree-based TU coding (2...6)
#QuadtreeTUMaxDepthInter       : 3
#QuadtreeTUMaxDepthIntra       : 3

#======== Coding Structure =============
MaxNumMergeCand                : 2
#IntraPeriod                   : 4          # Period of I-Frame ( -1 = only first)
DecodingRefreshType           : 2           # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize                       : 6         # GOP Size (number of B slice = GOPSize-1)
#        Type POC QPoffset CbQPoffset CrQPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2 temporal_id #ref_pics_active #ref_pics reference pictures     predict deltaRPS #ref_idcs reference idcs 
Frame1:  B    1   2        0          0          0.4624    0            0               0           1                1         -1                    0      
Frame2:  B    2   1        0          0          0.4624    0            0               0           1                1         -2                    2     1      
Frame3:  P    3   0        0          0          0.4624    0            0               0           1                1         -3                    2     2 
Frame4:  B    4   2        0          0          0.4624    0            0               0           1                1         -1                    2     2           
Frame5:  B    5   1        0          0          0.4624    0            0               0           1                1         -2                    2     3            
Frame6:  P    6   0        0          0          0.4624    0            0               0           1                1         -3                    2     3      




#=========== Motion Search =============
FastSearch                    : 1           # 0:Full search  1:TZ search
SearchRange                   : 25         # (0: Search range is a Full frame)
BipredSearchRange             : 4           # Search range for bi-prediction refinement
HadamardME                    : 1           # Use of hadamard measure for fractional ME
FEN                           : 1           # Fast encoder decision
FDM                           : 1           # Fast Decision for Merge RD cost

#======== Quantization =============
#QP                            : 32          # Quantization parameter(0-51)
MaxDeltaQP                    : 0           # CU-based multi-QP optimization
#MaxCuDQPDepth                 : 0           # Max depth of a minimum CuDQP for sub-LCU-level delta QP
DeltaQpRD                     : 0           # Slice-based multi-QP optimization
RDOQ                          : 1           # RDOQ
RDOQTS                        : 1           # RDOQ for transform skip
SliceChromaQPOffsetPeriodicity: 0           # Used in conjunction with Slice Cb/Cr QpOffsetIntraOrPeriodic. Use 0 (default) to disable periodic nature.
SliceCbQpOffsetIntraOrPeriodic: 0           # Chroma Cb QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.
SliceCrQpOffsetIntraOrPeriodic: 0           # Chroma Cr QP Offset at slice level for I slice or for periodic inter slices as defined by SliceChromaQPOffsetPeriodicity. Replaces offset in the GOP table.

#=========== Deblock Filter ============
#DeblockingFilterControlPresent: 0           # Dbl control params present (0=not present, 1=present)
LoopFilterOffsetInPPS         : 0           # Dbl params: 0=varying params in SliceHeader, param = base_param + GOP_offset_param; 1=constant params in PPS, param = base_param)
LoopFilterDisable             : 0           # Disable deblocking filter (0=Filter, 1=No Filter)
LoopFilterBetaOffset_div2     : 0           # base_param: -6 ~ 6
LoopFilterTcOffset_div2       : 0           # base_param: -6 ~ 6
DeblockingFilterMetric        : 0           # blockiness metric (automatically configures deblocking parameters in bitstream)


#=========== Misc. ============
#InternalBitDepth             : 8           # codec operating bit-depth

#=========== Coding Tools =================
#SAO                           : 0           # Sample adaptive offset  (0: OFF, 1: ON)
AMP                           : 0           # Asymmetric motion partitions (0: OFF, 1: ON)
TransformSkip                 : 0           # Transform skipping (0: OFF, 1: ON)
TransformSkipFast             : 0           # Fast Transform skipping (0: OFF, 1: ON)
SAOLcuBoundary                : 0           # SAOLcuBoundary using non-deblocked pixels (0: OFF, 1: ON)

#============ Slices ================
SliceMode                : 0                # 0: Disable all slice options.
                                            # 1: Enforce maximum number of LCU in an slice,
                                            # 2: Enforce maximum number of bytes in an 'slice'
                                            # 3: Enforce maximum number of tiles in a slice
SliceArgument            : 1500             # Argument for 'SliceMode'.
                                            # If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
                                            # If SliceMode==2 it represents max. bytes per slice.
                                            # If SliceMode==3 it represents max. tiles per slice.

LFCrossSliceBoundaryFlag : 1                # In-loop filtering, including ALF and DB, is across or not across slice boundary.
                                            # 0:not across, 1: across

#============ PCM ================
PCMEnabledFlag                      : 0                # 0: No PCM mode
PCMLog2MaxSize                      : 5                # Log2 of maximum PCM block size.
PCMLog2MinSize                      : 3                # Log2 of minimum PCM block size.
PCMInputBitDepthFlag                : 1                # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag                : 0                # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.

#============ Tiles ================
TileUniformSpacing                  : 0                # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
                                                       # 1: the column and row boundaries are distributed uniformly
NumTileColumnsMinus1                : 0                # Number of tile columns in a picture minus 1
TileColumnWidthArray                : 2 3              # Array containing tile column width values in units of CTU (from left to right in picture)   
NumTileRowsMinus1                   : 0                # Number of tile rows in a picture minus 1
TileRowHeightArray                  : 2                # Array containing tile row height values in units of CTU (from top to bottom in picture)

LFCrossTileBoundaryFlag             : 1                # In-loop filtering is across or not across tile boundary.
                                                       # 0:not across, 1: across 

#============ WaveFront ================
#WaveFrontSynchro                    : 0                # 0:  No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
                                                       # >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.

#=========== Quantization Matrix =================
#ScalingList                   : 0                      # ScalingList 0 : off, 1 : default, 2 : file read
#ScalingListFile               : scaling_list.txt       # Scaling List file name. If file is not exist, use Default Matrix.

#============ Lossless ================
#TransquantBypassEnableFlag : 0                         # Value of PPS flag.
#CUTransquantBypassFlagForce: 0                         # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled

#============ Rate Control ======================
#RateControl                         : 0                # Rate control: enable rate control
#TargetBitrate                       : 1000000          # Rate control: target bitrate, in bps
#KeepHierarchicalBit                 : 2                # Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
#LCULevelRateControl                 : 1                # Rate control: 1: LCU level RC; 0: picture level RC
#RCLCUSeparateModel                  : 1                # Rate control: use LCU level separate R-lambda model
#InitialQP                           : 0                # Rate control: initial QP
#RCForceIntraQP                      : 0                # Rate control: force intra QP to be equal to initial QP

### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###

第二个配置文件是C_L-SNR.cfg

FrameSkip                     : 0           # Number of frames to be skipped in input
FramesToBeEncoded             : 480         # Number of frames to be coded

Level0                        : 3           # Level of the whole bitstream
Level1                        : 3           # Level of the base layer
Level2                        : 3           # Level of the enhancement layer
Level3                        : 3           # Level of the enhancement layer

#======== File I/O ===============
InputFile0                    : C_L_560x448_40.yuv
FrameRate0                    : 40          # Frame Rate per second
InputBitDepth0                : 8           # Input bitdepth for layer 0
SourceWidth0                  : 560        # Input  frame width
SourceHeight0                 : 448         # Input  frame height
RepFormatIdx0                 : 0           # Index of corresponding rep_format() in the VPS
IntraPeriod0                  : 96          # Period of I-Frame ( -1 = only first)
ConformanceMode0              : 1           # conformance mode
QP0                           : 31
LayerPTLIndex0                : 1

InputFile1                    : C_L_560x448_40.yuv
FrameRate1                    : 40          # Frame Rate per second
InputBitDepth1                : 8           # Input bitdepth for layer 1
SourceWidth1                  : 560        # Input  frame width
SourceHeight1                 : 448        # Input  frame height
RepFormatIdx1                 : 1           # Index of corresponding rep_format() in the VPS
IntraPeriod1                  : 96         # Period of I-Frame ( -1 = only first)
ConformanceMode1              : 1           # conformance mode
QP1                           : 26
LayerPTLIndex1                : 2

InputFile2                    : C_L_560x448_40.yuv
FrameRate2                    : 40          # Frame Rate per second
InputBitDepth2                : 8           # Input bitdepth for layer 1
SourceWidth2                  : 560        # Input  frame width
SourceHeight2                 : 448        # Input  frame height
RepFormatIdx2                 : 2          # Index of corresponding rep_format() in the VPS
IntraPeriod2                  : 96         # Period of I-Frame ( -1 = only first)
ConformanceMode2              : 1           # conformance mode
QP2                           : 23
LayerPTLIndex2                : 3

最后的配置文件是layers_journal.cfg

NumLayers                     : 3
NonHEVCBase                   : 0
ScalabilityMask1              : 0           # Multiview
ScalabilityMask2              : 1           # Scalable
ScalabilityMask3              : 0           # Auxiliary pictures
AdaptiveResolutionChange      : 0           # Resolution change frame (0: disable)
SkipPictureAtArcSwitch        : 0           # Code higher layer picture as skip at ARC switching (0: disable (default), 1: enable)
MaxTidRefPresentFlag          : 1           # max_tid_ref_present_flag (0=not present, 1=present(default))
CrossLayerPictureTypeAlignFlag: 1           # Picture type alignment across layers
CrossLayerIrapAlignFlag       : 1           # Align IRAP across layers
SEIDecodedPictureHash         : 1

#============= LAYER 0 ==================
#QP0                           : 22
MaxTidIlRefPicsPlus10         : 7           # max_tid_il_ref_pics_plus1 for layer0
#============ Rate Control ==============
RateControl0                  : 0           # Rate control: enable rate control for layer 0
TargetBitrate0                : 1000000     # Rate control: target bitrate for layer 0, in bps
KeepHierarchicalBit0          : 1           # Rate control: keep hierarchical bit allocation for layer 0 in rate control algorithm
LCULevelRateControl0          : 1           # Rate control: 1: LCU level RC for layer 0; 0: picture level RC for layer 0
RCLCUSeparateModel0           : 1           # Rate control: use LCU level separate R-lambda model for layer 0
InitialQP0                    : 0           # Rate control: initial QP for layer 0
RCForceIntraQP0               : 0           # Rate control: force intra QP to be equal to initial QP for layer 0

#============ WaveFront ================
WaveFrontSynchro0             : 0           # 0:  No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
                                            # >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList0                  : 0                      # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile0              : scaling_list0.txt      # Scaling List file name. If file is not exist, use Default Matrix.

#============= LAYER 1 ==================
#QP1                           : 20
NumSamplePredRefLayers1       : 1           # number of sample pred reference layers
SamplePredRefLayerIds1        : 0           # reference layer id
NumMotionPredRefLayers1       : 1           # number of motion pred reference layers
MotionPredRefLayerIds1        : 0           # reference layer id
NumActiveRefLayers1           : 1           # number of active reference layers
PredLayerIds1                 : 0           # inter-layer prediction layer index within available reference layers

#============ Rate Control ==============
RateControl1                  : 0           # Rate control: enable rate control for layer 1
TargetBitrate1                : 1000000     # Rate control: target bitrate for layer 1, in bps
KeepHierarchicalBit1          : 1           # Rate control: keep hierarchical bit allocation for layer 1 in rate control algorithm
LCULevelRateControl1          : 1           # Rate control: 1: LCU level RC for layer 1; 0: picture level RC for layer 1
RCLCUSeparateModel1           : 1           # Rate control: use LCU level separate R-lambda model for layer 1
InitialQP1                    : 0           # Rate control: initial QP for layer 1
RCForceIntraQP1               : 0           # Rate control: force intra QP to be equal to initial QP for layer 1

#============ WaveFront ================
WaveFrontSynchro1             : 0           # 0:  No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
                                            # >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList1                  : 0                      # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile1              : scaling_list1.txt      # Scaling List file name. If file is not exist, use Default Matrix.


#============= LAYER 2 ==================
#QP1                           : 20
NumSamplePredRefLayers2       : 1           # number of sample pred reference layers
SamplePredRefLayerIds2        : 0           # reference layer id
NumMotionPredRefLayers2       : 1           # number of motion pred reference layers
MotionPredRefLayerIds2        : 0           # reference layer id
NumActiveRefLayers2           : 1           # number of active reference layers
PredLayerIds2                 : 0           # inter-layer prediction layer index within available reference layers

#============ Rate Control ==============
RateControl2                  : 0           # Rate control: enable rate control for layer 1
TargetBitrate2                : 1000000     # Rate control: target bitrate for layer 1, in bps
KeepHierarchicalBit2          : 1           # Rate control: keep hierarchical bit allocation for layer 1 in rate control algorithm
LCULevelRateControl2          : 1           # Rate control: 1: LCU level RC for layer 1; 0: picture level RC for layer 1
RCLCUSeparateModel2           : 1           # Rate control: use LCU level separate R-lambda model for layer 1
InitialQP2                    : 0           # Rate control: initial QP for layer 1
RCForceIntraQP2               : 0           # Rate control: force intra QP to be equal to initial QP for layer 1

#============ WaveFront ================
WaveFrontSynchro2             : 0           # 0:  No WaveFront synchronisation (WaveFrontSubstreams must be 1 in this case).
                                            # >0: WaveFront synchronises with the LCU above and to the right by this many LCUs.
#=========== Quantization Matrix =================
ScalingList2                  : 0                      # ScalingList 0 : off, 1 : default, 2 : file read
ScalingListFile2              : scaling_list1.txt      # Scaling List file name. If file is not exist, use Default Matrix.


NumLayerSets                  : 3           # Include default layer set, value of 0 not allowed
NumLayerInIdList1             : 2           # 0-th layer set is default, need not specify LayerSetLayerIdList0 or NumLayerInIdList0
LayerSetLayerIdList1          : 0 1
NumLayerInIdList2             : 3           # 0-th layer set is default, need not specify LayerSetLayerIdList0 or NumLayerInIdList0
LayerSetLayerIdList2          : 0 1 2

NumAddLayerSets                      : 0
NumOutputLayerSets                   : 3           # Include defualt OLS, value of 0 not allowed
DefaultTargetOutputLayerIdc          : 2
NumOutputLayersInOutputLayerSet      : 1 1         # The number of layers in the 0-th OLS should not be specified, 
# ListOfOutputLayers0 need not be specified
ListOfOutputLayers1                  : 1
ListOfProfileTierLevelOls1           : 1 2
ListOfOutputLayers2                  : 2
ListOfProfileTierLevelOls2           : 1 2 2