HEVC之路0:HM16.18的運行+碼流分析


1.HM下載

  1. HM不能直接網頁下載,因為它是采用svn來管理代碼的,因此需要利用svn下載,這里采用TortoiseSVN(軟件下載地址為https://tortoisesvn.net/)進行下載。


     

  2. 下載並安裝TortoiseSVN,在桌面任意位置右鍵,打開repo-browser
  3. 在彈出來的URL框填入HM的下載地址:https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/tags/
    svn_HEVCSoftware分成三個大類:
    trunk:主干程序,是最新的HM主線版本。
    branches:分支程序,是擴展的HM版本。
    tags:各個版本的HM版本。


  4. 然后就能看到HM相關文件夾,所發布的HM版本在tags文件夾中
  5. 在需要的版本中右鍵選擇“checkout”,即可進行下載。這里選擇的是最新版HM-16.17
             關於版本,可以看到早期版本中有“RExt”字樣,RExt表示Format Range Extension,用於支持4:0:0,4:2:2,4:4:4的顏色空間和額外比特深度。但到HM16.0后,RExt已經並入HM主線,因此不再單獨列出RExt。而對於有”SCM”字樣版本,即包含SHVC,MV-HEVC,3D-HEVC版本分支。

2.HM運行

  1. HM16.18->build文件夾中,點擊對應的VS版本打開,這里以HM_vc2015.sln為例,可以看到右側出現9個項目。

     

  2. 右擊“解決方案‘HM_vc2013’(9個項目)”->”生成解決方案”。debug,win32可選,與系統是否是64位的無關,不影響工程運行

    生成成功后,在HM16.7下會生成一個“bin”文件夾,在bin\vc2013\Win32\Debug中會有2個可執行文件:TAppEncoder.exe和TAppDecoder.exe

  3. 我們主要對HEVC編碼器進行研究,即將yuv格式碼流編碼成HEVC格式數據,所以主要關注TAppEncoder。
    右擊解決方案中“TAppEncoder”->“設為啟動項目”
    再右擊“TAppEncoder”->”屬性”->”配置屬性”->”調試”
    在工作目錄欄指定工作目錄路徑,這里在HM16.7下創建了一個workspace的文件夾作為工作目錄。
    在命令參數欄中需要填寫的是用到的配置文件名,包含2個:
    (1)編碼器配置文件: encoder_intra_main.cfg,文件路徑:D:\HEVC\HM16.7\cfg。並把該文件復制到workspace中。
    (2)視頻源配置文件(該用於指定輸入yuv測試文件,分辨率,待編碼幀數等):為了日后使用方便,在workspace中新建一個bitstream.cfg的配置文件,配置的編寫復制HM16.7\cfg\per-sequence中的相應配置即可。(如,我們需要壓縮BasketballDrill視頻文件,則打開BasketballDrill.cfg並把其中的配置復制到bitstram.cfg中。但注意要修改InputFile的地址,這個后面會提到)。
  4. 指定源數據文件
    下載地址1:http://ftp.kw.bbc.co.uk/hevc/hm-15.0-anchors/bitstreams/i_main/ ;
    該地址下載下來的是.bin格式的265壓縮文件,需經265解碼器解碼成yuv格式文件才可為編碼器使用。
    下載地址2(已經失效):https://pan.baidu.com/share/link?shareid=976413622&uk=204312922#list/path=%2F
    該地址下載下來的是.yuv的yuv文件,可用於265編碼器編碼。這里下載了一個BasketballDrill_832x480_50.yuv文件用於編碼測試

  5. 修改配置文件
    在HM16.7\cfg\per-sequence中找到BasketballDrill.cfg,並把其中的配置復制到bitstream.cfg
    修改bitstream.cfg中的配置:
    InputFile修改為碼流路徑,注意路徑不能有中文字符,斜線方向不影響。
    FramesToBeEncoded修改為5.即只編碼5幀,這里只為縮短編碼時間。

    修改encoder_intra_main.cfg中的配置:
    將QP值修改為51,以減小壓縮后的碼流量大小

    注意:以上配置不能亂改,一旦不滿足規范,則程序無法正常運行。  (如IntraPeriod和GOPSize這兩個參數的修改就有點復雜,一些都選1,即都是I幀,如果不是,還要設置一些參數,而不是簡單改變數值。例子見encoder_lowdelay_main_rext.cfg)。

  6. 運行程序
    運行過程中出現如下界面,運行結束后在workspace中生成2個文件:str.bin和rec.yuv。前者是編碼后的碼流文件,后者是重建的yuv格式圖像

3.碼流分析

目前HEVC有幾款不錯的碼流分析軟件,CodecVisa,Elecard HEVC Analyzer等,但CodecVisa收費,Elecard HEVC Analyzer可以找到破解版,下面來簡單介紹Elecard HEVC Analyzer的使用方法。

Elecard HEVC Analyzer破解版下載地址,內附激活教程(CSDN現在沒法傳免費資源,以后共享資源我盡量用百度雲):鏈接:https://pan.baidu.com/s/1jJE2W8A 密碼:gmof
打開Elecard HEVC Analyzer,然后打開編碼得到的.bin文件。
左上角選擇Chart Bar可以查看每幀視頻碼流分配情況:
 
Thumbnails查看視頻的縮略圖及對應的編碼索引和時間索引。
 
 
上方三個按鈕控制顯示塊划分、預測角度(幀內方向,幀間MV),分塊類型。
 
 
左側可以看到幀級別的統計信息,比如色度格式、分辨率、各類型幀所分配的比特比例等,下面可以更換查看VPS、SPS等其他級別的信息。
 
 
右側可以查看CU級別的信息,塊的位置、尺寸、預測方向等等。
 
 
詳細教程見Elecard自帶的User Guided。

4.錯誤分析

1. 沒有進行任何改動,程序開始運行一閃就自動結束了。
尤其是新手!注意了!很多人一上手就跑程序,成功生成了,但是運行什么都沒有,就這個問題!HM是需要設置輸入參數和cfg的!
使用HM的肯定都會遇到,一般都是輸入參數或cfg文件的問題,查看輸出的out.txt可以看到相關提示。檢查輸入參數是否正確(閱讀用戶手冊查錯),cfg文件中的輸入YUV地址是否填寫正確,對應位置是否有對應的YUV文件。
 
2. 對代碼進行改動后報錯。
同上,查看輸出的的out.txt看相關提示,找到對應位置進行修正。各類問題很多,就是很基本的C程序調試,不具體說了。
 
3. 運行程序,也不報錯,也沒有正常編碼的提示。
首先還是建議等,因為很可能是因為你的機子太慢了,HM還好,如果使用JEM,編一幀都可以睡一覺了,耐心等一下。如果超過幾個小時還不動,那就是程序的問題了,去找錯吧。
 
4.正常編碼輸出的重構圖像打開后如下圖,有兩種可能:
 

(1)編碼輸入的分辨率錯誤,只能改好重新編碼一下。

(2)cfg中設置的InternalBitDepth為10,這不是錯誤,無法正常顯示是因為重構圖像是10bit圖像,而一般YUV播放器只支持8bit圖像,像素值越界。這里提供一個本人自己改的10bit YUV播放器:http://blog.csdn.net/lin453701006/article/details/79892864。
 
4.針對編碼速度慢問題補充說明
新手肯定對於編碼速度有很多疑問,也有很多人問我這個問題,因此在這里單獨說明一下。
HM的編碼速度相關的因素:
(1). 很重要一定要記住,在真正測試時一定要用release版!release相比debug版本速度會快很多,x64也要比x86速度快一些。這個具體原因不深究了,有興趣可以自己研究下。
(2).輸入參數,編碼幀數、QP等。建議在檢驗你的代碼是否正確和初步檢測性能優劣時,用較少幀。而QP是公共測試條件限定的,沒法從QP方面入手提高速度。
(3).視頻序列的分辨率,這一點很好理解,沒什么可說的。
(4).所有人都能想到,電腦配置也會影響。不過我嘗試過,配置只要夠用,運行速度差異不大,主要還是C++的運行效率限制了運行速度。

5.參考鏈接

  1. https://blog.csdn.net/u011025888/article/details/78841829

  2. https://blog.csdn.net/lin453701006/article/details/52775820

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com