HEVC 、H.264與AVS2 視訊壓縮

IT小白自習室發表於2020-12-09

Lab2 Report: HEVC 、H.264與AVS2 視訊壓縮

1. 摘要

這份實驗報告是視訊編碼與通訊的第二次大作業。作業的題目是HEVC與H.264視訊壓縮。

這篇報告首先根據作業釋出的要求,選擇兩個不同特性的測試序列設定兩組不同的編碼引數進行HEVC編碼與解碼。再對同一個測試序列進行HEVC和H.264壓縮編碼和解碼,並對比分析其效能的差異。

其次這份報告也記錄了一些擴充:對同一個序列進行AVS2壓縮編碼與解碼,並與實驗二得到的解碼圖片進行對比,簡單分析這三種壓縮標準的效能差異。

2. 實驗一:HEVC 視訊編碼與解碼

2.1 實驗內容

參考程式碼HM16.12 或以後版本。選擇至少兩個測試序列,具有不同空間解析度、不同
運動和紋理特性;對每個測試序列,分別設定兩組不同的編碼引數,進行編碼和解碼;給出
相應的引數配置,給出若干關鍵幀的原始影像、以及相應的解碼重建影像,給出每幀影像的
PSNR 值。

2.2 實驗原理簡述

高效率視訊編碼(High Efficiency Video Coding,簡稱HEVC),又稱為H.265和MPEG-H第二部分,是一種視訊壓縮標準,用來以替代H.264/AVC 編碼標準。

HEVC的視訊編碼層與H.264/AVC和許多其他視訊壓縮編碼一樣,都是採用Hybrid Video Coding的架構(如圖2-1),但在各部分加入了一些新技術或者提升了原本編碼工具的效率。1 例如例如基於四叉樹的靈活塊分割結構 、不同角度的幀內預測模式 、自適應的運動向量預測AMVP、合併技Merge、可變尺寸的離散餘弦變換等。

            圖2-1 HEVC的典型編碼框架

由圖中可以看出,典型的HEVC編碼框架具有如下幾個模組:

  • 幀內預測:該模組主要用於去除影像的空間相關性。通過編碼後的重構塊資訊來預測當前畫素塊以去除空間冗餘資訊,提高影像的壓縮效率;
  • 幀間預測:該模組主要用於去除影像的時間相關性。幀間預測通過將已編碼的影像作為當前幀的參考影像,來獲取各個塊的運動資訊,從而去除時間冗餘,提高壓縮效率;
  • 變換量化:該模組通過對殘差資料進行變換量化以去除頻域相關性,對資料進行有失真壓縮。變換編碼將影像從時域訊號變換至頻域,將能量集中至低頻區域;
  • 去方塊濾波:在基於塊的視訊編碼中,形成的重構影像會出現方塊效應,採用去方塊濾波可達到削弱甚至消除方塊效應的目的,提高影像的主觀質量和壓縮效率;
  • 樣點自適應步長濾波(SAO濾波)處於去方塊濾波之後,通過解析去方塊濾波後的畫素的統計特性,為畫素新增相應的偏移值,可以在一定程度上削弱振鈴效應,提高影像的主觀質量和壓縮效率;
  • 熵編碼:該模組將編碼控制資料、量化變換系數、幀內預測資料以及運動資料等編碼為二進位制流進行儲存或傳輸。熵編碼模組的輸出資料即原始視訊壓縮後的碼流。
2.3 實驗過程與分析
2.3.1 實驗環境與測試序列

本次實驗參考的程式碼版本為HW-16.13;實驗的環境為Visual Studio;用來採取幀和播放YUV檔案的工具為YUV Player。

實驗所用的測試序列為"akiyo_qcif.yuv"和"Bus_cif.yuv"2。為了實驗的便利,我們都選取了100幀進行後續的編碼。前者為一個新聞主持人,變化幅度較小,圖中運動物體較少。後者為公交車在道路上行駛,變化幅度較大,物體較多。

視訊紋理大致如下,選取的都為第一幀(兩張圖片有所放大和縮小):

在這裡插入圖片描述

空間解析度引數如下所示:

SourceWidthSourceHeightFrameToBeEncoded
akiyo176144100
bus352288100
2.3.2 HEVC編碼與解碼

我們將測試序列檔案(yuv檔案)和相關的配置檔案(encoder_intra_main.cfg和序列的配置檔案)放到Debug檔案目錄下,用Visual Stuido執行程式。

(1)測試序列1——第一組引數

