音視頻小白系統入門課-4

本系列筆記為博主學習李超老師課程的課堂筆記,僅供參閱

往期課程筆記傳送門:

  • 音視頻小白系統入門筆記-0
  • 音視頻小白系統入門筆記-1
  • 音視頻小白系統入門筆記-2
  • 音視頻小白系統入門筆記-3

將mp4文件轉換為yuv文件

ffmpeg -i demo.mp4   # 輸入文件-an            # 禁用音頻流(audio no)-c:v rawvideo  # 視頻流用rawvideo處理(非編碼)-pix_fmt yuv420p # 指定輸出像素格式為YUV420平面demo.yuv       # 輸出原始YUV數據文件

rawvideo是一個偽編碼器,僅僅進行數據格式轉換,不進行有損編碼

yuv數據僅僅存儲視頻,不存儲音頻

ffplay -f rawvideo -video_size 640x360 # 分辨率需要根據視頻內容手動指定-pixel_format yuv420p -framerate 24 # -vf extractplanes=y # 簡單濾波demo.yuv #播放yuv數據

yuv沒有元信息,需要手動指定分辨率等信息

ffmpeg支持filter_complex復雜濾波

ffmpeg -i demo.mp4  -c:v rawvideo # 輸出yuv格式時默認rawvideo-filter_complex "extractplanes=y+u+v[y][u][v]" -map '[y]' y.yuv -map '[u]' u.yuv -map '[v]' v.yuv# 播放
ffplay -f rawvideo -video_size 640x360 -pixel_format gray -framerate 24 y.yuv
ffplay -f rawvideo -video_size 320x180 -pixel_format gray -framerate 24 u.yuv

yuv格式:https://fourcc.org/yuv.php

H264視頻編碼

yuv420 640x480 15 → 52Mbps

H264建議碼流:500kbps,壓縮比1/100

碼流推薦表:https://blog.csdn.net/huapeng_guo/article/details/132625661

交互通訊碼流較低,需要時延較低;直播通訊碼流較高,因為用戶不和主播直接交換

GOP

Group of Picture 一組幀

GOP中幀的差距較小

  • 低碼率環境:減少I幀頻率(延長GOP)以節省帶寬,但可能降低隨機訪問能力。
  • 高動態內容:頻繁插入I幀(如GOP=15)以應對快速運動,但會增加文件體積。

I/P/B幀

I幀(Interframe frame):關鍵幀,采用幀內壓縮技術,不依賴其他幀。

  • 例如IDR幀(Instantaneous Decoding Refresh Frame)瞬時解碼刷新幀,清空IDR幀之前的所有數據,后面的數據不會依賴IDR幀之前的數據。每當遇到IDR幀,解碼器會清空解碼器參考buffer中的內容
  • 每個GOP中的第一幀是IDR幀
  • 可以防止錯誤傳播

P幀(forward Predicted frame):向前參考幀。壓縮時只參考前面已經處理的幀,采用幀間壓縮技術。約占I幀的 1/2 大小

B幀(Bidirectionally predicted frame):雙向參考幀。壓縮時,既參考前面已經處理的幀,也參考后面的幀,幀間壓縮技術。它約占I幀 1/4 大小。提高B幀的數量可以提高壓縮比,但是會提高編解碼的耗時。實時通訊中B幀不能太多,云服務中可以很多。

/image%201.png

解碼順序:I幀是幀內壓縮,不參考其他幀 → P幀依賴前面緊鄰的I幀 → B幀依賴前面和后面的I/P幀

播放順序:I → B → P → B → …

SPS (Sequence Parameter Set)序列參數集:位于GOP的頭部(IDR幀之前),表征GOP中每一幀的序列特性

  • seq_parameter_set_id
  • 幀數
  • POC(picture order count)的約束
  • 參考幀數目
  • 解碼圖像尺寸
  • 幀長編碼模式選擇標識等

PPS(Picture Parameter Set)圖像參數集:位于GOP的頭部(IDR幀之前),表征GOP中每一幀的圖片特性

  • pic_parameter_set_id
  • 熵編碼模式選擇標識(無損壓縮)
  • 片組數目
  • 初始量化參數
  • 去方塊濾波洗漱調整標識等

H264壓縮技術

幀內壓縮:解決空(間)域數據冗余問題

幀間壓縮:解決時(間)域數據冗余問題

整數離散余弦變換(DCT),將空間上的相關性變為頻域上無關的數據然后進行量化

CABAC壓縮(老)

有損壓縮

  • 幀內:DCT/整數DCT + 量化 + 熵編碼(解決空間冗余)。
  • 幀間:運動估計 + 殘差變換/量化(解決時間冗余)。

無損壓縮

  • 預測編碼:如DPCM、線性預測(FLAC)。
  • 熵編碼:如霍夫曼、算術編碼(CABAC壓縮)、LZ77(ZIP/PNG)、VLC壓縮

