VVenC
VVenC 是一个开源的高效视频编码器,专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准,主要目的是提供比 HEVC 更高的压缩效率,同时保持或提高视频质量。H.266/VVC 可以在相同的视频质量下减少大约 50% 的比特率,或者在相同的比特率下提供更好的视频质量。
VVenC 特性
-
高压缩效率:
VVenC 实现了 H.266/VVC 标准,可以在相同的画质下提供比 H.265/HEVC 更高的压缩效率。对于流媒体、广播电视和视频存储等场景,VVenC 能显著降低带宽需求。
-
灵活性和扩展性:
VVenC 支持 H.266/VVC 标准的所有特性,包括可变帧率、可变分辨率等,适用于多种应用场景,如4K、8K视频编码。
-
开源与跨平台:
VVenC 是一个开源项目,允许开发者进行自由修改和分发,同时支持多个平台(Linux、Windows、macOS)。
-
编码速度与质量优化:
VVenC 提供了不同的编码速度设置,可以根据需要在速度和质量之间进行权衡,满足实时编码或高质量编码的需求。
VVenC 编译
- 源码下载:https://github.com/fraunhoferhhi/vvenc
- 编译:比较简单,按照 README中用 CMake 编译即可。
bash
mkdir build
cd build
cmake ..
make
- 编译后文件:
- bin/release-static:vvencFFapp、vvencapp、vvencinterfacetest、vvenclibtest
- include/vvenc:vvenc.h、vvencCfg.h、vvencDecl.h
- lib/release-static:libvvenc.a
编码工具使用
- vvencFFapp 使用:全特征的专家级编码器
bash
admin@bogon release-static % ./vvencFFapp
vvencFFapp: VVenC, the Fraunhofer H.266/VVC Encoder, version 1.12.0 [Mac OS X][clang 15.0.0][64 bit][SIMD=NEON]
#======== General Options ================
-h, --help [0] show default help
--fullhelp [0] show full help
-v, --Verbosity [verbose] verbosity level (0: silent, 1: error, 2: warning, 3: info, 4: notice, 5: verbose,
6: debug)
--stats [1] enable or disable printing of statistics (fps, bitrate, estimation of encoding
time)
--version [0] show version
#======== Input Options ================
-i, --InputFile [] Original YUV input file name or '-' for reading from stdin
-s, --Size [0x0] Input resolution (WidthxHeight)
--InputBitDepth [8] Bit-depth of input file
-f, --FramesToBeEncoded [0] Number of frames to be encoded (default=all)
-fr, --FrameRate [0] Temporal rate (framerate numerator) e.g. 25,30, 30000, 50,60, 60000
--FrameScale [1] Temporal scale (framerate denominator) e.g. 1, 1001
--fps [0/1] Framerate as int or fraction (num/denom)
--TicksPerSecond [27000000] Ticks Per Second for dts generation, (1..27000000, -1: ticks per frame=1)
--LeadFrames [0] Number of leading frames to be read before starting the encoding, use when
splitting the video into overlapping segments
--TrailFrames [0] Number of trailing frames to be read after frames to be encoded, use when splitting
the video into overlapping segments
-fs, --FrameSkip [0] number of frames to skip at start of input YUV [off]
--segment [off] when encoding multiple separate segments, specify segment position to enable segment concatenation (first, mid, last) [off]
first: first segment
mid : all segments between first and last segment
last : last segment
#======== Output options ================
-b, --BitstreamFile [] Bitstream output file name
-o, --ReconFile [] Reconstructed YUV output file name
--OutputBitDepth [0] Bit-depth of output file
#======== Threading, performance ================
-t, --Threads [0] number of threads (multithreading; -1: resolution < 720p: 4, < 5K 2880p: 8, >= 5K
2880p: 12 threads)
--MTProfile [off] set automatic multi-threading setting (-1: auto, 0: off, 1,2,3: on, enables tiles,
IFP and WPP automatically depending on the number of threads)
--preset [medium] select preset for specific encoding setting (faster, fast, medium, slow, slower,
medium_lowDecEnergy)
--Tiles [-1x-1] Set number of tile columns and rows
#======== Slice decision options ================
-ip, --IntraPeriod [0] Intra period in frames (0: use intra period in seconds (refreshsec), else:
n*gopsize)
-rs, --RefreshSec [1] Intra period/refresh in seconds
-dr, --DecodingRefreshType [cra] intra refresh type (idr, cra, cra_cre: CRA, constrained RASL picture encoding, none, rpsei: Recovery Point SEI,
idr_no_radl: IDR, without leading pictures, use for DASH)
-g, --GOPSize [32] GOP size of temporal structure (16,32)
--PicReordering [1] Allow reordering of pictures (0:off, 1:on), should be disabled for low delay
requirements
--POC0IDR [0] start encoding with POC 0 IDR
#======== Rate control, Perceptual Quantization ================
--NumPasses [-1] number of rate control passes (1,2)
--Passes [-1] number of rate control passes (1,2)
--Pass [-1] rate control pass for two-pass rate control (-1,1,2)
--LookAhead [-1] Enable pre-analysis pass with picture look-ahead (-1,0,1)
--RCStatsFile [] rate control statistics file
--TargetBitrate [0] Rate control: target bitrate [bits/second], use e.g. 1.5M, 1.5Mbps, 1500k,
1500kbps, 1500000bps, 1500000
--MaxBitrate [0] Rate control: approximate maximum instantaneous bitrate [bits/second] (0: no rate
cap; least constraint)
-qpa, --PerceptQPA [0] Enable perceptually motivated QP adaptation, XPSNR based (0:off, 1:on)
--STA [-1] Enable slice type adaptation at GOPSize>8 (-1: auto, 0: off, 1: adapt slice type,
2: adapt NAL unit type)
--MinIntraDistance [-1] With STA: set a minimum coded frame distance to the previous intra frame (-1:
GOPSize)
#======== Quantization parameters ================
-q, --QP [32] Qp value (0-63)
#======== Profile, Level, Tier ================
--Profile [auto] profile (auto, main_10, main_10_still_picture)
--Level [auto] level limit (auto, 1.0, 2.0,2.1, 3.0,3.1, 4.0,4.1, 5.0,5.1,5.2, 6.0,6.1,6.2,6.3,
15.5)
--Tier [main] tier for interpretation of level (main, high)
#======== VUI and SEI options ================
--Sdr [off] set SDR mode + BT.709, BT.2020, BT.470 color space. use: off, sdr|sdr_709,
sdr_2020, sdr_470bg
--Hdr [off] set HDR mode + BT.709 or BT.2020 color space (+SEI messages for hlg) If maxcll or
masteringdisplay is set, HDR10/PQ is enabled. use: off, pq|hdr10,
pq_2020|hdr10_2020, hlg, hlg_2020
- 编码命令:
./vvencFFapp -i Cactus_1920x1080_50.yuv --Size 1920x1080 -fr 15 --BitstreamFile out.h266
bash
admin@bogon release-static % ./vvencFFapp -i Cactus_1920x1080_50.yuv --Size 1920x1080 -fr 15 --BitstreamFile out.h266
vvencFFapp: VVenC, the Fraunhofer H.266/VVC Encoder, version 1.12.0 [Mac OS X][clang 15.0.0][64 bit][SIMD=NEON]
vvencFFapp [info]: started @ Mon Dec 30 15:52:52 2024
vvenc [verbose]: Input File : Cactus_1920x1080_50.yuv
vvenc [verbose]: Bitstream File : out.h266
vvenc [verbose]: Real Format : 1920x1080 yuv420p 15 Hz SDR 500 frames
vvenc [verbose]: Frames : encode 500 frames
vvenc [verbose]: Internal format : 1920x1080 15 Hz SDR
vvenc [verbose]: Threads : 0 (parallel frames: 0)
vvenc [verbose]: Rate control : QP 32
vvenc [verbose]: Perceptual optimization : Disabled
vvenc [verbose]: Intra period (keyframe) : 16
vvenc [verbose]: Decoding refresh type : CRA
vvenc [verbose]: Sequence PSNR output : Linear average only
vvenc [verbose]: Hexadecimal PSNR output : Disabled
vvenc [verbose]: Sequence MSE output : Disabled
vvenc [verbose]: Frame MSE output : Disabled
vvenc [verbose]: Cabac-zero-word-padding : Enabled
vvenc [verbose]: Frame index : all frames
vvenc [verbose]: Profile : main_10
vvenc [verbose]: Level : 3.1
vvenc [verbose]: CU size : 128
vvenc [verbose]: Max TB size : 64
vvenc [verbose]: Min CB size : 4
vvenc [verbose]: Motion search range : 384
vvenc [verbose]: QP : 32
vvenc [verbose]: Max dQP signaling subdiv : 0
vvenc [verbose]: Cb QP Offset (dual tree) : 0 (0)
vvenc [verbose]: Cr QP Offset (dual tree) : 0 (0)
vvenc [verbose]: GOP size : 32
vvenc [verbose]: PicReordering : 1
vvenc [verbose]: Input bit depth : (Y:8, C:8)
vvenc [verbose]: MSB-extended bit depth : (Y:8, C:8)
vvenc [verbose]: Internal bit depth : (Y:10, C:10)
vvenc [verbose]: cu_chroma_qp_offset_subdiv : -1
vvenc [verbose]: log2_sao_offset_scale_luma : 0
vvenc [verbose]: log2_sao_offset_scale_chroma : 0
vvenc [verbose]: Cost function : Lossy coding
vvenc [verbose]: Film grain analysis : 0
vvenc [verbose]: CODING TOOL CFG: CTU128 QTMin44BTT21 IBD:1 SAO:1 ALF:1 (NonLinLuma:0 NonLinChr:0) CCALF:1 Tiles:-1x-1 Slices:1 WPP:0 WPP-Substreams:1 TMVP:1 DQ:1 SDH:0 CST:1 BDOF:1 DMVR:1 MTSImplicit:1 SBT:0 JCbCr:1 CabacInitPresent:1 AMVR:5 SMVD:3 LMCS:2 (Signal:SDR Opt:0) CIIP:0 MIP:1 AFFINE:4 (PROF:1, Type:1) MMVD:3 DisFracMMVD:1 SbTMVP:1 GPM:3 LFNST:1 MTS:0 ISP:3 TS:2 TSLog2MaxSize:4 useChromaTS:0 BDPCM:2 IBC:2 BCW:0
vvenc [verbose]: ENC. ALG. CFG: QPA:0 HAD:1 RDQ:1 RDQTS:1 ASR:1 MinSearchWindow:96 EDO:2 MCTF:2 BIM:1
vvenc [verbose]: PRE-ANALYSIS CFG: STA:1 LeadFrames:0 TrailFrames:0
vvenc [verbose]: FAST TOOL CFG: ECU:0 FEN:3 FDM:1 FastSearch:4 (SCC:2) LCTUFast:1 FastMrg:2 PBIntraFast:1 AMaxBT:1 FastQtBtEnc:1 ContentBasedFastQtbt:1 FastMIP:3 FastIntraTools:1 IntraEstDecBit:2 FastLocalDualTree:1 IntegerET:0 FastSubPel:1 ReduceFilterME:2 QtbttExtraFast:3 FastTTSplit:5 IBCFastMethod:3 FIM:0 ALFSpeed:0 QuantThr:4 SelectiveRDQO:0
vvenc [verbose]: RATE CONTROL CFG: RateControl:0 QP:32 LookAhead:0 FirstPassMode:0
vvenc [verbose]: PARALLEL PROCESSING CFG: NumThreads:0 MaxParallelFrames:0 IFP:0 (IFPLines:0) WppBitEqual:0 WF:0
POC 15 TId: 0 (IDR_W_RADL, I-SLICE, QP 29, TF 2) 680504 bits [Y 36.7620 dB U 39.1978 dB V 42.0054 dB] [ET 14 ] [L0 ] [L1 ]
POC 7 TId: 2 ( RADL, B-SLICE, QP 34, TF 0) 115280 bits [Y 35.5292 dB U 38.5115 dB V 40.7113 dB] [ET 4 ] [L0 15 ] [L1 15 ]
POC 3 TId: 3 ( RADL, B-SLICE, QP 37) 41024 bits [Y 35.0316 dB U 38.4638 dB V 40.4562 dB] [ET 3 ] [L0 7 15 ] [L1 7 15 ]
POC 1 TId: 4 ( RADL, B-SLICE, QP 40) 28888 bits [Y 34.4404 dB U 38.4675 dB V 40.3796 dB] [ET 1 ] [L0 3 7 ] [L1 3 7 ]
POC 0 TId: 5 ( RADL, B-SLICE, QP 41) 14752 bits [Y 34.0539 dB U 38.3535 dB V 40.1910 dB] [ET 0 ] [L0 1 ] [L1 1 ]
POC 2 TId: 5 ( RADL, B-SLICE, QP 41) 4488 bits [Y 34.6672 dB U 38.4853 dB V 40.4677 dB] [ET 0 ] [L0 1 ] [L1 3 ]
POC 5 TId: 4 ( RADL, B-SLICE, QP 40) 9184 bits [Y 35.0381 dB U 38.4972 dB V 40.5848 dB] [ET 1 ] [L0 3 7 ] [L1 7 15 ]
POC 4 TId: 5 ( RADL, B-SLICE, QP 41) 3744 bits [Y 34.8863 dB U 38.4668 dB V 40.5362 dB] [ET 0 ] [L0 3 ] [L1 5 ]
POC 6 TId: 5 ( RADL, B-SLICE, QP 41) 2480 bits [Y 35.1109 dB U 38.4947 dB V 40.6200 dB] [ET 0 ] [L0 5 ] [L1 7 ]
POC 11 TId: 3 ( RADL, B-SLICE, QP 38) 32888 bits [Y 35.3560 dB U 38.7223 dB V 41.0028 dB] [ET 2 ] [L0 7 15 ] [L1 15 7 ]
POC 9 TId: 4 ( RADL, B-SLICE, QP 40) 11888 bits [Y 35.1461 dB U 38.6167 dB V 40.8196 dB] [ET 1 ] [L0 7 11 ] [L1 11 15 ]
POC 8 TId: 5 ( RADL, B-SLICE, QP 41) 3008 bits [Y 35.2190 dB U 38.5908 dB V 40.7640 dB] [ET 0 ] [L0 7 ] [L1 9 ]
POC 10 TId: 5 ( RADL, B-SLICE, QP 41) 4112 bits [Y 35.0811 dB U 38.6898 dB V 40.8922 dB] [ET 0 ] [L0 9 ] [L1 11 ]
POC 13 TId: 4 ( RADL, B-SLICE, QP 40) 14984 bits [Y 35.4017 dB U 38.8514 dB V 41.2206 dB] [ET 1 ] [L0 11 7 ] [L1 15 11 ]
POC 12 TId: 5 ( RADL, B-SLICE, QP 41) 4768 bits [Y 35.2061 dB U 38.7486 dB V 41.0721 dB] [ET 0 ] [L0 11 ] [L1 13 ]
vvenc [info]: stats: 3.0% frame= 15/500 fps= 0.4 avg_fps= 0.4 bitrate= 971.99 kbps avg_bitrate= 971.99 kbps elapsed= 00h:00m:40s left= 00h:21m:31s
.
.
.
vvenc [info]: stats summary: frame= 500/500 avg_fps= 0.4 avg_bitrate= 848.51 kbps
vvenc [info]: stats summary: frame I: 31, kbps: 9666.70, AvgQP: 28.52
vvenc [info]: stats summary: frame P: 0, kbps: nan, AvgQP: nan
vvenc [info]: stats summary: frame B: 469, kbps: 265.64, AvgQP: 39.93
vvenc [info]: Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR
vvenc [info]: 500 a 848.5082 35.6287 39.0437 41.5993 36.6601
vvencFFapp [info]: finished @ Mon Dec 30 16:12:41 2024
vvencFFapp [info]: Total Time: 1174.888 sec. [user] 1188.995 sec. [elapsed]
- 加速编码命令(增加了线程、preset、MTPfrofile):
./vvencFFapp -i Cactus_1920x1080_50.yuv --Size 1920x1080 -fr 15 --Threads 4 --preset faster --MTProfile -1 --BitstreamFile out.h266
- 编码数据汇总:
- vvencapp 使用:基础编码器
bash
admin@bogon release-static % ./vvencFFapp
vvencFFapp: VVenC, the Fraunhofer H.266/VVC Encoder, version 1.12.0 [Mac OS X][clang 15.0.0][64 bit][SIMD=NEON]
#======== General Options ================
-h, --help [0] show default help
--fullhelp [0] show full help
-v, --Verbosity [verbose] verbosity level (0: silent, 1: error, 2: warning, 3: info, 4: notice, 5: verbose,
6: debug)
--stats [1] enable or disable printing of statistics (fps, bitrate, estimation of encoding
time)
--version [0] show version
#======== Input Options ================
-i, --InputFile [] Original YUV input file name or '-' for reading from stdin
-s, --Size [0x0] Input resolution (WidthxHeight)
--InputBitDepth [8] Bit-depth of input file
-f, --FramesToBeEncoded [0] Number of frames to be encoded (default=all)
-fr, --FrameRate [0] Temporal rate (framerate numerator) e.g. 25,30, 30000, 50,60, 60000
--FrameScale [1] Temporal scale (framerate denominator) e.g. 1, 1001
--fps [0/1] Framerate as int or fraction (num/denom)
--TicksPerSecond [27000000] Ticks Per Second for dts generation, (1..27000000, -1: ticks per frame=1)
--LeadFrames [0] Number of leading frames to be read before starting the encoding, use when
splitting the video into overlapping segments
--TrailFrames [0] Number of trailing frames to be read after frames to be encoded, use when splitting
the video into overlapping segments
-fs, --FrameSkip [0] number of frames to skip at start of input YUV [off]
--segment [off] when encoding multiple separate segments, specify segment position to enable segment concatenation (first, mid, last) [off]
first: first segment
mid : all segments between first and last segment
last : last segment
#======== Output options ================
-b, --BitstreamFile [] Bitstream output file name
-o, --ReconFile [] Reconstructed YUV output file name
--OutputBitDepth [0] Bit-depth of output file
#======== Threading, performance ================
-t, --Threads [0] number of threads (multithreading; -1: resolution < 720p: 4, < 5K 2880p: 8, >= 5K
2880p: 12 threads)
--MTProfile [off] set automatic multi-threading setting (-1: auto, 0: off, 1,2,3: on, enables tiles,
IFP and WPP automatically depending on the number of threads)
--preset [medium] select preset for specific encoding setting (faster, fast, medium, slow, slower,
medium_lowDecEnergy)
--Tiles [-1x-1] Set number of tile columns and rows
#======== Slice decision options ================
-ip, --IntraPeriod [0] Intra period in frames (0: use intra period in seconds (refreshsec), else:
n*gopsize)
-rs, --RefreshSec [1] Intra period/refresh in seconds
-dr, --DecodingRefreshType [cra] intra refresh type (idr, cra, cra_cre: CRA, constrained RASL picture encoding, none, rpsei: Recovery Point SEI,
idr_no_radl: IDR, without leading pictures, use for DASH)
-g, --GOPSize [32] GOP size of temporal structure (16,32)
--PicReordering [1] Allow reordering of pictures (0:off, 1:on), should be disabled for low delay
requirements
--POC0IDR [0] start encoding with POC 0 IDR
#======== Rate control, Perceptual Quantization ================
--NumPasses [-1] number of rate control passes (1,2)
--Passes [-1] number of rate control passes (1,2)
--Pass [-1] rate control pass for two-pass rate control (-1,1,2)
--LookAhead [-1] Enable pre-analysis pass with picture look-ahead (-1,0,1)
--RCStatsFile [] rate control statistics file
--TargetBitrate [0] Rate control: target bitrate [bits/second], use e.g. 1.5M, 1.5Mbps, 1500k,
1500kbps, 1500000bps, 1500000
--MaxBitrate [0] Rate control: approximate maximum instantaneous bitrate [bits/second] (0: no rate
cap; least constraint)
-qpa, --PerceptQPA [0] Enable perceptually motivated QP adaptation, XPSNR based (0:off, 1:on)
--STA [-1] Enable slice type adaptation at GOPSize>8 (-1: auto, 0: off, 1: adapt slice type,
2: adapt NAL unit type)
--MinIntraDistance [-1] With STA: set a minimum coded frame distance to the previous intra frame (-1:
GOPSize)
#======== Quantization parameters ================
-q, --QP [32] Qp value (0-63)
#======== Profile, Level, Tier ================
--Profile [auto] profile (auto, main_10, main_10_still_picture)
--Level [auto] level limit (auto, 1.0, 2.0,2.1, 3.0,3.1, 4.0,4.1, 5.0,5.1,5.2, 6.0,6.1,6.2,6.3,
15.5)
--Tier [main] tier for interpretation of level (main, high)
#======== VUI and SEI options ================
--Sdr [off] set SDR mode + BT.709, BT.2020, BT.470 color space. use: off, sdr|sdr_709,
sdr_2020, sdr_470bg
--Hdr [off] set HDR mode + BT.709 or BT.2020 color space (+SEI messages for hlg) If maxcll or
masteringdisplay is set, HDR10/PQ is enabled. use: off, pq|hdr10,
pq_2020|hdr10_2020, hlg, hlg_2020
admin@bogon release-static % ./vvencapp
vvencapp: VVenC, the Fraunhofer H.266/VVC Encoder, version 1.12.0 [Mac OS X][clang 15.0.0][64 bit][SIMD=NEON]
#======== General Options ================
-h, --help [0] show default help
--fullhelp [0] show full help
-v, --verbosity [info] verbosity level (0: silent, 1: error, 2: warning, 3: info, 4: notice, 5: verbose, 6:
debug)
--stats [1] enable or disable printing of statistics (fps, bitrate, estimation of encoding time)
--version [0] show version
#======== Input Options ================
-i, --input [] original YUV input file name or '-' for reading from stdin
-s, --size [1920x1080] specify input resolution (WidthxHeight)
-c, --format [yuv420] set input format (yuv420, yuv420_10, yuv420_10_packed, yuv400 (gray), yuv400_10
(gray10)
-r, --framerate [60] temporal rate (framerate numerator) e.g. 25,30, 30000, 50,60, 60000
--framescale [1] temporal scale (framerate denominator) e.g. 1, 1001
--fps [60/1] framerate as int or fraction (num/denom)
--tickspersec [27000000] ticks per second for dts generation, (1..27000000, -1: ticks per frame=1)
-f, --frames [0] max. frames to encode [all]
-fs, --frameskip [0] number of frames to skip at start of input YUV [off]
--segment [off] when encoding multiple separate segments, specify segment position to enable segment concatenation (first, mid, last) [off]
first: first segment
mid : all segments between first and last segment
last : last segment
#======== Output Options ================
-o, --output [] bitstream output file name
#======== Encoder Options ================
--preset [medium] preset for detailed parameter configuration (faster, fast, medium, slow, slower,
medium_lowDecEnergy)
-b, --bitrate [0] bitrate for rate control (0: constant-QP encoding without rate control; otherwise
bits/second; use e.g. 1.5M, 1.5Mbps, 1500k, 1500kbps, 1500000bps, 1500000)
-m, --maxrate [0] approximate maximum instantaneous bitrate for constrained VBR in rate control (0:
no rate cap; use e.g. 3.5M, 3.5Mbps, 3500k, 3500kbps, 3500000bps, 3500000), use
suffix 'x' to specify as a multiple of target bitrate
-p, --passes [-1] number of encoding passes with rate control (1: single-pass, -1, 2: two-pass RC)
--pass [-1] rate control pass for two-pass rate control (-1: both, 1: first, 2: second pass)
--rcstatsfile [] rate control statistics file name
-q, --qp [-1] quantization parameter, QP (0, 1, .. 63)
--qpa [on] enable perceptually motivated QP adaptation based on XPSNR model (0: off, 1: on)
-t, --threads [-1] number of threads (multithreading; -1: resolution < 720p: 4, < 5K 2880p: 8, >= 5K
2880p: 12 threads)
--mtprofile [auto] set automatic multi-threading setting (-1: auto, 0: off, 1,2,3: on, enables tiles,
IFP and WPP automatically depending on the number of threads)
--ifp [auto] inter-frame parallelization(IFP) (-1: auto, 0: off, 1: on, with sync. offset of two
CTU lines)
-rt, --refreshtype [cra] intra refresh type (idr, cra, cra_cre: CRA, constrained RASL picture encoding, none, rpsei: Recovery Point SEI,
idr_no_radl: IDR, without leading pictures, use for DASH)
-rs, --refreshsec [1] intra period/refresh in seconds
-ip, --intraperiod [0] intra period in frames (0: specify intra period in seconds instead, see -refreshsec)
--tiles [-1x-1] number of tile columns and rows
#======== Profile, Level, Tier ================
--profile [auto] profile (auto, main_10, main_10_still_picture)
--level [auto] level limit (auto, 1.0, 2.0,2.1, 3.0,3.1, 4.0,4.1, 5.0,5.1,5.2, 6.0,6.1,6.2,6.3,
15.5)
--tier [main] tier for interpretation of level (main, high)
#======== HDR/SDR and Color Options ================
--sdr [off] set SDR mode + BT.709, BT.2020, BT.470 color space. use: off, sdr|sdr_709, sdr_2020,
sdr_470bg
--hdr [off] set HDR mode + BT.709 or BT.2020 color space (+ SEI messages for hlg) use: off,
pq|hdr10, pq_2020|hdr10_2020, hlg, hlg_2020
- 编码命令:
./vvencapp -i Cactus_1920x1080_50.yuv --Size 1920x1080 -r 15 --threads 4 --preset faster --output out.h266
bash
admin@bogon release-static % ./vvencapp -i Cactus_1920x1080_50.yuv --Size 1920x1080 -r 15 --threads 4 --preset faster --output out.h266
vvencapp: VVenC, the Fraunhofer H.266/VVC Encoder, version 1.12.0 [Mac OS X][clang 15.0.0][64 bit][SIMD=NEON]
vvenc [info]: Input File : Cactus_1920x1080_50.yuv
vvenc [info]: Bitstream File : out.h266
vvenc [info]: Real Format : 1920x1080 yuv420p 15 Hz SDR 500 frames
vvenc [info]: Frames : encode 500 frames
vvenc [info]: Internal format : 1920x1080 15 Hz SDR
vvenc [info]: Threads : 4 (parallel frames: 4)
vvenc [info]: Rate control : QP 32
vvenc [info]: Perceptual optimization : Enabled
vvenc [info]: Intra period (keyframe) : 16
vvenc [info]: Decoding refresh type : CRA
vvenc [info]: stats: 100.0% frame= 500/500 fps= 14.0 avg_fps= 14.0 bitrate= 921.63 kbps avg_bitrate= 921.63 kbps elapsed= 00h:00m:36s left= 00h:00m:00s
vvenc [info]: stats summary: frame= 500/500 avg_fps= 14.0 avg_bitrate= 921.63 kbps
vvenc [info]: stats summary: frame I: 31, kbps: 10668.23, AvgQP: 27.45
vvenc [info]: stats summary: frame P: 0, kbps: nan, AvgQP: nan
vvenc [info]: stats summary: frame B: 469, kbps: 277.40, AvgQP: 39.00
vvenc [info]: Total Frames | Bitrate Y-PSNR U-PSNR V-PSNR YUV-PSNR
vvenc [info]: 500 a 921.6324 34.7893 38.8460 41.1811 35.8816
vvencapp [info]: Total Time: 35.827 sec. Fps(avg): 13.956 encoded Frames 500
- 编码数据汇总:
- vvencinterfacetest:测试 vvenc 接口,无异常则返回空信息
bash
admin@bogon release-static % ./vvencinterfacetest
- vvenclibtest:测试 vvenc 库,无异常则返回"all of 174 tests succeeded% "
bash
admin@bogon release-static % ./vvenclibtest
all of 174 tests succeeded%
一些疑问
- 用 vvencapp 和vvenFFcapp 工具编码出来都没有 P 帧,分析命令行参数说明也没发现 P 帧的设置,用 elecard 工具分析,码流中 B 帧只有单向参考,并没有双向参考,细节和原理还需要进一步分析源码。