HEVC代碼:HM的下載和使用

一、HM使用教程

1.下載
HM爲HEVC的參考軟件,下載地址:https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/

分成三個大類:
trunk:主幹程序,是最新的HM主線版本。
branches:分支程序,是擴展的HM版本。
tags:各個版本的HM版本。

這裏下載需要使用TortoiseSVN,網上可以直接下載,這是一個版本控制工具軟件,具體介紹見百度百科。安裝SVN後,在桌面右鍵可以看到多了一個SVN Checkout,點擊後會出現一個對話框。

找到要下載的HM版本,打開到如下界面,將地址複製到SVN文件下載地址對應的對話框處,點OK開始下載。

在保存地址可以找到下載的HM版本。


附加:

JEM下載地址:https://jvet.hhi.fraunhofer.de/svn/svn_HMJEMSoftware/

JEM使用方法見https://blog.csdn.net/lin453701006/article/details/79941425,與HM類似,使用中改動在於cfg。

HM/JEM+360Lib下載地址:https://jvet.hhi.fraunhofer.de/svn/svn_360Lib/


2.HM使用方法

2.1 HM工程

以HM16.6爲例,在HM-16.6目錄下打開build文件夾,用VS打開對應版本的sln,可以看到HM包含的工程。

早期的HM解決方案包含了7個工程:
(1) TAppCommon 編碼器和解碼器共用的應用函數
(2) TAppDecoder 解碼器的應用函數
(3) TAppEncoder 編碼器的應用函數
(4) TLibCommon 編碼器和解碼器共用的庫函數
(5) TLibDecoder 解碼器的庫函數
(6) TLibEncoder 編碼器的庫函數
(7) TLibVideoIO 視頻輸入、輸出庫函數
後來又增加了2個工程:TAppDecoderAnalyser和TLibDecoderAnalyser。

使用時首先右鍵TAppEncoder-設爲啓動項目,配置設爲debug x64,生產解決項目。


HEVC標準規定的是解碼端,編碼端可以隨意改動,因此一般的工作都是集中於編碼器方面。

 2.2 配置cfg文件

HM使用是需要配置參數的,參數包括cfg和輸入參數。HM目錄下cfg文件夾中存儲了公共測試的配置文件,分爲4種,下面就以encoder_randomaccess_main.cfg爲例,打開encoder_randomaccess_main.cfg。在cfg下的per-sequence文件夾中,還有公共測試序列的配置文件,任意打開一個將其複製(進行拷貝,然後再修改內容,不要直接在cfg文件中修改!)到encoder_randomaccess_main.cfg中的#======== Profile ================前,覆蓋原始的#======== File I/O ===============部分,如下圖。

 

這裏面通過英文可以瞭解參數對應內容,不做具體解釋了。一般需要修改的就是輸入文件、分辨率和編碼幀數,再就是QP。

注意: 第一行的inputfile 是你的視頻文件的地址,需要進行修改!因爲下載的HM中沒有自帶的測試文件。需要在以下網址中下載。

https://media.xiph.org/video/derf/

下載的文件是 .y4m格式的,需要使用一下的命令生成 1280x720.yuv(前提是已經安裝了ffmpeg)

ffmpeg.exe -i src.avi -c:v rawvideo -pix_fmt yuv420p 1280x720.yuv

2.3 改輸入參數

設置TAppEcoder的工程屬性:鼠標選定TAppEncoder,然後按Alt+Enter;或者鼠標選中TAppEncoder,右鍵,選擇Properties。

         在Configuration Properties->Debuging中設置Command Arguments(注意-c 並添加兩個cfg文件)和WorkingDirectory(是HM的bin文件夾下的...)

         將配置用的兩個cfg文件encoder_intra_main.cfg和xxx.cfg(我的文件名是1280x720.cfg)考到HM\bin\vc10\x64\Debug下,以及編碼用的視頻文件xxx.yuv(我的文件名是1280x720.yuv)也考到這個文件夾下。

         如果是x64的系統,可以將Plaform設置成Active(x64)

         確定後,按Ctrl+F5就可以運行HM代碼開始編碼yuv視頻了。

如果想要將輸出保存成文檔的形式,需要將命令參數末尾加上>1.log(>out.txt)

2.4 運行

編碼結束會在命令行下輸出編碼後的bit數、YUV、編碼時間等信息,爲記錄方便,生成單獨的文件1.log(>out.txt)。編碼結束找到輸出文件打開可以看到相關信息,如下圖:


2.5 編碼輸出信息
上圖是HM輸出在命令行窗口的信息,很多新手都會想知道編碼質量在哪看,就在這裏,下面大概介紹下編碼輸出的信息。
編碼結束後輸出的信息中給出了編碼質量、時間,這也是就是爲什麼強調用>out.txt保存這些信息。
在當前的工作文件夾生成的.bin文件是碼流,在作爲解碼器的輸入文件之一。

首先會輸出一些編碼的輸入參數:

然後就是在每編完一幀後,會輸出一個該幀的編碼信息,其中重要的是:POC(對應圖像編碼順序的序號,這裏POC 0 就是編碼第一幀)、TId(對應播放順序的索引,這裏TId 0即播放的第一幀),總比特數,YUV各自的PSNR值。注意因爲存在分層B幀結構,因此編碼順序和播放順序可能不同。


最後就是在編完要求的幀數後輸出的總的編碼信息,包括全部幀的總bit數、YUV各自及總的PSNR值,以及I、P、B幀的幀數、bit數、YUV各自及總的PSNR值,還有編碼時間。I幀、P幀、B幀的概念這裏不再贅述。

論文中在說編碼性能時一般會提到BD-rate和編碼時間,時間就是這裏Total Time,而BD-rate是根據總的bitrate和YUV三通道的PSNR計算得到的,但一般要使用4個QP的測試結果來進行比較,如下圖。這裏就不再詳細介紹BD-rate的具體計算方法。

3. 解碼器Decoder

在進行如上配置後,正常情況下編碼器就能將你指定的yuv測試文件編碼爲二進制碼流文件了。

 

再說解碼器的使用:在到填入“Command Arguments”之前,跟編碼器是完全一樣的,這裏就不再重複了,輸入的命令如下-b xxx.bin -o deco.yuv,-b指定輸入的二進制碼流,即編碼輸出碼流文件,-o指定輸出的yuv文件。設置完畢之後,運行解碼器,應該能夠解碼出deco.yuv文件來了。
--------------------- 
作者:liangjiubujiu 
來源:CSDN 
原文:https://blog.csdn.net/liangjiubujiu/article/details/80573548 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章