本發(fā)明涉及圖像處理技術領域,特別是涉及一種幀內編碼幀碼率分配方法和裝置。
背景技術:
碼率控制在視頻通信以及流媒體傳輸中控制著輸出流,使之滿足信道帶寬和緩沖區(qū)的約束,在此基礎上盡可能保證視頻質量的失真最小。碼率控制具有兩個步驟,第一個步驟為碼率分配,第二個步驟為計算量化參數。編碼器根據分配的碼率以及量化參數進行編碼。
一個碼率控制單元用于實現對一個圖像組(gop,groupofpicture)的控制,一個圖像組gop中包括i幀(幀內編碼幀)、剩余幀都是幀間編碼幀(p/b幀)。其中i幀為序列gop的第一幀,以i幀為基礎幀,以i幀預測p幀,再由i幀和p幀預測b幀。
如果當前幀是幀內編碼幀,則可根據前一個序列中i幀、p幀和b幀的碼率、量化參數以及當前緩存器的占用情況對當前i幀進行碼率分配。實際應用中,對于i幀間隔比較大的情況,如大于2秒以上,前一個i幀距離當前i幀的時間間隔較大,前一個i幀和之后的p幀和b幀極可能發(fā)生場景變化,通過比較前一個序列的p/b幀和i幀的碼率、量化參數對當前幀進行碼率分配并不準確,進而降低視頻編碼的畫面質量。
技術實現要素:
基于此,有必要提供一種準確度高的幀內編碼幀碼率分配方法和裝置以提高視頻編碼的畫面質量。
為達到上述目的,一個實施例采用以下技術方案:
一種幀內編碼幀碼率分配方法,包括:
在當前幀圖像為設定幀序列的幀內編碼幀時,對所述當前幀圖像進行預編碼,所述預編碼包括將當前幀圖像編碼為幀內編碼幀;
計算對應的預編碼代價;
根據所述預編碼代價分配幀內編碼幀碼率,分配的幀內編碼幀碼率與預編碼代價呈正相關。
一種幀內編碼幀碼率分配裝置,包括預編碼模塊、編碼代價計算模塊和分配模塊;
所述預編碼模塊,用于在當前幀圖像為設定幀序列的幀內編碼幀時,對所述當前幀圖像進行預編碼,所述預編碼包括將當前幀圖像編碼為幀內編碼幀;
所述編碼代價計算模塊,用于計算對應的預編碼代價;
所述分配模塊,用于根據所述預編碼代價分配幀內編碼幀碼率,分配的幀內編碼幀碼率與預編碼代價呈正相關。
上述的幀內編碼幀碼率分配方法和裝置,由于對預編碼代價是通過對當前幀圖像進行預編碼得到,而預編碼包括將當前幀圖像編碼為幀內編碼幀,若預編碼代價大,則表示為了達到相同視頻質量幀內編碼幀所需碼率高,若預編碼代價小,表示為了達到相同視頻質量幀內編碼幀所需碼率低,因而根據預編碼代價分配的幀內編碼幀碼率能夠真實反應當前幀圖像的畫面的實際場景,不受前一個序列gop的碼率和量化參數的影響,分配的幀內編碼幀碼率的準確率高,進而提高視頻編碼的畫面質量。
附圖說明
圖1為本發(fā)明一個實施例方案的應用環(huán)境示意圖;
圖2為一個實施例的用戶終端的內部結構示意圖;
圖3為一個實施例的幀內編碼幀碼率分配方法的流程示意圖;
圖4為另一個實施例的幀內編碼幀碼率分配方法的流程示意圖;
圖5為再一個實施例的幀內編碼幀碼率分配方法的流程示意圖;
圖6為一個實施例的幀內編碼幀碼率分配裝置的結構示意圖;
圖7為再一個實施例的幀內編碼幀碼率分配裝置的結構示意圖。
具體實施方式
為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步的詳細說明。應當理解,此處所描述的具體實施方式僅僅用以解釋本發(fā)明,并不限定本發(fā)明的保護范圍。
圖1為一個實施例提供的幀內編碼幀碼率分配方法的應用環(huán)境示意圖。如圖1所示,該應用環(huán)境包括第一用戶終端101、第二用戶終端102以及服務器103,第一用戶終端101以及第二用戶終端102分別與服務器103網絡連接。第一用戶終端101和第二用戶終端102分別運行有視頻通信的應用程序,第一用戶通過第一用戶終端101采集視頻數據,通過服務器發(fā)送至第二用戶終端102,第二用戶通過第二用戶終端102進行查看。類似的,第一用戶通過第一用戶終端101查看第二用戶終端102采集的視頻信息,從而實現第一用戶與第二用戶的視頻通信。在本實施例中,幀內編碼幀碼率分配方法運行在第一用戶終端101或第二用戶終端102中。以第一用戶終端101為例,第一用戶終端采集圖像數據,在當前幀圖像為設定幀序列的幀內編碼幀,對當前幀圖像進行預編碼,預編碼包括將當前幀圖像編碼為幀內編碼幀,并計算對應的預編碼代價,根據預編碼代價分配幀內編碼幀碼率。編碼器根據分配的幀內編碼幀碼率和計算的量化參數進行編碼。根據預編碼代價分配的幀內編碼幀碼率的與預編碼代價呈正相關,分配的碼率能夠真實反應當前幀圖像的畫面的實際場景,不受前一個序列gop的碼率和量化參數的影響,分配的幀內編碼幀碼率的準確率高,進而提高視頻編碼的畫面質量。
在其它的應用場景中,也可以只包括第一用戶終端101和服務器103,第一用戶終端101與服務器103網絡連接。第一用戶終端101將采集視頻數據發(fā)送至服務器103。幀內編碼幀碼率分配方法運行在第一用戶終端101中。
在另一個實施例中,第一用戶通過第一用戶終端101還可以向第二用戶終端發(fā)送流媒體文件。本實施例中,幀內編碼幀碼率分配方法運行在服務器103中。服務器103對于第一用戶終端101發(fā)送的視頻流進行解碼后重新編碼,再將重新編碼后的視頻流發(fā)送至第二用戶終端102,以滿足不同終端平臺的播放要求。
在其它的應用場景中,也可以只包括第一用戶終端101和服務器103,第一用戶終端101與服務器103網絡連接。第一用戶終端101將流媒體文件發(fā)送至服務器103。幀內編碼幀碼率分配方法運行在服務器103中。
圖2為一個實施例中的用戶終端的內部結構示意圖。如圖2所示,用戶終端包括通過系統總線連接的處理器、存儲介質、內存儲器、網絡接口、顯示屏、攝像頭和輸入裝置。其中,終端的存儲介質存儲有操作系統以及一種幀內編碼幀碼率分配裝置,該幀內編碼幀碼率分配裝置用于實現一種幀內編碼幀碼率分配方法。該處理器用于提供計算和控制能力,支撐整個用戶終端的運行。用戶終端的內存儲器為存儲介質中的幀內編碼幀碼率分配裝置運行提供環(huán)境,該內存儲器中可存儲有計算機可讀指令,該計算機可讀指令被處理器執(zhí)行時,可使得處理器執(zhí)行一種幀內編碼幀碼率分配方法。用戶終端的網絡接口用于與服務器進行網絡通信,如將視頻文件發(fā)送至服務器,接收服務器發(fā)送的來自其它用戶終端的視頻文件等。用戶終端的顯示屏可以是液晶顯示屏或者電子墨水顯示屏等,輸入裝置可以是顯示屏上覆蓋的觸摸層,也可以是用戶終端外殼上設置的按鍵、軌跡球或觸控板,也可以是外接的鍵盤、觸控板或鼠標等。該用戶終端可以是手機、平板電腦或者個人數字助理或穿戴式設備等。本領域技術人員可以理解,圖2中示出的結構,僅僅是與本發(fā)明方案相關的部分結構的框圖,并不構成對本發(fā)明方案所應用于其上的用戶終端的限定,具體的用戶終端可以包括比圖中所示更多或更少的部件,或者組合某些部件,或者具有不同的部件布置。
圖3為一個實施例中幀內編碼幀碼率分配方法的流程示意圖。本實施例以該方法應用在上述圖1中的用戶終端來舉例說明。參照圖3,該方法具體包括如下步驟:
s302,在當前幀圖像為設定幀序列的幀內編碼幀時,對當前幀圖像進行預編碼,預編碼包括將當前幀圖像編碼為幀內編碼。
幀內編碼幀即i幀,是一種自帶全部信息的獨立幀,無需參考其他圖像便可獨立進行解碼,可以簡單理解為一張靜態(tài)畫面。本實施例中,預先對編碼器設置了幀序列的順序,例如,設置一圖像組gop中有12幀,該gop內的幀序列為ibbpbbpbibbp。當碼率控制單元接收到每一幀圖像時,根據預設設定的幀序列順序判斷當前幀圖像是否為設定幀序列的幀內編碼幀。當判斷當前幀圖像為設定幀序列的幀內編碼幀時,對當前幀圖像進行預編碼。
本實施例中的預編碼包括將當前幀圖像編碼為幀內編碼幀,在一個具體的實施例中,預編碼的過程與實際編碼過程相同。在其它的實施方式中,預編碼也可以簡化編碼模塊,提高編碼速度。例如,簡化編碼模式的選擇,從9種編碼模式中選中最優(yōu)模式(hevc在正常幀內編碼時需要從35種編碼模式中選中最優(yōu)模式)。
s304,計算對應的預編碼代價。
具體地,計算預編碼代價的公式可以為:cost=d+λr;其中,cost為編碼代價,d表示編碼單元對應的圖像編碼塊的失真程度,d采用絕對差值和sad運算獲取,λ為拉格朗日常數,r表示編碼單元對應的圖像編碼塊占用的比特數目。在其它的實施方式中,編碼代價也可以只用d表示,即cost=d。在其它的實施方式中,還可以根據預測殘差估計編碼代價。
s306,根據預編碼代價分配幀內編碼幀碼率,分配的幀內編碼幀碼率與預編碼代價呈正相關。
本實施例中,分配的幀內編碼幀碼率與預編碼代價呈正相關,即預編碼代價越大,分配的幀內編碼幀碼率越高,預編碼代價越小,分配的幀內編碼幀碼率越低。
上述的幀內編碼幀碼率分配方法,由于對預編碼代價是通過對當前幀圖像進行預編碼得到,而預編碼包括將當前幀圖像編碼為幀內編碼幀,若預編碼代價大,則表示為了達到相同視頻質量幀內編碼幀所需碼率高,若預編碼代價小,表示為了達到相同視頻質量幀內編碼幀所需碼率低,因而根據預編碼代價分配的幀內編碼幀碼率能夠真實反應當前幀圖像的畫面的實際場景,不受前一個序列gop的碼率和量化參數的影響,分配的幀內編碼幀碼率的準確率高,進而提高視頻編碼的畫面質量。
圖4為另一個實施例中幀內編碼幀碼率分配方法的流程示意圖,如圖4所示,該方法包括以下步驟:
s402,在當前幀圖像為設定幀序列的幀內編碼幀時,對當前幀圖像進行預編碼。預編碼包括:將當前幀圖像編碼為幀內編碼幀,以及將當前幀圖像編碼為幀間編碼幀。
幀內編碼幀即i幀,是一種自帶全部信息的獨立幀,無需參考其他圖像便可獨立進行解碼,可以簡單理解為一張靜態(tài)畫面。本實施例中,預先對編碼器設置了幀序列的順序,例如,設置一圖像組gop中有12幀,該gop內的幀序列為ibbpbbpbibbp。當碼率控制單元接收到每一幀圖像時,根據預設設定的幀序列順序判斷當前幀圖像是否為設定幀序列的幀內編碼幀。當判斷當前幀圖像為設定幀序列的幀內編碼幀時,對當前幀圖像進行預編碼。
具體地,在當前幀圖像為設定的幀內編碼幀時,分別假設當前幀圖像為幀內編碼幀和幀間編碼幀,采用對應的編碼方式將當前幀圖像編碼為幀內編碼幀以及幀間編碼幀。
預編碼的過程與實際編碼過程相同。在其它的實施方式中,預編碼也可以簡化編碼模塊,提高編碼速度。例如,簡化編碼模式的選擇,從9種編碼模式中選中最優(yōu)模式(hevc在正常幀內編碼時需要從35種編碼模式中選中最優(yōu)模式)。
s404,計算對應的預編碼代價。
具體地,分別計算將當前幀圖像編碼為幀內編碼幀得到的幀內編碼代價、和將當前幀圖像編碼為幀間編碼幀得到的幀間編碼代價。
對應的編碼代價采用的公式可以為:cost=d+λr;其中,cost為編碼代價,d表示編碼單元對應的圖像編碼塊的失真程度,d采用絕對差值和sad(絕對誤差和)運算獲取,λ為拉格朗日常數,r表示編碼單元對應的圖像編碼塊占用的比特數目。在其它的實施方式中,編碼代價也可以只用d表示,即cost=d。在其它的實施方式中,還可以根據預測殘差估計編碼代價。
計算的幀內編碼代價越大,表示如果當前幀圖像為幀內編碼幀,為了達到相同視頻質量所需碼率越高,相反,計算的幀內編碼代價越小,表示如果當前幀圖像為幀內編碼幀,為了達到相同視頻質量所需碼率越低。
計算的幀間編碼代價越大,表示如果當前幀圖像為幀間編碼幀,為了達到相同視頻質量所需碼率越高,相反,計算的幀間編碼代價越小,表示如果當前幀圖像為幀間編碼幀,為了達到相同視頻質量所需碼率越低。
s406,計算當前幀圖像的幀內/幀間編碼代價比值,幀內/幀間編碼代價比值為當前幀的幀內編碼代價和幀間編碼代價的比值。
通常而言,如果視頻運動劇烈,圖像之間的相關性較小時,幀間編碼幀為了達到一定視頻質量,所需碼率較高;反之,對于比較靜止的視頻,幀間編碼幀所需碼率較低。
分析當前幀圖像的幀內/幀間編碼代價比值,該比值等于幀內編碼代價除以幀間編碼代價。如果幀內/幀間編碼代價比值低,說明幀間編碼幀需要更多的碼率,在相同目標碼率下應為幀內編碼幀分配較少的碼率;反之,如果幀內/幀間編碼代價比值高,則為幀內編碼幀分配較多的碼率。將幀內編碼代價記作icost,幀間編碼代價記作pcost,幀內編碼代價和幀間編碼代價的比值記作ipcost,則公式可表示為:
s408,根據幀內/幀間編碼代價比值確定幀內/幀間目標碼率比值;幀內/幀間目標碼率比值為幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值,幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關。
幀內/幀間目標碼率比值為幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值。幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關,即幀內/幀間編碼代價比值越高,則幀內/幀間目標碼率比值越高;幀內/幀間編碼代價比值越低,則幀內/幀間目標碼率比值越低。
將幀內/幀間目標碼率比值記作c,則ipcost越大,則c越大;反之,ipcost越小,則c越小。
s410,獲取總目標碼率。
具體地,當前碼率控制單元的總目標碼率的計算方法包括以下步驟:獲取視頻幀率,根據視頻幀率以及預先設置的每秒目標碼率和幀個數計算得到總目標碼率。
幀率是用于測量顯示幀數的量度,即每秒圖像的數量,幀率由視頻采樣決定。每秒目標碼率和幀個數預先設定。當前碼率控制單元的總目標碼率等于,每秒目標碼率除以幀率,再乘以當前碼率控制單元中的幀個數。
s412,根據總目標碼率、幀內/幀間目標碼率比值以及預設的幀內編碼幀個數和幀間編碼幀個數分配幀內編碼幀碼率。
當前碼率控制單元的幀內編碼幀個數和幀間編碼幀個數預先設置,以公式表示如下,其中,當前碼率控制單元的總目標碼率記為size,幀內編碼幀個數記為numi,幀間編碼幀個數記為nump,幀內/幀間目標碼率比值記為c。
上述的幀內編碼幀碼率分配方法,在當前幀圖像為設定幀序列的幀內編碼幀時,分別假設當前幀圖像為幀內編碼幀和幀間編碼幀,采用對應的編碼方式將當前幀圖像編碼為幀內編碼幀以及幀間編碼幀,并計算對應的幀內編碼代價和幀間編碼代價,根據幀內編碼代價和幀間編碼代價的比值確定幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值,且?guī)瑑染幋a幀目標碼率和幀間編碼幀目標碼率的比值與幀內編碼代價和幀間編碼代價的比值呈正相關,根據計算的幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值計算得到幀內編碼幀碼率。通常,視頻運動劇烈,圖像之間的相關性較小時,幀間編碼幀為了達到一定視頻質量,所需碼率較高;反之,對于比較靜止的視頻,幀間編碼幀所需碼率較低。因此,根據幀內編碼代價和幀間編碼代價的比值確定幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值,進而根據計算的幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值計算得到的幀內編碼幀碼率,能夠真實反應當前幀圖像的畫面的實際場景,不受前一個序列gop的碼率和量化參數的影響,分配的幀內編碼幀碼率的準確率高,進而提高視頻編碼的畫面質量。
在一個具體的實施例中,根據幀內/幀間編碼代價比值確定幀內/幀間目標碼率比值,具體地可采用分段函數實現。通過對幀內/幀間編碼代價比值進行分段,每段對應不同的幀內/幀間目標碼率比值。具體地,步驟s408包括以下步驟1和步驟2:
步驟1:將幀內/幀間編碼代價比值與各預設閾值進行比較,確定幀內/幀間編碼代價比值對應的閾值區(qū)間。
步驟2:根據對應閾值區(qū)間確定幀內/幀間編碼代價比值對應的幀內/幀間目標碼率比值,幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關。
預先根據經驗和壓縮效率設置有置閾值th1,th2,…,thj,各閾值對應有閾值區(qū)間,各閾值為其對應閾值區(qū)間的邊界值。一種實施方式中,預先根據經驗和壓縮效率設置有三個閾值如下:
對應的,各閾值對應有四個閾值區(qū)間,分別為(-∞,2),[2,4),[4,7)以及[7,+∞),通過ipcost和各預設閾值進行比較,確定幀內/幀間編碼代價比值對應的閾值區(qū)間。
各閾值區(qū)間設置有對應的常數或函數,根據閾值區(qū)間確定幀內/幀間編碼代價比值對應的幀內/幀間目標碼率比值,幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關。即幀內/幀間編碼代價比值越大,幀內/幀間目標碼率比值也越大,反之,幀內/幀間編碼代價比值越小,幀內/幀間目標碼率比值也越小。一種實施方式的幀內/幀間目標碼率比值如下:
在本實施例中,各閾值區(qū)間設置有對應的常數,由于幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關,因而各閾值區(qū)間的常數應當隨著閾值的遞增而遞增。在確定幀內/幀間編碼代價比值對應的閾值區(qū)間,該閾值區(qū)間對應的常數即為幀內/幀間編碼代價比值對應的幀內/幀間目標碼率比值。
在另一種實施方式中,各閾值區(qū)間設置有對應的函數,用于計算幀內/幀間目標碼率比值。在確定幀內/幀間編碼代價比值對應的閾值區(qū)間,根據該閾值區(qū)間對應的函數計算即可得到幀內/幀間編碼代價比值對應的幀內/幀間目標碼率比值。
上述的幀內編碼幀碼率分配方法,通過采用將幀內/幀間編碼代價比值分為多個區(qū)間,每個區(qū)間對應不同的幀內/幀間目標碼率比值,不同的區(qū)間可對應不同的視頻類型,從而能夠實現針對不同視頻類型調整幀內編碼幀碼率,有助于提高視頻壓縮效率和視頻編碼質量。
在再一個實施例中,在步驟s302和步驟s402之前,還包括:對原分辨率的視頻圖像進行下采樣處理。
下采樣即降采樣或縮小圖像,通過對原分辨率的視頻圖像進行下采樣處理,能夠使得圖像符合顯示區(qū)域的大小,并生成對應圖像的縮略圖。預編碼為對下采樣處理后的當前幀圖像進行預編碼,進而提高預編碼速度。
本實施例中,可以采用不同的下采樣比值(即原分辨率與目標分辨率的比值)進行下采樣。下采樣比值為ds:1時,表示每ds個像素采樣1個像素,ds為大于1的整數。在一個具體的實施方式中,下采樣比值為2:1,即如果原始圖像長、寬分別為a、b,則下采樣圖像長、寬分別為
圖5為再一個實施例中幀內編碼幀碼率分配方法的流程示意圖,如圖5所示,該方法包括以下步驟:
s502,對原分辨率的視頻圖像進行下采樣處理。
下采樣即降采樣或縮小圖像,通過對原分辨率的視頻圖像進行下采樣處理,能夠使得圖像符合顯示區(qū)域的大小,并生成對應圖像的縮略圖。預編碼為對下采樣處理后的當前幀圖像進行預編碼,進而提高預編碼速度。
s504,在當前幀圖像為設定幀序列的幀內編碼幀時,對當前幀圖像進行預編碼。預編碼包括將當前幀圖像編碼為幀內編碼幀和幀間編碼幀。
具體地,在當前幀圖像為設定的幀內編碼幀時,分別假設當前幀圖像為幀內編碼幀和幀間編碼幀,采用對應的編碼方式將當前幀圖像編碼為幀內編碼幀以及幀間編碼幀。
預編碼的過程與實際編碼過程相同。在其它的實施方式中,預編碼也可以簡化編碼模塊,提高編碼速度。例如,簡化編碼模式的選擇,從9種編碼模式中選中最優(yōu)模式(hevc在正常幀內編碼時需要從35種編碼模式中選中最優(yōu)模式)。
s506,計算對應的預編碼代價。預編碼代價包括:將當前幀圖像編碼為幀內編碼幀得到的幀內編碼代價、和將當前幀圖像編碼為幀間編碼幀得到的幀間編碼代價。
對應的編碼代價采用的公式可以為:cost=d+λr;其中,cost為編碼代價,d表示編碼單元對應的圖像編碼塊的失真程度,d采用絕對差值和sad(絕對誤差和)運算獲取,λ為拉格朗日常數,r表示編碼單元對應的圖像編碼塊占用的比特數目。在其它的實施方式中,編碼代價也可以只用d表示,即cost=d。在其它的實施方式中,還可以根據預測殘差估計編碼代價。
計算的幀內編碼代價越大,表示如果當前幀圖像為幀內編碼幀,為了達到相同視頻質量所需碼率越高,相反,計算的幀內編碼代價越小,表示如果當前幀圖像為幀內編碼幀,為了達到相同視頻質量所需碼率越低。
計算的幀間編碼代價越大,表示如果當前幀圖像為幀間編碼幀,為了達到相同視頻質量所需碼率越高,相反,計算的幀間編碼代價越小,表示如果當前幀圖像為幀間編碼幀,為了達到相同視頻質量所需碼率越低。
s508,計算當前幀圖像的幀內/幀間編碼代價比值,幀內/幀間編碼代價比值為當前幀圖像的幀內編碼代價和幀間編碼代價的比值。
通常而言,如果視頻運動劇烈,圖像之間的相關性較小時,幀間編碼幀為了達到一定視頻質量,所需碼率較高;反之,對于比較靜止的視頻,幀間編碼幀所需碼率較低。
分析當前幀圖像的幀內/幀間編碼代價比值,該比值等于幀內編碼代價除以幀間編碼代價。如果幀內/幀間編碼代價比值低,說明幀間編碼幀需要更多的碼率,在相同目標碼率下應為幀內編碼幀分配較少的碼率;反之如果幀內/幀間編碼代價比值高,則為幀內編碼幀分配較多的碼率。將幀內編碼代價記作icost,幀間編碼代價記作pcost,幀內編碼代價和幀間編碼代價的比值記作ipcost,則公式可表示為:
s510,將幀內/幀間編碼代價比值與各預設閾值進行比較,確定幀內/幀間編碼代價比值對應的閾值區(qū)間。
s512,根據對應閾值區(qū)間確定幀內/幀間編碼代價比值對應的幀內/幀間目標碼率比值,幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關。
預先根據經驗和壓縮效率設置有置閾值th1,th2,…,thj,各閾值對應有閾值區(qū)間,各閾值為其對應閾值區(qū)間的邊界值。通過ipcost和各預設閾值進行比較,確定幀內/幀間編碼代價比值對應的閾值區(qū)間。
各閾值區(qū)間設置有對應的常數或函數,根據閾值區(qū)間確定幀內/幀間編碼代價比值對應的幀內/幀間目標碼率比值,幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關。即幀內/幀間編碼代價比值越大,幀內/幀間目標碼率比值也越大,反之,幀內/幀間編碼代價比值越小,幀內/幀間目標碼率比值也越小。
s514,獲取視頻幀率,根據視頻幀率以及預先設置的每秒目標碼率和幀個數計算得到總目標碼率。
幀率是用于測量顯示幀數的量度,即每秒圖像的數量,幀率由視頻采樣決定。每秒目標碼率和幀個數預先設定。當前碼率控制單元的總目標碼率等于,每秒目標碼率除以幀率,再乘以當前碼率控制單元中的幀個數。
s516,根據總目標碼率、幀內/幀間目標碼率比值以及預設的幀內編碼幀個數和幀間編碼幀個數分配幀內編碼幀碼率。
當前碼率控制單元的幀內編碼幀個數和幀間編碼幀個數預先設置,以公式表示如下,其中,當前碼率控制單元的總目標碼率記為size,幀內編碼幀個數記為numi,幀間編碼幀個數記為nump,幀內/幀間目標碼率比值記為c。
上述的幀內編碼幀碼率分配方法,通過采用將幀內/幀間編碼代價比值分為多個區(qū)間,每個區(qū)間對應不同的幀內/幀間目標碼率比值,不同的區(qū)間可對應不同的視頻類型,從而能夠實現針對不同視頻類型調整幀內編碼幀碼率,有助于提高視頻壓縮效率和視頻編碼質量。并且,分配的幀內編碼幀碼率不受前一個序列gop的碼率和量化參數的影響,分配的幀內編碼幀碼率的準確率高,進而提高視頻編碼的畫面質量。
圖6為一種幀內編碼幀碼率分配裝置的結構示意圖。如圖6所示,幀內編碼幀碼率分配裝置包括預編碼模塊602、編碼代價計算模塊604和分配模塊606。
預編碼模塊602,用于在當前幀圖像為設定幀序列的幀內編碼幀時,對當前幀圖像進行預編碼,預編碼包括將當前幀圖像編碼為幀內編碼幀。
編碼代價計算模塊604,用于計算對應的預編碼代價。
分配模塊606,用于根據預編碼代價分配幀內編碼幀碼率,分配的幀內編碼幀碼率與預編碼代價呈正相關。
上述的幀內編碼幀碼率分配裝置,由于對預編碼代價是通過對當前幀圖像進行預編碼得到,而預編碼包括將當前幀圖像編碼為幀內編碼幀,若預編碼代價大,則表示為了達到相同視頻質量幀內編碼幀所需碼率高,若預編碼代價小,表示為了達到相同視頻質量幀內編碼幀所需碼率低,因而根據預編碼代價分配的幀內編碼幀碼率能夠真實反應當前幀圖像的畫面的實際場景,不受前一個序列gop的碼率和量化參數的影響,分配的幀內編碼幀碼率的準確率高,進而提高視頻編碼的畫面質量。
在另一個實施例中,預編碼還包括將當前幀圖像編碼為幀間編碼幀。預編碼代價包括:將當前幀圖像編碼為幀內編碼幀得到的幀內編碼代價、和將當前幀圖像編碼為幀間編碼幀得到的幀間編碼代價。
如圖7所示,分配模塊606包括:編碼代價比值計算模塊6061、目標碼率比值確定模塊6062、總目標碼率獲取模塊6063和碼率分配模塊6064。
編碼代價比值計算模塊6061,用于計算當前幀圖像的幀內/幀間編碼代價比值,幀內/幀間編碼代價比值為當前幀圖像的幀內編碼代價和幀間編碼代價的比值。
目標碼率比值確定模塊6062,用于根據幀內/幀間編碼代價比值確定幀內/幀間目標碼率比值;幀內/幀間目標碼率比值為幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值,幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關。
具體地,目標碼率比值確定模塊6062,用于將幀內/幀間編碼代價比值與各預設閾值進行比較,確定幀內/幀間編碼代價比值對應的閾值區(qū)間,并根據對應閾值區(qū)間確定幀內/幀間編碼代價比值對應的幀內/幀間目標碼率比值,幀內/幀間目標碼率比值與幀內/幀間編碼代價比值呈正相關。
總目標碼率獲取模塊6063,用于獲取總目標碼率。
具體地,總目標碼率獲取模塊6063用于獲取視頻幀率,并根據視頻幀率以及預先設置的每秒目標碼率和幀個數計算得到總目標碼率。
碼率分配模塊6064,用于根據總目標碼率、幀內/幀間目標碼率比值以及預設的幀內編碼幀個數和幀間編碼幀個數分配幀內編碼幀碼率。
上述的幀內編碼幀碼率分配裝置,在當前幀圖像為設定幀序列的幀內編碼幀時,分別假設當前幀圖像為幀內編碼幀和幀間編碼幀,采用對應的編碼方式將當前幀圖像編碼為幀內編碼幀以及幀間編碼幀,并計算對應的幀內編碼代價和幀間編碼代價,根據幀內編碼代價和幀間編碼代價的比值確定幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值,且?guī)瑑染幋a幀目標碼率和幀間編碼幀目標碼率的比值與幀內編碼代價和幀間編碼代價的比值呈正相關,根據計算的幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值計算得到幀內編碼幀碼率。通常,視頻運動劇烈,圖像之間的相關性較小時,幀間編碼幀為了達到一定視頻質量,所需碼率較高;反之,對于比較靜止的視頻,幀間編碼幀所需碼率較低。因此,根據幀內編碼代價和幀間編碼代價的比值確定幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值,進而根據計算的幀內編碼幀目標碼率和幀間編碼幀目標碼率的比值計算得到的幀內編碼幀碼率,能夠真實反應當前幀圖像的畫面的實際場景,不受前一個序列gop的碼率和量化參數的影響,分配的幀內編碼幀碼率的準確率高,進而提高視頻編碼的畫面質量。
在另一個實施例中,請繼續(xù)參閱圖7,幀內編碼幀碼率分配裝置還包括:下采樣模塊601,用于對原分辨率的視頻圖像進行下采樣處理;預編碼模塊對下采樣處理后的當前幀圖像進行預編碼。
下采樣即降采樣或縮小圖像,通過對原分辨率的視頻圖像進行下采樣處理,能夠使得圖像符合顯示區(qū)域的大小,并生成對應圖像的縮略圖。預編碼為對下采樣處理后的當前幀圖像進行預編碼,進而提高預編碼速度。
本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一非易失性的計算機可讀取存儲介質中,如本發(fā)明實施例中,該程序可存儲于計算機系統的存儲介質中,并被該計算機系統中的至少一個處理器執(zhí)行,以實現包括如上述各方法的實施例的流程。其中,所述的存儲介質可為磁碟、光盤、只讀存儲記憶體(read-onlymemory,rom)或隨機存儲記憶體(randomaccessmemory,ram)等。
以上所述實施例的各技術特征可以進行任意的組合,為使描述簡潔,未對上述實施例中的各個技術特征所有可能的組合都進行描述,然而,只要這些技術特征的組合不存在矛盾,都應當認為是本說明書記載的范圍。
以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對發(fā)明專利范圍的限制。應當指出的是,對于本領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權利要求為準。