測試序列1為akiyo_qcif.cfg。我們在配置檔案中的量化部分設定QP值為45。Coding Structure部分引數設定如下:

#======== Coding Structure =============
IntraPeriod                   : 1 # Period of I-Frame ( -1 = only first)
DecodingRefreshType           : 0 # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize                       : 1 # GOP Size (number of B slice = GOPSize-1)
#Type POC QPoffset QPfactor tcOffsetDiv2 betaOffsetDiv2  temporal_id #ref_pics_active #ref_pics reference pictures 

這樣我們將所有的幀都設定為I幀,編碼速度理論上可以得到提升,但這是基於編碼後視訊大小的犧牲之上。視訊壓縮的過程如下所示:

            圖2-3 測試序列1以第一組引數的編碼執行過程

程式總共執行了82.429s,檔案大小為33KB,原始檔大小為3713KB,壓縮比為112.5,壓縮效果較好。峰值訊雜比(PSNR)的值如下所示。

SUMMARY --------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
              100    a     129.4520   27.9516   33.5440   36.0687   29.2670


I Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
              100    i     129.4520   27.9516   33.5440   36.0687   29.2670


P Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
                0    p    -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)


B Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
                0    b    -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)

PSNR值都在40以下,說明編碼的影像質量較低。我們再對生成的str.bin檔案進行解碼。解碼過程相對簡單。解碼後的檔案大小為3713KB,與原始檔大小相等。解碼的具體過程如下所示:

            圖2-4 測試序列1以第一組引數的解碼執行過程

我們再來對比原始檔和解碼後檔案的關鍵幀影像質量對比。因為每一幀都是I幀,所以我們選擇第1、50、100幀來對比。

在這裡插入圖片描述在這裡插入圖片描述

在這裡插入圖片描述在這裡插入圖片描述

在這裡插入圖片描述在這裡插入圖片描述

從上面三幀的對比結果來看,大致上圖片質量損失較大,在細節處的對比尤為明顯。但是物體的輪廓尚能分辨。

(2)測試序列1——第二組引數

在這一組引數中我們將第一幀設定為I幀,其餘幀都設定為P幀。即為低時延編碼結構。這樣理論上編碼速度會變慢,但快於其餘幀為B幀。影像質量也應該介於兩者之間。我們選取QP值為10,這樣

配置檔案(encoder_lowdelay_P_main.cfg)中的Coding Structure部分如下所示:

#======== Coding Structure =============
IntraPeriod                   : -1  # Period of I-Frame ( -1 = only first)
DecodingRefreshType           : 0   # Random Accesss 0:none, 1:CRA, 2:IDR, 3:Recovery Point SEI
GOPSize                       : 4   # GOP Size (number of B slice = GOPSize-1)
IntraQPOffset                 : -1
LambdaFromQpEnable            : 1   # see JCTVC-X0038 for suitable parameters for IntraQPOffset, QPoffset, QPOffsetModelOff, QPOffsetModelScale when enabled

同樣的,視訊壓縮的過程如下所示:

            圖2-8 測試序列1以第二組引數的編碼執行過程

程式總共執行了200.189s,檔案大小為98KB,原始檔大小為3713KB,壓縮比為3709,壓縮效果相對來說較為一般。峰值訊雜比(PSNR)的值如下所示。

SUMMARY --------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
              100    a     397.9160   50.9905   52.1198   52.4897   51.3332


I Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
                1    i    3481.6000   53.3063   53.3069   53.7012   53.3698


P Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
               99    p     366.7677   50.9671   52.1078   52.4774   51.3168


B Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
                0    b    -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)

可以看出整體的訊雜比都在50以上,這個值對於人眼來說是非常不錯的。I幀和P幀的數量為1、99,與我們設定的也一致。

對檔案進行解碼,擷取關鍵幀(第一幀)並進行對比如下:

在這裡插入圖片描述

可以看出,因為QP值設定比較高,所以影像質量得到了保證,大致上看不出損失。但因為其他幀都為P幀,仔細觀察還是發現細節處出現了模糊,在照片中人物的臉部可以仔細觀察發現。

(4)測試序列2——第一組引數

測試序列2的第一組編碼引數與測試序列1相同,即所有幀都設定為I幀,把QP值設為45。其他設定不變。視訊壓縮的過程截圖如下:

            圖2-10 測試序列2以第一組引數的編碼執行過程

程式執行了242.844s,檔案大小為178KB,原始檔大小為14850KB。壓縮比為83.4。PSNR值如下所示:

SUMMARY --------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
              100    a     727.1040   24.3546   35.8285   37.1662   25.9815


I Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
              100    i     727.1040   24.3546   35.8285   37.1662   25.9815


P Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
                0    p    -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)


B Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
                0    b    -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)

可以看出PSNR值整體都在30以下,說明圖片質量較差。對檔案進行解碼,並擷取第1、50、100幀進行對比。

在這裡插入圖片描述在這裡插入圖片描述

在這裡插入圖片描述在這裡插入圖片描述

在這裡插入圖片描述在這裡插入圖片描述

從上面三幀的對比結果來看,與測試序列1結果相似。大致上圖片質量損失較大,在細節處的對比尤為明顯。但是物體的輪廓尚能分辨。

(4)測試序列2——第二組引數

測試序列2的第二組編碼引數與測試序列1相同,即第一幀設定為I幀,其餘為P幀,把QP值設為10。其他設定不變。視訊壓縮的過程截圖如下:

            圖2-14 測試序列2以第二組引數的編碼執行過程

程式執行了1969.095s,檔案大小為2723KB,原始檔大小為14850KB。壓縮比為5.45,壓縮效果較差。PSNR值如下所示:

SUMMARY --------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
              100    a   11151.3200   48.8338   49.3611   50.5012   48.9460


I Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
                1    i   23326.0000   53.4858   53.0045   53.5031   53.4046


P Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
               99    p   11028.3434   48.7868   49.3243   50.4709   48.9180


B Slices--------------------------------------------------------
        Total Frames |   Bitrate     Y-PSNR    U-PSNR    V-PSNR    YUV-PSNR
                0    b    -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)  -nan(ind)

可以看出整體的訊雜比都在50以上,這個值對於人眼來說是非常不錯的。I幀和P幀的數量為1、99,與我們設定的也一致。

對檔案進行解碼,擷取關鍵幀(第一幀)並進行對比如下:

在這裡插入圖片描述

可以看出因為圖片紋理的原因和高QP值,二者幾乎看不出差別,但這是基於壓縮效果的犧牲之上的。

3. 實驗二:H.264 視訊編碼與解碼

3.1 實驗內容

選擇同一個測試序列,採用相同編碼引數,分別進行H.264 和HEVC 壓縮編碼和解碼;
對比分析兩個不同編解碼器的編碼效能,給出相應的引數配置,給出若干關鍵幀的原始圖
像、以及相應的解碼重建影像,給出每幀影像的PSNR 值。

3.2 實驗原理簡述

H.264是高階視訊編碼(Advanced Video Coding,簡稱AVC),又稱為MPEG-4第10部分。是一種面向塊,基於運動補償的視訊編碼標準。到2014年,它已經成為高精度視訊錄製、壓縮和釋出的最常用格式之一。3

H.264/AVC包含了一系列新的特徵,使得它比起以前的編解碼器不但能夠更有效的進行編碼,還能在各種網路環境下的應用中使用。這些新特性包括但不限於如下幾種4

  • 多參考幀的運動補償。比起以前的視訊編碼標準,H.264/AVC以更靈活的方式使用已編碼的更多幀來作為參考幀。在某些情況下,可以使用最多32個參考幀。
  • 變塊尺寸運動補償。可使用最大16x16至最小4x4的塊來進行運動估計與運動補償,能夠對影像序列中的運動區域進行更精確的分割。
  • 六抽頭濾波器產生二分之一畫素的亮度分量預測值。這可以減少混疊並得到更銳化的影像。
  • 靈活的隔行掃描視訊編碼。隔行掃描影像的每幀包括兩個場,所以對於隔行掃描影像有三種編碼方式:將兩場合併為一幀進行編碼、將兩場分別編碼、將兩場合併為一幀,但是在巨集塊級別上,將一個幀巨集塊劃分為兩個場巨集塊進行編碼。
  • 使用了一個Loop的除塊效應濾波器,能夠減輕普遍存在於其他基於離散餘弦變換(DCT)的視訊編解碼器的塊效應。

            圖3-1 AVC的典型編碼框架

3.3 實驗過程與分析
3.3.1 實驗環境與測試序列

我選取的編碼器為JM19.05。其他環境與實驗一一致。在實驗二我選的測試序列都為實驗一中的測試序列1"akiyo_qcif.yuv"。內容為主持人進行新聞播報。大小為176*144。

3.3.2 實驗操作與結果分析