宏塊

宏塊是視頻壓縮操作的基本單元

H.265/HEVC:用編碼樹單元(CTU)替代宏塊,支持更大塊(如64×64)和更靈活的劃分

16x16 8x16 16x8 8x8

宏塊大 → 運動預測和數據頭開銷減少 → 壓縮比提升,但細節丟失風險增加

宏塊小 → 運動預測更精確且殘差數據更少 → 細節保留更好,但壓縮比可能降低(因運動向量增多)

幀內壓縮

針對I幀

理論基礎:

  • 相鄰像素差別不大,所以可以進行宏塊預測
  • 人眼對亮度的敏感度超過色度
  • YUV很容易將亮度和色度分開

幀內預測:H264 9種模式,將亮度塊和色度塊分開預測

/image%202.png

預測模式信息+殘差值壓縮

幀間壓縮

運動估計:宏塊匹配 → 運動矢量

運動補償:殘差值 Residual

宏塊匹配算法:

  • 三步搜索、四步搜索
  • 二維對數搜索
  • 鉆石搜索

花屏:部分幀丟失

卡頓:當有幀丟失時,丟失GOP內所有幀,顯示前一個I幀,直到下一個IDR幀

/image%203.png

H264標準支持:https://en.wikipedia.org/wiki/Advanced_Video_Coding

H264碼流

碼流分層

  • NAL層:Netword Abstraction Layer,視頻數據網絡抽象層。

    NAL層是視頻編碼與網絡傳輸之間的適配層,即使底層用TCP,仍需NAL解決視頻特有的問題(如幀劃分、參數集管理)。而在UDP場景下,NAL層的設計更是不可或缺。

VLC層:Video Coding Layer,視頻數據編碼層

/image%204.png

一般情況下:一個slice對應一個圖像

SODB(String of Data Bits):原始數據比特流,二進制數據,不一定是8的倍數,由VCL層產生的,需要補齊。

RBSP(Raw Byte Sequence Payload)

補齊為8的倍數,補1和多個0

NALU

NAL Header(1 Byte) + RBSP

/image%205.png

/image%206.png

Annexb格式:用于本地文件存儲

RTP格式:用于直播推流

/image%207.png

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

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

相關文章

6.2 內容生成與營銷:個性化內容創作與營銷策略優化

隨著消費者對個性化體驗的需求日益增長,傳統的內容創作與營銷方式已難以滿足市場競爭的需要。基于大語言模型(LLM)與智能代理(Agent)的技術為企業提供了全新的解決方案,能夠實現高效、精準、規模化的內容生…

kafka課后總結

Kafka是由LinkedIn開發的分布式發布 - 訂閱消息系統,具備高吞吐量、低延遲、可擴展性、持久性、可靠性、容錯性和高并發等特性。其主要角色包括Broker、Topic、Partition、Producer、Consumer、Consumer Group、replica、leader、follower和controller。消息系統中存…

DataStreamAPI實踐原理——計算模型

引入 通過前面我們對于Flink的理解,我們知道它吸收了 Dataflow 的理念,以及此前已有的流處理系統(如 S4、Storm、MillWheel)的經驗,實現了批流一體化的高效數據處理,并且通過靈活的窗口機制、事件時間與水…

項目筆記1:通用 Service的常見方法

通用 Service 通常封裝了常見的業務邏輯操作,以提高代碼的復用性和可維護性。不同的框架和業務場景下,通用 Service 的方法會有所差異,但一般都會包含一些基本的增刪改查(CRUD)操作,以下為你詳細介紹&#…

阿里云99機器總是宕機,實測還是磁盤性能差

阿里云99計劃總是宕機,經過反復排查,最終確認還是磁盤性能差。 阿里云99機器使用的磁盤類型是Entry云盤40GiB (2120 IOPS) 按照官方的一些數據,這個磁盤最小iops是1800最大是6000,實際使用中發現,這個6000值很虛,這個…

Fedora 43 計劃移除所有 GNOME X11 相關軟件包

Fedora 43 計劃移除所有 GNOME X11 相關軟件包,這是 Fedora 項目團隊為全面擁抱 Wayland 所做的重要決策。以下是關于此計劃的詳細介紹: 提案內容:4 月 23 日,Neal Gompa 提交提案,建議從 Fedora 軟件倉庫中移除所有 G…

魔幻預言手游》:職業介紹!

在《魔幻預言》手游中,共有武玄、魔魅、劍仙三大核心職業,各具特色且定位鮮明,以下為具體介紹: 一、武玄(戰士) 核心定位:近戰物理輸出與團隊增益擔當,兼具控制與防御能力。 戰斗風…

精益數據分析(27/126):剖析用戶價值與商業模式拼圖

