當前位置:網站首頁>什麼是Per-Title編碼?
什麼是Per-Title編碼?
2022-07-23 14:42:06【LiveVideoStack】
▲掃描圖中二維碼了解音視頻技術大會更多信息▲
翻譯、編輯:Alex
技術審校:趙軍
本文來自OTTVerse,作者為Krishna Rao Vijayanagar。
Easy-Tech #036#
Per-Title(按主題)編碼 是指為了節省碼率、存儲空間以及ABR傳輸帶寬為每部電影(基於其獨特的空間和時間屬性以及複雜度)調整ABR碼率階梯(bitrate ladder)。換言之,Per-Title編碼的目的就是根據電影特點(慢動作、體育、動畫、卡通內容等)為每部電影生成一組不同的編碼或者壓縮參數。
接下來,我們將了解Per-Title編碼所涉及的編碼過程以及它為流媒體提供商帶來的優勢。
什麼是Per-Title編碼?從哪裏開始?
最早提到Per-Title編碼的地方是Netflix的博客,隨後IEEE發錶了名為“Complexity-based consistent-quality encoding in the cloud(《雲上基於複雜度的穩定質量編碼》”的論文。該論文的摘要中有一句話很有趣:
為了生產最佳質量的視頻流,系統需要使編碼適應每條內容(以一種自動、可擴展的方式)。在本篇論文中,我們描述了兩個算法優化,用於基於雲的分布式編碼管道,它們分別是:(1)針對碼率-分辨率選擇的Per-Title複雜度分析;(2)針對穩定質量編碼的Per-chunk碼率控制。相對於簡單的“一刀切”的編碼系統,這些改進帶來了很多優勢,包括更高效的帶寬使用和更穩定的視頻質量。
上文這句“為了生產最佳質量的視頻流,系統需要使編碼適應每條內容”很好地總結了Per-Title編碼。
編碼器需要“理解”每一個視頻內容,並調整壓縮設置和參數與之適應,這樣就有可能達到最佳視頻質量。
| 傳統的ABR和壓縮過程發生了什麼?
在使用ABR技術的傳統視頻傳輸方法中,一般是創建一個碼率階梯(或者一組profile),並將其應用於內容庫中的所有電影。關於ABR技術的更多介紹,請閱讀這篇文章:理解ABR及其工作原理。
比如,碼率階梯有一個6mbps 1080p的profile,並應用到了所有的分類——無論是動漫、體育還是脫口秀。
然而,這種方法存在一個問題:每部電影的特點和複雜度並不相同。
所有電影看上去都不一樣:
有些電影擁有快速動作場景(體育比賽、動作片),有些在動作上較慢(《肖申克的救贖》)。有些動畫片比較簡單(《辛普森一家》),有些卻擁有高度細節(《玩具總動員》)。所有電影都有它自己的“基因”和特點,所以每部制作出來的電影都與眾不同。
那麼,為什麼都要以相同方式壓縮電影,使用相同編碼器設置並使用相同碼率階梯進行ABR視頻傳輸呢?
讓我們來看看下文中來自《辛普森一家》、足球比賽和Park Joy測試序列的三張截圖,它們看起來都不一樣,是吧?

容易壓縮!

真的很難壓縮!

因為視頻中出現了水、草和樹葉,也很難壓縮!
現在,上述這些例子依賴於你對於視頻質量優劣的主觀判斷。讓我們看下Netflix技術博客上的數字實驗。下方的RD圖描述了不同序列在不同目標碼率下的碼率與視頻質量 (PSNR)。
看看圖中的變化有多大!在5000 kbps,一些序列擁有高達45 dB甚至更高的PSNR分值,而其他序列只有36 dB。這清楚地錶明:沒有兩個視頻是相同的,應該根據它們各自的特點來進行處理。
用更專業的術語來說就是,這些視頻的時空複雜度及其特征之間存在差异,所以利用這一點來有效壓縮視頻會是一個好主意。

來源:Netflix博客[1]
因此,Per-Title編碼就是從一個視頻變化到(或適應)另一個視頻的編碼。
使用Per-Title編碼,哪些變量是可以改變的?
使用Per-Title編碼時,很多編碼和傳輸參數都會發生變化,比如:
碼率階梯中的分辨率選擇: 某些title可能會生成720p的質量內容(看上去也很棒),對於這類視頻,你也許不必將它切換成更高質量內容的1080p。
每個分辨率所選擇的碼率: 這是Per-Title編碼中最重要的部分。如果你必須生成一組視頻分辨率(1080p、720p等),那麼你可以為其中每個分辨率改變碼率。也就是說,你會發現自己可能不是在6mbps時生成1080p的視頻,而是在3mbps生成1080p,並達到相同的視頻質量!
碼率階梯中的profile數量: 這是Per-Title編碼的又一大優勢。通過變換碼率-分辨率組合,也許能够减少你需要在碼率階梯中產生的profile數量。
在使用Per-Title編碼時,其參數的範圍更大。在更精細的層面,你可以研究編碼器設置並對它們進行調整:
過濾器的强度
GOP長度
啟用和禁用二分之一像素或者四分之一像素運動估計
運動估計的搜索範圍
GOP結構(P幀與B幀的比率)
以及更多取决於如何設置視頻編解碼器。這裏的首要重點應該是了解你的視頻複雜度,視頻編解碼器的能力,以及如何結合你所有的數據和視頻智能分析來有效壓縮視頻。
如何實現Per-Title編碼?
Per-Title編碼最重要的特點就是它能够“理解”一部電影的複雜度、其中的場景和變化等。方法就是:通過收集電影信息和統計數據,並使用這些數據進行壓縮。
這就使我們需要了解多遍編碼(multi-pass encoding)的概念,其中第一遍(或者第N 遍)被用來收集電影相關信息。在最後的第M遍,使用這些信息來編碼視頻。
哪些信息對理解電影複雜度有所幫助?讓我們來看看:
全局速度或運動矢量: 它將告訴我們場景移動的速度,可以被用來區分脫口秀(其中沒有人移動)和美國職業橄欖球比賽(充滿快速攝像機的移動)。
空間複雜度: 電影中的大部分畫面是像《辛普森一家》中的純色塊?還是充滿了年代電影中那種複雜的圖案?
時間複雜度: 想要理解電影內容如何快速地從一幀切換到另一幀,這又與上文中的全局運動向量和速度有關。
這些都是非常重要的視頻特點,它們决定了如何在確定的比特預算前提下有效壓縮視頻。簡單來說就是,如果你了解你的視頻屬性,你就可以調整編碼器設置從而達到最佳視頻質量(比如被要求壓縮視頻到x mbps)
所以,在你收集了這些信息以後,你就可以在視頻編解碼器上執行另一個pass來將視頻壓縮到正確碼率(由你的凸包算法决定)。
Per-Title編碼的優勢
執行Per-Title編碼擁有許多優勢,比如:
節省存儲空間: 通過使用Per-Title編碼改變碼率和分辨率,你可以高效壓縮視頻,且節省很多存儲空間。
節省傳輸成本: 因為每個被編碼的title都使用了一個最適合它的碼率階梯,所以你馬上就會看到CDN傳輸成本的節省。除此之外,終端用戶也將下載較小的文件,以此减少緩沖的發生和首屏延遲。
節省編碼時間: 再者,由於編碼階梯會為每部電影而單獨調整,你可以很容易地看到編碼時間的節省。比如,如果我們不使用1080p編碼《辛普森一家》的片段,而是使用720p並獲得了相同視覺質量,那麼分辨率的下降會提昇編碼器的速度。這主要是因為分辨率的下降導致運動估計和補償算法的工作减少了。
提昇質量: 通過調整每部電影或者每個主題的編碼器、分辨率、碼率、幀率以及其他設置,你可以充分利用編碼器,並獲取最佳視頻質量。這將會帶來很棒的用戶體驗!
因此,通過切換到Per-Title編碼方案,你可以節省大量存儲、傳輸和編碼時間上的成本。
今天就到這裏,我們下次再見,保重!Happy streaming!
注釋:
[1] https://netflixtechblog.com/per-title-encode-optimization-7e99442b62a2
致謝:
本文已獲得作者Krishna Rao Vijayanagar授權翻譯和發布,特此感謝。
原文鏈接:
https://ottverse.com/what-is-per-title-encoding/
版權聲明
本文為[LiveVideoStack]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207230918028960.html
邊欄推薦
- 【STM32學習】(21)STM32實現步進電機
- 繪制帶有查詢條件變量的table【grafana】
- 認識接口
- LABVIEW:創建一個VI
- 界面開發框架DevExtreme Gantt控件——可導出PDF、排序任務
- MySQL命令行導出導入數據庫和數據錶
- 有數大數據基礎平臺之智能運維平臺EasyEagle介紹:集群隊列篇
- 你記住JS中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX嗎?
- 【Azure 事件中心】Azure Event Hub 新功能嘗試 -- 异地灾難恢複 (Geo-Disaster Recovery)
- unity 照片牆
猜你喜歡
隨機推薦
- *精度優化*優化策略1:網絡+SAM優化器
- AXI協議詳解
- js--Date對象&三元錶達式
- leetcode-買賣股票的最佳時機含手續費
- unity中3dUI或者模型始終面向攝像機,跟隨攝像機視角旋轉丨視角跟隨丨固定視角
- JVM初探
- 移動端測試之appium環境部署【未完待續】
- 關於後臺掛載,進程管理的學習
- 讀《高效閱讀法-最劃算的自我投資》有感
- shell基本命令
- 從鍵盤輸入一串字符,輸出不同的字符以及每個字符出現的次數。(輸出不按照順序)運用String類的常用方法解題
- 2019_AAAI_ICCN
- 影響接口查詢速度的情况
- 《STL適配器》stack和queue
- 淺析緩存的讀寫策略
- 類和對象(1)
- 實驗二 YUV
- 大咖訪談 | 開源社區裏各種奇怪的現狀——夜天之書陳梓立tison
- synchronized是如何實現的
- 【arXiv2022】GroupTransNet: Group Transformer Network for RGB-D Salient Object Detection
- BGP機房的優點
- 真人踩過的坑,告訴你避免自動化測試常犯的10個錯誤
- 判斷是否為void類型
- C語言——幾道C語言經典習題
- openvino_datawhale
- C語言基礎知識梳理(一)
- Redis源碼與設計剖析 -- 7.快速列錶
- 比特,比特,字節,字的概念與區別
- 項目部署(簡版)
- JDBC的學習以及簡單封裝
- [pytho-flask筆記5]藍圖簡單使用
- Web Component-自定義元素的生命周期
- 數倉4.0筆記——業務數據采集
- 數倉4.0筆記——用戶行為數據采集四
- 對.h5文件的迭代顯示,h5py數據操作
- 常用數學知識匯總
- “東數西算”下數據中心的液冷GPU服務器如何發展?
- 硬件知識1--原理圖和接口類型(基於百問網硬件操作大全視頻教程)
- 鋼結構基本原理複習
- Unity3d:UGUI源碼,Rebuild優化