實驗二的配置引數與實驗一中的一致,即是第一幀為I幀,其餘都為P幀,所以正好可以使用baseline配置檔案。否則如果需要使用B幀就需要使用Main方式了。

JM軟體的配置引數如下所示(大部分都是與encoder_baseline.cfg檔案一致,已刪除部分註釋):

# Files
InputFile             = "akiyo_qcif.yuv"       # Input sequence
InputHeaderLength     = 0      
StartFrame            = 0      # Start frame for encoding. (0-N)
FramesToBeEncoded     = 100      # Number of frames to be coded
FrameRate             = 30.0   # Frame Rate per second (0.1-100.0)
SourceWidth           = 176    # Source frame width
SourceHeight          = 144    # Source frame height
SourceResize          = 0      # Resize source size for output
OutputWidth           = 176    # Output frame width
OutputHeight          = 144    # Output frame height
TraceFile             = "trace_enc.txt"      # Trace file 
ReconFile             = "test_rec.yuv"       # Reconstruction YUV file
OutputFile            = "test.264"           # Bitstream
StatsFile             = "stats.dat"          # Coding statistics file
# Encoder Control
ProfileIDC            = 66  
IntraProfile          = 0                      
LevelIDC              = 40  # Level IDC   (e.g. 20 = level 2.0)
IntraPeriod           = 0   # 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  
EnableIDRGOP          = 0   
EnableOpenGOP         = 0  
QPISlice              = 28  # Quant. param for I Slices (0-51)
QPPSlice              = 28  # Quant. param for P Slices (0-51)
FrameSkip             = 0  
ChromaQPOffset        = 0   # Chroma QP offset (-51..51)

點選執行之後,程式執行較慢。執行過程如下所示:

            圖3-2 測試序列1的H.264編碼執行過程

程式執行了344.816s。檔案大小為13KB,相對原始檔3713KB。壓縮比為285.6,壓縮效果很好。PSNR值資訊如下所示:

 Y { PSNR (dB), cSNR (dB), MSE }   : {  38.384,  38.380,   9.44246 }
 U { PSNR (dB), cSNR (dB), MSE }   : {  40.826,  40.824,   5.37896 }
 V { PSNR (dB), cSNR (dB), MSE }   : {  41.726,  41.725,   4.37107 }

可以看出PSNR值接近40,圖片質量相對較好。對檔案進行解碼,將原始檔關鍵幀、HEVC解碼的關鍵幀(QP值修改為28,檔案大小為9KB)和H.264解碼的關鍵幀進行對比。

在這裡插入圖片描述在這裡插入圖片描述在這裡插入圖片描述

由圖可知,HEVC解碼後的圖片比H.264解碼的結果的更加清晰,細節恢復的效果也更好。同時HEVC的壓縮效果也更好,執行時間也更短。綜上,HEVC的表現相比H.264來說更加優異。

4. 擴充實驗:AVS2視訊編碼與解碼

4.1 實驗內容

選擇同一個測試序列,採用與上述實驗相同的編碼引數,進行AVS2壓縮編碼和解碼;
對比分析幾個不同編解碼器的編碼效能,並給出相應的引數配置,給出若干關鍵幀的原始圖
像、以及相應的解碼重建影像,給出影像的平均PSNR 值。

4.2 實驗原理簡述

AVS標準是我國自主智慧財產權的信源編碼標準,是針對中國音視訊產業的需求,由中國數字音視訊領域的科研機構和企業牽頭,相關國際單位和企業廣泛參與,按照國際開放式規則制定的系列標準。目前已經完成了兩代AVS標準的制定。

第二代AVS標準,簡稱AVS2,首要應用目標是超高清晰度視訊,支援超高解析度(4K以上)、高動態範圍視訊的高效壓縮。IEEE國際標準號號為IEEE1857.4。根據官方網站的敘述,在數字電視廣播(逐行)、實時通訊和數字電影或靜態影像領域,AVS2和HEVC的編碼效能相似,但在數字電視廣播(隔行)和視訊監控的應用方面,AVS2的編碼效能要明顯高於HEVC。

與HEVC編碼框架類似,AVS2也採用了混合編碼框架,整個編碼過程包括幀內預測、幀間預測、變換量化、反量化反變換、環路濾波和熵編碼等模組。6

            圖4-1 AVS2的編碼框架