精益數據分析(27/126):剖析用戶價值與商業模式拼圖 在創業和數據分析的領域中,每一次深入學習都是一次成長的契機。今天,我們繼續秉持共同進步的理念,深入研讀《精益數據分析》,剖析用戶價值的…

【SwitchyOmega安裝教程】

目錄 一、插件安裝 1. 下載安裝文件 2. 打開瀏覽器擴展安裝頁面 3. 安裝插件 二、界面詳情 三、配置信息 3.1 設置IP 1、查看IP地址信息 2、批量測試IP是否有效 3、點擊擴展程序,選擇 Proxy SwitchyOmega 4、 點擊選項進行配置 5、配置頁面 一、插件安裝 1…

矯平機終極指南:特殊材料處理、工藝鏈協同與全球供應鏈管理

一、特殊材料矯平:挑戰與創新解決方案 1. 高溫合金(如Inconel 718)處理 技術難點: 屈服強度高達1100 MPa,傳統矯平力不足 高溫下易氧化,需惰性氣體保護環境 解決方案: 采用雙伺服電機驅動&a…

反事實——AI與思維模型【82】

一、定義 反事實思維模型是一種心理認知模型,它指的是人們在頭腦中對已經發生的事件進行否定,然后構建出一種可能性假設的思維活動。簡單來說,就是思考“如果當時……,那么就會……”的情景。這種思維方式讓我們能夠超越現實的限制,設想不同的可能性和結果,從而對過去的…

Nginx:支持 HTTPS

文章目錄 Nginx 開啟 ssl 以支持 HTTPS1 生成本地證書2 開啟 ssl 以支持 HTTPS3 將 https 的請求轉發給 http 最終的 nginx.conf 如下 Nginx 開啟 ssl 以支持 HTTPS [!IMPORTANT] 在下文中,將采用如下定義。 HTTP端口: 80 HTTPS端口: 443 服務…

[計算機科學#2]:從繼電器到晶體管的電子計算機發展史(龐然大物的進化)

【核知坊】:釋放青春想象,碼動全新視野。 我們希望使用精簡的信息傳達知識的骨架,啟發創造者開啟創造之路!!! 內容摘要:本文講述了20世紀初至1950年代計算機技術的發展歷程…

【ESP32S3】Cache 框圖和操作

ESP32-S3 采用雙核共享 ICache (指令緩存) 和 DCache (數據緩存) 結構,如下圖所示。以便當 CPU 的指令總線和數據總線同時發起請求時,也可以迅速響應: Cache 的存儲空間與內部存儲空間可以復用。具體為 Internal SRAM0…

wireshark從HEX轉儲導入使用方法

官方資料: https://www.wireshark.org/docs/wsug_html_chunked/ChIOImportSection.html 方法1: 文本文件,純內容導入: ff ff ff ff ff ff 00 00 00 00 5f 0f 08 06 00 01 08 00 06 04 00 01 00 00 00 00 5f 0f 64 01 60 10 00 00 00 00 00 00 64 01 01…

【Android】四大組件之Activity

目錄 一、什么是Activity 二、如何創建和配置Activity 三、Activity 跳轉與數據傳遞 四、數據保存與恢復 五、Activity 啟動模式 六、自定義返回行為 七、復雜界面布局 你可以把Activity想象成手機屏幕上的一個“頁面”。比如,當你打開一個App時,…

uml類關系(實現、繼承,聚合、組合,依賴、關聯)

drawio和EA是架構設計時經常使用的畫圖工具。 drawio學習門檻低,使用靈活,但是功能僅僅限于畫圖。 EA學習門檻高,但是功能更加的豐富: ①在畫圖方面,EA嚴格滿足UML標準,EA中的圖和類是關聯的&#xff0c…

C++如何設計線程池(thread pool)來提高線程的復用率,減少線程創建和銷毀的開銷

線程池的基本概念與多線程編程中的角色 線程池,顧名思義,是一種管理和復用線程的資源池。它的核心思想在于預先創建一定數量的線程,并將這些線程保持在空閑狀態,等待任務的分配。一旦有任務需要執行,線程池會從池中取出…

React.memo 和 useMemo

現象 React 中,通常父組件的某個state發生改變,會引起父組件的重新渲染(和其他state的重新計算),從而會導致子組件的重新渲染(和其他非相關屬性的重新計算) 問題一:如何避免因為某個…

防火墻技術深度解析:從包過濾到云原生防火墻的部署與實戰

防火墻技術深度解析:從包過濾到云原生防火墻的部署與實戰 在網絡安全防御體系中,防火墻是第一道物理屏障,承擔著“網絡流量守門人”的核心角色。從早期基于IP地址的包過濾設備到如今集成AI威脅檢測的云原生防火墻,其技術演進始終…