文章目录
一实验要求
二实验步骤
(1)获得264文件
(2)将两个264文件进行解码,得到相应的YUV文件
用记事本打开bin目录下的decoder.cfg文件,修改为以下内容
将生成的264文件放到bin目录下,在命令行中打开bin目录,运行命令 ldecod.exe -d decoder.cfg
得到生成的yuv文件
(3)将上诉两个视频序列编码为264文件
1.固定码率,以不同的GOP长度及形状编码
修改bin目录下的encoder.cfg
# Files
##########################################################################################
InputFile = "demo.yuv" # Input sequence
InputHeaderLength = 0 # If the inputfile has a header, state it's length in byte here
StartFrame = 0 # Start frame for encoding. (0-N)
FramesToBeEncoded = 30 # Number of frames to be coded
FrameRate = 30.0 # Frame Rate per second (0.1-100.0)
Enable32Pulldown = 0 # Enable 'hard' 3:2 pulldown (modifying the inpur data)
# 0 = disabled
# 1 = A, B, Bt|Cb, Ct|Db, D
# 2 = A, B, C, Ct|Db, D
SEIVUI32Pulldown = 0 # Enable 3:2 pulldown through VUI and SEI metadata signaling. Five methods are supported:
# 0 = disabled
# 1 = A, Bt|Bb, Bt|Cb, Ct|Cb, D
# 2 = A, B, C, C, D
# 3 = At|Ab, Bt|Bb, Bt|Cb, Ct|Cb, Dt|Db
# 4 = A, Bt|Bb, Bt|Cb, Ct|Db, Dt|Db
# 5 = At|Ab, Bt|Bb, Bt|Cb, Ct|Db, Dt|Db
SourceWidth = 864 # Source frame width
SourceHeight = 480 # Source frame height
SourceResize = 0 # Resize source size for output
OutputWidth = 864 # Output frame width
OutputHeight = 480 # Output frame height
ProcessInput = 0 # Filter Input Sequence
Interleaved = 0 # 0: Planar input, 1: Packed input
PixelFormat = 0 # Pixel Format for 422 packed inputs
# 0: UYVY
# 1: YUY2/YUYV
# 2: YVYU
# 3: BGR (Unsupported)
# 4: V210 (Video Clarity)
StandardRange = 0 # 0: Standard range 1: Full range (RGB input)
VideoCode = 1 # Video codes for RGB ==> YUV conversions
# 0 = NULL,
# 1 = ITU_REC709,
# 2 = CCIR_601,
# 3 = FCC,
# 4 = ITU_REC624BG,
# 5 = SMPTE_170M,
# 6 = SMPTE_240M,
# 7 = SMPTE_260M,
# 8 = ITU_REC709_EXACT
TraceFile = "demo.txt" # Trace file
ReconFile = "demo_rec.yuv" # Reconstruction YUV file
OutputFile = "demo_1.264" # Bitstream
StatsFile = "stats.dat" # Coding statistics file
NumberOfViews = 1 # Number of views to encode (1=1 view, 2=2 views)
View1ConfigFile = "encoder_view1.cfg" # Config file name for second view
# Encoder Control
##########################################################################################
Grayscale = 0 # Encode in grayscale (Currently only works for 8 bit YUV 420 input)
ProfileIDC = 100 # Profile IDC (66=baseline, 77=main, 88=extended; FREXT Profiles: 100=High, 110=High 10, 122=High 4:2:2, 244=High 4:4:4, 44=CAVLC 4:4:4 Intra, 118=Multiview High Profile, 128=Stereo High Profile)
IntraProfile = 0 # Activate Intra Profile for FRExt (0: false, 1: true)
# (e.g. ProfileIDC=110, IntraProfile=1 => High 10 Intra Profile)
LevelIDC = 40 # Level IDC (e.g. 20 = level 2.0)
IntraPeriod = 15 # Period of I-pictures (0=only first)
IDRPeriod = 0 # Period of IDR pictures (0=only first)
AdaptiveIntraPeriod = 1 # Adaptive intra period
AdaptiveIDRPeriod = 0 # Adaptive IDR period
IntraDelay = 0 # Intra (IDR) picture delay (i.e. coding structure of PPIPPP... )
EnableIDRGOP = 0 # Support for IDR closed GOPs (0: disabled, 1: enabled)
EnableOpenGOP = 1 # Support for open GOPs (0: disabled, 1: enabled)
QPISlice = 28 # Quant. param for I Slices (0-51)
QPPSlice = 28 # Quant. param for P Slices (0-51)
FrameSkip = 2 # Number of frames to be skipped in input (e.g 2 will code every third frame).
# Note that this now excludes intermediate (i.e. B) coded picture
# B Slices
##########################################################################################
NumberBFrames = 2 # Number of B coded frames inserted (0=not used)
PReplaceBSlice = 0 # Replace B-coded slices with P-coded slices when NumberBFrames>0
QPBSlice = 30 # Quant. param for B slices (0-51)
BRefPicQPOffset = -1 # Quantization offset for reference B coded pictures (-51..51)
DirectModeType = 1 # Direct Mode Type (0:Temporal 1:Spatial)
DirectInferenceFlag = 1 # Direct Inference Flag (0: Disable 1: Enable)
BList0References = 0 # B slice List 0 reference override (0 disable, N <= NumberReferenceFrames)
BList1References = 1 # B slice List 1 reference override (0 disable, N <= NumberReferenceFrames)
# 1 List1 reference is usually recommended for normal GOP Structures.
# A larger value is usually more appropriate if a more flexible
# structure is used (i.e. using HierarchicalCoding)
BReferencePictures = 0 # Referenced B coded pictures (0=off, 1=B references for secondary layer, 2=B references for primary layer)
HierarchicalCoding = 2 # B hierarchical coding (0= off, 1= 2 layers, 2= 2 full hierarchy, 3 = explicit)
#Rate control
########################################################################################
RateControlEnable = 1 # 0 Disable, 1 Enable
Bitrate = 30000 # Bitrate(bps)
InitialQP = 0 # Initial Quantization Parameter for the first I frame
# InitialQp depends on two values: Bits Per Picture,
# and the GOP length
BasicUnit = 0 # Number of MBs in the basic unit
# should be a fraction of the total number
# of MBs in a frame ("0" sets a BU equal to a frame)
ChannelType = 0 # type of channel( 1=time varying channel; 0=Constant channel)
RCUpdateMode = 2 # Rate Control type. Modes supported :
GOP=15,2B帧
在命令行中打开bin目录,运行命令 lencod.exe -d encoder.cfg
注意:传输顺序并非是帧的顺序,应该首先传I帧和P帧
GOP=12,2B帧;
GOP=9,2B帧 ;
GOP=4,1B帧;
GOP=12,无B帧,
GOP=1,全I帧
方法类似
2.相同的GOP长度及形状,不同的码率
以GOP=15,2B帧标准,修改码率
1000kb/s
#Rate control
########################################################################################
RateControlEnable = 1 # 0 Disable, 1 Enable
Bitrate = 1000000 # Bitrate(bps)
800kb/s
400kb/s
方法类似
(4)用码流分析软件检查所生成的码流中各种编码模式和运动矢量等信息
(5)生成率失真曲线
码率为1000kb/s的y分量psnr值为
码率为800kb/s的y分量psnr值为
码率为400kb/s的y分量psnr值为
所以率失真曲线为一条直线