AVS2編碼包括但不限於如下特性:

  • 靈活的編碼結構劃分。AVS2採用了基於四叉樹的塊劃分結構,包括編碼單元(Coding Unit,CU)、預測單元(Prediction Unit,PU)和變換單元(Transform Unit,TU)。
  • 靈活的幀內預測編碼。相比於AVS1和H.264/AVC,AVS2在亮度塊的幀內預測編碼上設計了33種模式,包括DC預測模式、Plane預測模式、Bilinear預測模式和30種角度預測模式。在色度塊上有5種模式:DC模式、水平預測模式、垂直預測模式、雙線性插值模式以及新增的亮度匯出(Derived mode, DM)模式。
  • 增加了前向多假設預測F影像。編碼塊可以參考前向兩個參考塊,相當於P幀的雙假設預測。AVS2將雙假設預測分為兩類,分別是時域雙假設和空域雙假設。時域雙假設的當前編碼塊利用預測塊加權平均作為當前塊的預測值,但運動向量差MVD和參考影像索引都只有一個,另外一個MVD和參考影像索引根據時域上的距離按線性縮放推匯出來。而空域雙假設預測也叫方向性多假設預測,通過融合初始預測點周圍的兩個預測點得到,而且初始預測點位於這兩個預測點的連線上。除了初始預測點外,一共有8個預測點,只將和初始預測點連成同一條直線的兩個預測點進行融合。除了四種不同的方向外,還根據距離進行調整,對1/2畫素距離和1/4畫素距離位置的4種模式分別計算,在加上初始預測點,共9種模式進行比較,選擇出最佳預測模式。
4.3 實驗操作與結果分析
4.3.1 實驗環境和測試序列

與實驗一二一致,擴充實驗選擇的測試序列同樣為"akiyo_qcif.yuv",環境為Visual Studio。

參考軟體為北京大學開源的AVS2編碼器和與解碼器。使用該編碼器和解碼器需要進行一些環境配置。

值得注意的是,環境配置大部分是我自己摸索出來的,可能會有不正確或者不必要的操作存在。希望老師可以理解或者提出指正

(1) 編碼器環境配置

首先根據官方文件,需要安裝一個shell執行器,比如git-for-windows中的bash,並將bash所在的目錄新增到系統環境變數PATH中。

其次需要下載nasm.exe檔案,並將其放到\build\vs2013目錄下。

再開啟vs2013目錄下的’xavs.sln’工程檔案,選擇’x64’生成解決方案,否則會報錯一些asm檔案中的位數錯誤。生成成功後會在\build\bin\x64_debug資料夾中看到已經生成的可執行檔案’xavs.exe’檔案。

之後需要寫yuv檔案對應的配置檔案(cfg檔案),在config資料夾中找到’encoder_ldp.cfg’檔案。複製貼上到工作目錄,修改yuv檔案的名稱、空間解析度、需要編碼的幀數等引數。

最後在Visual Studio中的xavs的屬性中編輯對應的命令引數。命令引數很簡單,如下所示,可能需要修改路徑。之後便可以順利執行。

-f C:\xavs2-master\xavs2-master\build\bin\x64_Debug\encoder_ldp.cfg

            圖4-2 xavs的命令引數

(2)解碼器環境配置

解碼器環境配置相對簡單。同樣用’x64’便可以生成可執行檔案

其次將編碼器生成的test.avs壓縮檔案和test_rec.yuv參考檔案複製貼上到解碼器的工作目錄下。在Visual Studio中修改davs2的命令引數。命令引數也很簡單,如果需要修改I/O檔案的名稱可以直接修改。修改davs2的工作目錄可有可無,不修改則預設在vs2013資料夾下生成解碼檔案。

-i test.avs -o dec.yuv -r test_rec.yuv 

            圖4-3 davs的命令引數

4.3.2 實驗過程與結果分析

配置引數我選擇的是第一幀為I幀,其餘為AVS2獨有的F幀。QP值修改預設設定第一幀為34,此後幀QP的最小值和最大值都為34。修改後部分配置引數如下所示(已刪去部分註釋):

