Масштабируемое кодирование HEVC: как настроить файлы cfg для качественной масштабируемости?

Я скачал 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

Это пример сценария, приведенный в описании программного обеспечения.

Мне нужно выполнить масштабируемое кодирование, имея видео с разным качеством видео или видео с разным битрейтом.

Может ли кто-нибудь помочь мне отредактировать файлы конфигурации для поддержки масштабируемости качества?

Заранее спасибо!


person zinon    schedule 26.05.2017    source источник


Ответы (1)


Я нашел решение. Первый файл конфигурации — 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
person zinon    schedule 26.06.2017