如何给小白解释什么是编解码器
點擊上方“LiveVideoStack”關注我們
翻譯 | Alex
技術審校 | 章琦
本文來自OTTVerse,作者為Krishna Rao Vijayanagar。
編解碼器
Easy Tech
#005#
在本篇文章中,我們將學習視頻編解碼器、視頻編碼標準以及在數據壓縮和解壓縮的過程中,視頻編碼標準是如何發揮作用的。
在前面介紹數據壓縮的文章中,我們已經證實,數據預測對于減少數據體積而言至關重要。
在預測的過程中,為了向另一端傳達壓縮信息的含義和句法,我們最終設計了一門“語言”。這種語言的設計很微妙,我們在本篇文章中將重點說明。
數據壓縮和創造語言
為了理解視頻編解碼器,我將請你傳送下列英語字母序列給你的朋友。但是,有限制條件:我們手邊的系統比較落后,它要用1字節的空間存儲一個字母或數字。
數據:
<data>A A A A A A A A A A A A A A A A A A A A B </data>注意:直接告訴你,這里有20個A和1個B(擔心你數不清楚),你要怎么做呢?
答案:我要說的是,有兩種顯而易見的技術能夠解決此問題(我們排除了所有高級熵編碼技術以假設你從未聽說它們)。
方法1:每個A和B都使用1個字節存儲,一共占用21字節的存儲空間。
方法2:使用如下方法:
第一個字符“A”用1個字節存儲
數字“20”用1個字節存儲
字母“B”用1個字節存儲
數字“1”用1個字節存儲
我們最后就得出:
A20B1只用了4個字節,厲害吧!
好了,我們把稱為碼流的A20B1傳給你的朋友吧!
等等!他該如何理解這個碼流?除了你我以外,其他人根本不知道它是什么意思。是的!這就是我們需要定義一種語言來處理數據的原因。這種語言需要設置明確的規則來管理“編碼或壓縮”數據的“解碼和解壓縮”。
我們暫且將這種語言稱為?Compresslt。
CompressIt?的規則非常簡單:
奇數字節代表要存儲的字母
偶數字節代表連續字母的存儲次數
設計完我們的語言后,我現在可以將 CompressIt 的規范發布在網上以供其他工程師閱讀并發現可能存在的漏洞或錯誤。
一個只有兩行字的文件中,還會有什么錯誤?
我想說的是,非常有可能。比如,有人可能會站出來說:“嘿,伙計們!如果一個字母重復256次怎么辦?我這么問是因為256已經超過了一個字節所能容納的值。”
糟糕!我們犯了一個大錯!但你看,這也說明了peer review的重要性!現在,語言創造者(你和我)需要重新制定一個更好的規范,并再次發給大家review。
整個過程會一直持續,直到解決所有問題,而且所有人(編解碼器工程師)將在這種語言規范上達成一致。
? ?編解碼器誕生了!
我一直在上面的例子中使用“語言”一詞,但實際上你和我剛才做的正是在定義和實現一個編解碼器——數據壓縮和解壓縮方案。
在現實世界中,編解碼器是這樣誕生的(大部分情況):
一群被稱為“編解碼委員會”的人聚到一起,然后:
告訴全世界,現在需要新的編解碼器并明確規定要求(如:提高50%的壓縮率、能壓縮8K視頻、新的色彩格式等)
征求貢獻、提議和建議,并評估其可行性
協調所有必要的文檔、測試和實驗,以確定生成編解碼器的規則和工具
最后,發布編解碼器的標準供全世界使用
每一個視頻編解碼器(H.264/AVC、AV1和VP9等)都需要經歷這樣一個過程。現在你知道編解碼器是如何誕生的了吧!?
但是,有必要詳細解釋視頻編解碼器嗎?直接發布軟件不行嗎?這種標準難道不是在浪費時間和金錢嗎?
? ?明確規范編解碼器對行業有何幫助?
好問題!為了更好地理解,讓我們回到上面Compresslt的例子。
如果俄羅斯的某位工程師想要為Compresslt編解碼器寫一個解碼器,他需要做的就是拿到一份編解碼器的規范并理解它。
在學習Compresslt的過程中,他意識到他需要:
獲取傳入的數據流或者讀取使用CompressIt壓縮的文件
讀取奇數字節并用它表示字母(比如X)
讀取偶數字節(N)并用它表示出現N次字母X
重復這個過程直至文件結束
準確的說,這就是編解碼器標準所實現的事——它明確規定了碼流的外觀和行為,以便所有人都可以為它編寫解碼器。
它不會告訴你如何創建碼流,只會告訴你碼流看起來應該是什么樣子的。
下面這個現實中的例子充分說明了視頻編解碼器及其規范的重要性。
假如你在網上看到了這樣的新聞:“蘋果將在下一個發布的版本中添加對HEVC的支持”,這意味著蘋果的技術團隊:
下載了一份HEVC規范
閱讀規范(一遍又一遍,一遍又一遍——打開規范,你就會明白為什么要這么做)
編寫一個程序,可以解碼HEVC碼流
計劃在下一次軟件更新時發布該程序
他們為什么能夠做到這些?
因為一群工程師聚在一起創建了HEVC視頻壓縮標準,并發布了一份文件,詳細說明了解碼的每個步驟和碼流的語義,這樣世界上的任何人都能為它編寫解碼器。
? ?編解碼器規范會定義編碼器嗎?
不會,但是這個問題有些歧義,讓我來解釋一下。
編解碼器規范會告訴你語言中存在哪些工具,編碼器的輸出應該是什么樣子,以及解碼器會如何解析它。
但這也意味著你可以以任意一種方式編寫編碼器——只要編碼器產生的碼流符合規范的要求。這是我最想強調的重點。
換言之,
如果你正在使用CompressIt 壓縮數據,你不能切換奇數字節和偶數字節的含義,這樣所有解碼器都會將它們混淆。
但是,你可以使用任意技術計數和記錄連續的字母,以及它們重復的次數。如果你愿意的話,你還可以用量子計算機!只要你能確保從編碼器輸出的碼流符合規范。
注意:你肯定會因為使用量子計算機而被解雇,但你仍然能編寫一個有效的編碼器,是不是看到了一線希望?
很好,現在你需要回答一個問題。
當你編寫編碼器或者解碼器的時候,你怎么能知道它會順利運行呢?換句話說,有沒有可以比對代碼的黃金標準或者參考編碼器/解碼器?
? ?測試模型和參考編碼器&解碼器
為了滿足大家對黃金標準和參考的需求,編解碼器委員會和工作組發布了“測試模型”和參考編碼器和解碼器。
但它們并不會優化速度和性能,僅包含符合規范的編碼器和解碼器的實現,你可以使用它們來驗證編碼器實現生成的碼流。
此外,委員會經常發布符合標準的編碼碼流。解碼器制造商可以使用這些碼流來測試他們的軟件或硬件是否遵循編解碼器規范。
? ?結束語
我希望你現在已經理解了什么是視頻編解碼器、視頻編碼標準以及它們與編碼器和解碼器開發之間的關系,在后續的文章中,我們將一起學習視頻編解碼器中的各類工具是如何工作的。
致謝
本文已獲得作者Krishna Rao Vijayanagar授權翻譯和發布,特此感謝。
原文鏈接:https://ottverse.com/what-is-a-video-codec/
延伸閱讀:
視頻編碼完全指南
Easy Tech:什么是I幀、P幀和B幀?
為什么視頻壓縮如此重要
講師招募
LiveVideoStackCon 2022 音視頻技術大會 上海站,正在面向社會公開招募講師,無論你所處的公司大小,title高低,老鳥還是菜鳥,只要你的內容對技術人有幫助,其他都是次要的。歡迎通過 speaker@livevideostack.com 提交個人資料及議題描述,我們將會在24小時內給予反饋。
喜歡我們的內容就點個“在看”吧!
總結
以上是生活随笔為你收集整理的如何给小白解释什么是编解码器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LiveVideoStack Meet
- 下一篇: 互联网拥塞控制终极指南