近期 Google 已經開始研究 VP10 了,VP10 是一個由 WebM 和 Motroska 包含的開放、免費視訊編解碼器。Google 也已利用 VP10 來處理 YouTube 4K 視訊。
目前網際網路上使用最多的視訊編碼標準是 Google 研發、無版權費的 VP9。VP9 作為 VP8 的後繼產品,主要競爭對手是 MPEG 的高效視訊編碼標準 HEVC。和 HEVC 相比,VP9 在網路瀏覽器中有更良好的支援性。它也以其優秀的視訊編碼質量和壓縮效率而被廣泛應用於網際網路視訊網站中。
從上圖可以看出 Firefox、Chrome、Opera 等主流瀏覽器都支援。據統計,截止到 2017 年初,大約有 75% 的瀏覽器已經支援 VP9。
那麼 VP9 是如何在原有的視訊編碼標準的基礎上,提升視訊編碼質量和壓縮效率的呢?
VP9 編碼效率提高 50% 以上
VP9 是一種基於巨集塊的變換編碼格式,與 HEVC 等視訊編碼標準相比,VP9 等位元流格式的視訊編碼標準相對簡單。
與 VP8 相比,VP9 視訊編碼標準在技術上有許多優化:
- 支援使用 64×64 畫素的編碼單元,這在高解析度視訊中效果最為明顯;
- 改善運動向量的預測,除了 VP8 的四種模式(average/"DC"、 "true motion"、horizontal、vertical),VP9 還支援畫素的線性外推的 6 個傾斜方向的幀內預測;
- 支援將幀分割為具有特定相似性的區域;
- 對運動向量的第 8 畫素精度、三種可切換的子畫素插值濾波器、參考運動向量、熵編碼、環路濾波、ADST、DCT 等進行優化。
圖片分割槽優化
VP9 將圖片分成 64x64 大小的巨集塊 —— super blocks。super blocks 按照從左到右,從上到下的光柵順序處理。同時與其他編解碼器相同,super blocks 最小可以細分到 4x4 。細分巨集塊方式與 HEVC 一樣通過遞迴四叉樹編碼結構完成,但是 VP9 支援水平或垂直細分。
此外,VP9 也支援拼貼,圖片會被分解成沿著 super blocks 邊界拼貼成網格。與 HEVC 不同的是,這些網格能均勻地分佈,並且有兩個冪數。網格的寬度 256 畫素與 4096 畫素之間。
位元流編碼
VP9 使用 8 位算術編碼引擎 bool-coder 壓縮位元流。概率模型對整個幀是固定的,所有概率模型在幀資料開始解碼之前都是已知的。這些概率模型儲存在幀的上下文中,解碼器維護在上下文中的四個概率模型。
每一幀編碼組成:
- 未壓縮的標題:十幾個位元組,包含像圖片大小,迴圈過濾器強度等;
- 壓縮標頭:傳輸用於幀的 Bool 編碼部分;
- 壓縮幀資料(布林編碼資料):重建幀所需的資料,包含巨集塊分割槽大小,運動向量,幀內模式和變換系數。
VP9 與 VP8 不同的是,不存在資料分割槽,所有資料型別以 super blocks 編碼順序交織。
幀內預測
VP9 中的幀內預測類似於 AVC / HEVC 的幀內預測,遵循變換巨集塊分割槽。因此幀內預測操作總是正方形的。比如說,具有 8×8 變換的 16×8 塊會導致兩次 8×8 亮度預測操作。
VP9 有 10 種不同的預測模式,其中 8 個預測模式是定向的。像其他編解碼器一樣,幀內預測需要兩個 1D 陣列,其中包含相鄰畫素塊重構的左側畫素和上側畫素。左側陣列的高度與當前塊的高度相同,上側陣列寬度是當前畫素塊的兩倍。
幀間預測
VP9 幀間預測使用 ⅛ 畫素進行運動補償。一般情況下,運動補償是單向的,每個塊一個運動向量,沒有雙向預測。不過,VP9 也支援“複合預測”(雙向預測),其中每個塊有兩個運動向量並且兩個結果預測樣本被平均。為了避免雙向預測的專利限制, Google 僅在標記為不可顯示的幀中才啟用“複合預測”(雙向預測)。
此外,VP9 提供了一個新功能,每塊可以選擇三種不同的子畫素插值濾波器:
- 正常的第 8 畫素;
- 平滑的第 8 畫素,可以進行平滑或模糊預測;
- 銳利的第 8 畫素, 可以進行銳利預測。
殘差訊號編碼
VP9 支援四種變換大小:32x32、16x16、8x8 和 4x4。這些變換與其他大多數編碼一樣,是 DCT 的近似整數。在幀內編碼巨集塊中,垂直和水平變換路徑中的一者或兩者會是 DST(離散正弦變換)。
雖然 Google 已經在研究 VP10,但是距離 VP10 的全面應用還有較長的時間。VP9 才是目前最具有普及意義的視訊編碼標準。
快速啟用 VP9
目前,又拍雲多媒體處理已支援 VP9 視訊編碼標準。客戶在在進行音視訊處理時,只需把視訊編碼格式設定成 libvpx-vp9,即可自動實現 VP9 視訊編碼標準,為終端使用者推送VP9 格式。
推薦閱讀: