H.264編解碼(NAL)

在我們的日常生活中,比如有緩存電影或者是發送視頻的需求。如果沒有視頻壓縮,一部手機只能存幾分鐘視頻,1TB 硬盤也裝不下幾部電影,用 4G 網絡發一段 1 分鐘視頻,可能需要幾十分鐘(甚至傳不完),在線看視頻更是完全不可能。所以就引入了H264這樣的壓縮技術。這邊文章更注重如何傳輸(NAL)。

如何進行壓縮

空間冗余:一幀圖像中可能會有一片像素是相似的,就可以進行壓縮

時間冗余:幾幀圖像之間會有一些像素部分變化較小,可以進行壓縮

視頻編碼關鍵點

壓縮比:壓縮比越高,視頻文件越小。

算法復雜度:復雜度越高,對設備性能要求越高,但可能帶來更高的壓縮效率或畫質。

還原度:指編碼后的視頻與原始視頻的畫質接近程度。

壓縮比、算法復雜度、還原度并非孤立存在,而是形成 “不可能三角”,三者相互制約

H.264的2大組成部分(NAL VCL)

VCL:負責 “壓縮視頻內容”,通過幀內 / 幀間預測、變換量化等技術,去除視頻中的冗余信息,生成高效壓縮的核心視頻數據。

NAL:負責 “適配網絡傳輸”,將 VCL 生成的壓縮數據打包成符合網絡傳輸規則的單元(加起始碼、頭部信息等),確保數據能在網絡中穩定傳輸和解碼。

H.264編碼相關的一些概念

宏塊(macroblock):宏塊內的像素相似度比較高,前面講到的空間冗余就和這個有關

片(slice):片比宏塊大是組成幀的一部分

幀(frame):一幅圖像

I幀:只進行幀內壓縮,圖像較為完整

B幀:參考前后幀得出當前幀

P幀:只參考前一幀得出當前幀

幀率(fps):單位時間內視頻顯示的畫面幀數

以下是一段H.264的文件進行解析,此處要用到工具winhex和SpecialVH264.exe

由實驗結果可知海思平臺編碼出來的H.264碼流都是一個序列包含:1sps+1pps+1sei+1I幀+若干p幀

對應以上兩個實驗結果繼續詳細的介紹H.264的NAL部分:

序列(sequence):給視頻分段,一個序列就是一個視頻段(每個段都參考一個I幀減小誤差)

分隔符:可以看到轉二進制之后都會用一個00 00 00 01進行分割,在數據段部分有兩個00就會用一個03進行分割,以免數據段和分隔符出現重復

nal_ref_idc:表示該幀數據的重要性,因為網絡傳輸難以避免會出現丟包的情況,定義標志位防止重要的包被丟棄

NALU:分隔符后一位就是NALU,用于標識該幀的類型和其重要性,具體可以參考H264(NAL簡介與I幀判斷)

SPS:規定整個視頻的基礎屬性(比如多大尺寸、每秒多少幀),解碼器先看它才知道怎么 “看懂” 整個視頻。

PPS:針對每幀畫面的編碼方式做具體說明(比如怎么壓縮、怎么去噪),指導解碼器處理單幀數據。

SEI:不是必要的,不直接影響畫面內容,但提供與視頻相關的 “額外信息”(如時間戳、版權聲明、畫質增強提示等),輔助解碼器更好地處理或顯示視頻

如何通過SPS和PPS看到詳細的屬性呢

上面是通過SpecialVH264.exe這個工具查看到的,關于每一項的具體意思可以參考H264碼流中SPS PPS詳解這一篇文章

其中有幾個比較重要的屬性

profile:可以理解為定義了編碼工具的集合,不同的profile,包含了不同的編碼技術

level:主要是對碼流的關鍵參數的取值范圍作了限定,與解碼器的處理能力和存儲能力相關聯

對于profile和level可以看h264中profile和level的含義

pic_width_in_mbs_minus1:用于計算圖像的寬度 frame_width = 16 × (pic_width_in_mbs_minus1 + 1);

pic_height_in_map_units_minus1:用來度量視頻中一幀圖像的高度計算公式和寬度一樣

關于海思平臺H.264的一些知識

p幀的個數等于fps-1;
I幀越大則P幀可以越小,反之I幀越小則P幀會越大,可以理解為參考的越少,自己要做的更多;
I幀的大小取決于圖像本身內容,和壓縮算法的空間壓縮部分;
P幀的大小取決于圖像變化的劇烈程度;
CBR和VBR下P幀的大小策略會不同,CBR時P幀大小基本恒定,VBR時變化會比較劇烈;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88828.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88828.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88828.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新手向:Python自動化辦公批量重命名與整理文件系統

本文將詳細介紹如何使用Python實現一個強大的文件批量重命名與整理工具,幫助開發者自動化這一繁瑣過程。本教程面向Python初學者,通過一個完整的項目案例,講解文件系統操作的核心技術。我們將構建的工具將具備以下功能:基于正則表…

C++ 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例

C 左值右值、左值引用右值引用、integral_constant、integral_constant的元模板使用案例一、左值右值1.左值2.右值二、左值引用右值引用1.左值引用2.右值引用總結三、integral_constant四、integral_constant的元模板使用案例1.求最大整數2.內存對齊alignof關鍵字元模板計算內存…

c++算法一

1.雙指針總結:1.復寫0這道題,告訴我們要正難其反,我們從后向前進行重寫,刪除某些數字的時候,我們可以從前向后遍歷,但是增加一些數字的時候會對后面的數據進行覆蓋,所以要從后向前進行2.快樂數涉…

LeetCode-283. 移動零(Java)

283. 移動零 給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 請注意 ,必須在不復制數組的情況下原地對數組進行操作。 示例 1: 輸入: nums [0,1,0,3,12] 輸出: [1,3,12,0,0] 示例 2: 輸入: n…

【數據庫】慢SQL優化 - MYSQL

一、數據庫故障的關鍵點 引起數據庫故障的因素有操作系統層面、存儲層面,還有斷電斷網的基礎環境層面(以下稱為外部因素),以及應用程序操作數據庫和人為操作數據庫這兩個層面(以下稱內部因素)。這些故障中外…

桶排序算法深度剖析

🔍 桶排序算法深度剖析 🎯 核心原理圖解?? 完整算法流程 #mermaid-svg-LyB6SpaZ132X4Wtn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LyB6SpaZ132X4Wtn .error-icon{fill:#552222;}#mer…

對S32K144做的BMS安裝快速開發Simulink庫及BMS例程介紹

前言 本章介紹BMS硬件功能及SimuLink庫為主,捎帶介紹一些例程內容 注意:例程所用的協議均是自定義的 自做的SimuLink庫也會不定期更新 BMS例程的內容不定期維護添加 當前的BMS沒有主動均衡功能,這個有考慮后期加上,當前還處于…

urlencode、html實體編碼、unicode