InputFile               = "C:\xavs2-master\xavs2-master\build\bin\x64_Debug\akiyo_qcif.yuv"    # Input sequence, YUV 4:2:0
FramesToBeEncoded       = 100            # Number of frames to be coded
SourceWidth             = 176           # Image width  in Pels
SourceHeight            = 144           # Image height in Pels
fps                     = 50.0          
ChromaFormat            = 1             
InputSampleBitDepth     = 8             
SampleBitDepth          = 8           
ReconFile               = "test_rec.yuv"
OutputFile              = "test.avs"
# Maximum Size
MaxSizeInBit            = 6             # Maximum CU size
# Encoder Control
ProfileID               = 32           
LevelID                 = 66           
IntraPeriodMin          = 0            
IntraPeriodMax          = 0            
OpenGOP                 = 0             # Open GOP
UseHadamard             = 1            
FME                     = 3            
SearchRange             = 64            # Max search range
NumberReferenceFrames   = 4            
inter_2PU               = 1            
inter_AMP               = 1            
# F Frames
FFRAMEEnable            = 1             
DHPEnable               = 1             # (0: Don't use DHP,      1:Use DHP) 
MHPSKIPEnable           = 1             
WSMEnable               = 1             # (0: Don't use WSM,      1:Use WSM) 

點選執行,程式執行較快,執行過程如下所示:

            圖4-4 xavs的執行過程

程式執行很快,6.933s編碼了100幀。檔案大小為9KB。原始檔大小為3713KB,壓縮比為412.56。課件AVS2的壓縮效率和壓縮效果表現都很好。

PNSR值如下所示,PSNR值接近40,說明圖片質量可以接受:

AVERAGE SEQ PSNR:      37.5197 40.9658 42.0968
xavs2[i]:          BITRATE:  35.29 kb/s @ 50.0 Hz, 100 frames, xavs2 p8
xavs2[i]:       TOTAL BITS: 70576 (I: 14416, B: 0, P/F: 56160)
xavs2[d]:       TOTAL TIME:    6.912 sec, total 100 frames, speed: 14.47 fps
xavs2[d]:       Frame Time:   I:   1.51%;   B:   0.00%;   P/F:  98.49%
xavs2[i]:       Frame Num :   I:   1.00%;   B:   0.00%;   P/F:  99.00%

將壓縮檔案進行解碼重構,並將三種標準重構(HEVC和H.264為第一幀為I幀,其餘為P幀,QP值設為34)的影像進行對比,結果如下所示:

在這裡插入圖片描述在這裡插入圖片描述

可以看出H.264解碼之後效果最好,ASV2和HEVC解碼之後細節處都有些許模糊,而ASV2相對HEVC更為清晰。

壓縮檔案大小壓縮時間關鍵幀PSNR值
HEVC5KB117.752s35.8 38.5 40.3
H.2646KB356.234s34.6 38.1 39.7
ASV29KB7.612s38.7 40.9 42.2

由結果可以看出,壓縮時間相差較大,與理論有較大差異。原因可能是因為生成可執行檔案的方式不同,前兩者為’win32’,後者為’x64’,因此後者計算更為快速。

壓縮效果HEVC最好,H.264次之,ASV2最末。但相差並不大。

關鍵幀PSNR值ASV2指標最高,但是由解碼之後圖片中H.264最為清晰。可能是PSNR指標與人眼視覺系統(HVS)的差異決定的。

5. 實驗感想

在嘗試瞭解本文的幾種編碼標準的原理時發現很複雜,看了很長時間都沒有理解。但查閱資料後發現AVS第一代標準是由我國的前任團隊花了三年多時間建立的,深覺工程之艱難。

本文取的一些引數有部分不能滿足控制變數的原則,但是有些引數的設定使得程式執行時間很長,所以很難有多組資料進行科學的對比試驗。這可以在課後自我完成。

總之這次實驗雖然不復雜,但是讓我們真切的感受了視訊編碼的過程,希望以後有機會可以加入這個領域迎接挑戰。同時感謝助教和老師的出題和講解。


  1. R. Sjoberg et al., “Overview of HEVC High-Level Syntax and Reference Picture Management,” in IEEE Transactions on Circuits and Systems for Video Technology, vol. 22, no. 12, pp. 1858-1870, Dec. 2012, doi: 10.1109/TCSVT.2012.2223052. ↩︎

  2. 下載地址:http://trace.eas.asu.edu/yuv/index.html ↩︎

  3. https://zh.wikipedia.org/wiki/H.264/MPEG-4_AVC ↩︎

  4. Sullivan G J, Topiwala P N, Luthra A. The H. 264/AVC advanced video coding standard: Overview and introduction to the fidelity range extensions[C]//Applications of Digital Image Processing XXVII. International Society for Optics and Photonics, 2004, 5558: 454-474. ↩︎

  5. 下載地址:http://iphome.hhi.de/suehring/tml/download/ ↩︎

  6. http://www.avs.org.cn/AVS2/technology.asp ↩︎

相關文章