目錄 urlencode html實體編碼 Unicode編碼 urlencode URL編碼也稱為百分號編碼,用于將URL中的特殊字符轉換為安全傳輸的格式。英文數字一般不編碼 特點: 使用%后跟兩個十六進制數字表示字符 空格編碼為或%20 保留字符(; / ? : & …

【HarmonyOS】元服務概念詳解

【HarmonyOS】元服務概念詳解 最近幾年,我們手里的設備越來越多——手機、平板、手表、車機……光是管理這些設備上的APP就夠頭疼了:下載要流量、安裝占內存、換個設備又得重新弄一遍。有沒有更簡單的方式?HarmonyOS推出的“元服務”&#xf…

vscode/cursor怎么自定義文字、行高、顏色

JetBrains Mono: A free and open source typeface for developers | JetBrains: Developer Tools for Professionals and Teams 首先下載上面的文字,然后右鍵全選,安裝 然后重啟cursor 下載插件Apc Customize UI 點擊設置 把下面的代碼復制進去&…

JavaScript 與 C語言基礎知識差別

一, 變量聲明對比 C語言: int age 20; // 必須指定類型 float price 9.99; char grade A; const double PI 3.14; // 常量JavaScript: let age 20; // 數字 var price 9.99; // 現在不用,有缺點 co…

無縫矩陣支持音頻分離帶畫面分割功能的全面解析

一、技術原理與實現方式1. 音頻分離技術核心功能:HDMI無縫矩陣通過硬件或軟件實現音頻加嵌與分離功能,支持多設備音頻的獨立處理與增強。實現方式:音頻加嵌:將外部音頻信號(如麥克風、調音臺)嵌入HDMI信號中…

AI創作系列第18篇:海貍IM移動端UI統一大升級 - 從混亂到規范的技術重構之路

AI創作系列第18篇:海貍IM移動端UI統一大升級 - 從混亂到規范的技術重構之路本文是海貍IM AI創作系列的第18篇文章,記錄7月11日-13日周末期間對移動端的UI統一升級工作。這次重構不是功能性的,而是架構性的 - 我們重新設計了整個UI架構&#x…

八、nginx搭建,實現vue跳轉nginx跳轉gateway

基本的調用鏈路: vue調用nginx,nginx反向代理gateway,gateway看用戶是否登錄,沒有登錄的話,就創建驗證碼并先輸入密碼后獲取token。 截止現在我們創建了兩個項目能夠通過feign調用,并且創建好了gateway,且能調用對應的項目。 這一章節,我們搭建好nginx,通過反向代理,…

C++ 中常見的字符串定義方式及其用法

引言 最近在學習C&#xff0c;下面將從基礎到進階的順序&#xff0c;列出一些 C 中常見的字符串定義方式及其用法&#xff0c;包含完整代碼和詳細注釋&#xff0c;加深對代碼的理解。 C 風格字符串&#xff08;char*或 char[]&#xff09; 定義方式 #include <iostream>i…

下一代防火墻-防范DOS攻擊、IPS防護、web防護實驗

一、實驗拓撲二、實驗設備1.山石網科系列下一代防火墻2.三層交換機一臺3.windows兩臺4.各種工具&#xff0c;如hyenae、小旋風服務器、永恒之藍等等三、實驗目的1.掌握網絡攻擊防護策略配置2.通過下一代防火墻來防護服務器免受DOS攻擊四、防范Dos攻擊實驗1.將一臺windows配置為…

【人工智能】通過 Dify 構建智能助手

通過 Dify 構建智能助手1.定義2.如何使用智能助手3.添加助手需要的工具4.配置 Agent5.配置對話開場白6.添加文件上傳7.調試與預覽8.應用發布1.定義 智能助手&#xff08;Agent Assistant&#xff09;&#xff0c;利用大語言模型的推理能力&#xff0c;能夠自主對復雜的人類任務…

破局與重構:文心大模型開源的產業變革密碼

——從技術壟斷到生態共享的戰略轉型深度解析 引言&#xff1a;一場靜悄悄的革命 2024年&#xff0c;當百度宣布文心大模型4.5系列全面開源時&#xff0c;這不僅僅是一次技術發布&#xff0c;更是一場關于AI產業未來走向的戰略博弈。在全球AI競爭白熱化的當下&#xff0c;開源意…

7.15 窗口函數 | 二分 | 位運算

05.071.位運算2.位圖class Solution { public:int exchangeBits(int num) {bitset<33> bitNum(num);for (int i 0; i < 16; i){bitNum[32] bitNum[2*i];bitNum[2*i] bitNum[2*i1];bitNum[2*i1] bitNum[32];}return (int)bitNum.to_ulong();} };577.員工獎金select…

Windows 安裝配置Claude Code

文章目錄1.安裝node.js2.安裝 Claude Code3.測試claude1.安裝node.js https://nodejs.org/en/download/ 一路回車即可順利安裝完成。 再鍵盤按下Win R快捷鍵&#xff0c;輸入cmd&#xff0c;然后回車啟動命令行窗口。分別輸入node -v和npm -v來查看node.js版本和npm版本。 環…