天天看點

ffmpeg如何入門

FFmpeg 介紹

FFmpeg是一套可以用來記錄、轉換數字音頻、視訊,并能将其轉化為流的開源計算機程式。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視訊的完整解決方案。它包含了非常先進的音頻/視訊編解碼庫。

一、音視訊基礎

1.1音視訊基礎

01. 如何采集聲音-模數轉換原理

02. 為什麼高品質音頻采樣率>=44.1Khz

03. 什麼是PCM

04. 一個采樣點用多少位表示

05. 采樣值用整數還是浮點數表示

06. 音量大小和采樣值大關系

07. 多少個采樣點作為一幀資料

08. 左右通道的采樣資料如何排列

09. 什麼是PCM(脈沖編碼調制)

10. 音頻編碼原理

1.2 視訊基礎知識

01. RGB彩色原理

02. 為什麼需要YUV格式

03. 什麼是像素

04. 分辨率、幀率、碼率

05. YUV資料存儲格式差別

06. YUV記憶體對齊問題

07. 為什麼畫面顯示綠屏

08. H264編碼原理

09. H264 I P B幀的關系

1.3 解複用基礎知識

01. 什麼是解複用,比如MP4格式

02. 為什麼需要不同的複用格式MP4/FLV/TS

03. 常見的複用格式MP4/FLV/TS

1.4 FFmpeg6.0開發環境搭建

01. Windows、Ubuntu、MAC三大平台

02. QT安裝

03. FFmpeg指令行環境

04. FFmpeg API環境

05. FFmpeg編譯

06. vs2019安裝(win平台)

1.5 音視訊開發常用工具

01. MediaInfo,分析視訊檔案

02. VLC播放器,播放測試

03. EasyICE,分析TS流

04. flvAnalyser,分析FLV

05. mp4box,分析mp4

06. audacity,分析音頻PCM

07. Elecard_streamEye,分析H264

08. 海康YUVPlayer,分析YUV

相關學習資料推薦,點選下方連結免費報名,先碼住不迷路~】

【免費分享】音視訊學習資料包、大廠面試題、技術視訊和學習路線圖,資料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以點選加群免費領取~

ffmpeg如何入門

二、FFMPEG指令行

2.1 FFmpeg指令

01. 音頻PCM/AAC檔案提取

02. 視訊YUV/H264檔案提取

03. 解複用、複用

04. 音視訊錄制

05. 視訊裁剪和合并

06. 圖檔/視訊轉換

07. 直播推流和拉流

08. 水印/畫中畫/九宮格濾鏡

"注:掌握FFmpeg的目的:快速掌握FFmpeg能做什麼;加深對音視訊的了解。"

2.2 SDL跨平台多媒體開發庫實戰

01. SDL環境搭建

02. SDL事件處理

03. SDL線程處理

04. 視訊YUV畫面渲染

05. 音頻PCM聲音輸出

"注:SDL相容Win、Ubuntu、Mac三大平台,主要用于後續項目的畫面顯示和聲音輸出"

2.3 FFmpeg基石精講

01. FFmpeg架構

02. FFmpeg記憶體引用計數模型

03. 解複用相關AVFormat XXX等

04. 編解碼相關AVCodec XXX等

05. 壓縮資料AVPacket

06. 未壓縮資料AVFrame

07. FFmpeg面向對象思想

08. Packet/Frame資料零拷貝

注:目的熟悉FFmpeg常用結構體和函數接口

2.4 FFmpeg音視訊解複用+解碼

01. 解複用流程

02. 音頻解碼流程

03. 視訊解碼流程

04. FLV封裝格式分析

05. MP4封裝格式分析

06. FLV和MP4 seek有什麼差別

07. 為什麼FLV格式能用于直播

08. 為什麼MP4不能用于直播

09. MP4能否用來做點播

10. AAC ADTS分析

11. H264 NALU分析

12. AVIO記憶體輸入模式

13. 音頻重采樣實戰

14. 重采樣後的資料播放時長是否一緻

15. 重采樣後PTS如何表示

16. 視訊解碼後YUV記憶體對齊問題

17. 音頻解碼後PCM排列格式問題

18. 硬體解碼dxva2/nvdec/cuvid/qsv

19. 硬體gpu資料轉移到cpu

20. H265解碼

"注:FFmpeg API學習:視訊解複用 -> 解碼 -> 編碼 -> 複用合成視訊"

2.5 FFmpeg音視訊編碼+複用合成視訊

01. AAC音頻編碼

02. H264視訊編碼

03. PCM+YUV複用合成MP4/FLV

04. H264編碼原理

05. IDR幀和I幀差別

06. 動态修改編碼碼率

07. GOP間隔參考值

08. 複用合成MP4音視訊不同步問題

09. 編碼、複用timebase問題

10. MP4合成IOS不能播放問題

11. 重采樣後PTS如何表示

12. 視訊編碼YUV記憶體對齊問題

13. 硬體編碼dxva2/nvenc/cuvid/qsv

14. H265編碼原理

15. H264、H265編碼互轉

三、FFmpeg6.0進階

3.1 FFmpeg過濾器

01. FFmpeg過濾chain架構

02. 音頻過濾器架構

03. 視訊過濾器架構

04. 多路音頻混音amix

05. 視訊水印watermark

06. 視訊區域裁剪和翻轉

07. 視訊添加logo

注: filter在視訊剪輯領域應用廣泛。

3.2 ffplay播放器

01. 掌握ffplay.c的意義

02. ffplay架構分析

03. 解複用線程

04. 音頻解碼線程

05. 視訊解碼線程

06. 聲音輸出回調

07. 畫面渲染時間間隔

08. 音頻重采樣

09. 畫面尺寸格式變換

10. 音頻、視訊、外部時鐘同步差別

11. 以視訊為基準時音頻重采樣補償

12. 音量靜音、調節大小的本質

13. 音視訊packet隊列大小限制

14. 音視訊packet隊列線程安全

15. 音視訊frame隊列大小限制

16. 音視訊frame隊列線程安全

17. 暫停、播放實作機制

18. seek播放導緻的畫面卡住問題

19. seek播放資料隊列、同步時鐘處理

20. 如何做到逐幀播放

21. 播放器退出的流程要點

"注: ffplay.c是ffplay指令的源碼,掌握ffplay對于我們自己開發播放器有事半功倍的效果。"

四、FFmpeg6.0流媒體項目實戰

4.1 FFmpeg+QT播放器項目實戰

01.開源播放器分析

02. 自研架構分析

03. 播放器子產品劃分

04. 解複用子產品

05. 音視訊解碼

06. 播放器控制

07. 音視訊同步

08. 軟體解碼+硬體解碼

09. 音量控制

10. 變速播放

11. 拖動跳轉播放

12. 畫面亮度、飽和度調節

13. 畫面4:3 16:9切換

14. 碼流資訊分析

15. 畫面旋轉、翻轉

16. 支援截屏

"項目意義:掌握播放器的開發,包括播放器架構分析、子產品設計、隊列設計、音視訊同步、變速、拖動播放

等核心機制。"

4.2 FFmpeg RTMP錄制+推流項目

01. RTMP協定簡介

02. 錄制+推流架構分析

03. 麥克風、系統聲音捕獲

04. 聲音捕獲延遲分析和解決

05. 攝像頭、螢幕畫面捕獲

06. 畫面捕獲延遲分析和解決

07. 音頻重采樣

08. 視訊scale

09. AAC編碼器封裝

10. H264編碼器封裝

11. 音頻編碼參數優化

12. 視訊編碼畫質/CPU/碼率/延遲優化

13. 音頻、視訊采集時如何設定時間戳

14. 采集-編碼-推流時間戳轉換

15. 将音頻、視訊儲存為MP4檔案

16. 采集-編碼-儲存mp4時間戳轉換

17. 支援推流畫面預覽

18. 如何支援H265推流

19. 如何支援麥克風和系統聲音混音

20. 實作音頻采集降噪

21. RTMP推流是否會導緻延遲

22. RTMP推流如何動态調整碼率

23. RTMP推流如何動态調整幀率

24. Web端能否拉取RTMP推流

"項目意義: 本項目推流子產品采用FFmpeg API,不需要深入了解RTMP協定仍然能實作推流直播。掌握推流架構和視訊錄制架構,包括音視訊采集、子產品劃分、音視訊同步、編碼優化、推流延遲等核心技術。"

4.3 FFmpeg RTMP拉流+錄像項目

01. RTMP協定簡介

02. 拉流+錄像架構分析

03. 拉流子產品封裝

04. AAC解碼子產品封裝

05. H264解碼子產品封裝

06. 包隊列設計

07. 幀隊列設計

08. 實作音視訊同步

09. 能否不做音視訊同步分析

10. 沒有MetaData能否播放

11. RTMP拉流是否會導緻延遲

12. 如何檢測RTMP拉流延遲

13. 如何解決RTMP播放延遲

14. 添加支援變速播放

15. 變速播放政策分析和設定

16. 秒開功能原理分析與實作

17. ffplay、vlc能否用來測試播放延遲

18. 實作拉流、儲存視訊為MP4

19. 拉流、儲存MP4時間戳轉換

注: 掌握RTMP直播拉流+錄像架構,包括拉流、隊列設計、音視訊同步、低延遲、儲存為MP4檔案等核心技術。

4.4 RTSP推流+錄制項目

01. RTSP協定簡介

0.2 基于RTMP推流項目實作RTSP推流+錄制

"項目意義: 本項目推流子產品采用FFmpeg API,不需要深入了解RTSP協定仍然能實作推流直播。掌握推流架構和視訊錄制架構,包括音視訊采集、子產品劃分、音視訊同步、編碼優化、推流延遲等核心技術。"

4.5 RTSP拉流+錄像項目

01. RTSP協定簡介

0.2 基于RTMP拉流項目實作RTSP拉流+錄像

注: 掌握RTSP拉流+錄像架構,包括拉流、隊列設計、音視訊同步、低延遲、儲存為MP4檔案等核心技術。

五、項目實踐

5.1自研項目和源碼分析

  1. SDL音頻播放
  2. SDL視訊播放
  3. FFmpeg記憶體引用計數
  4. MP4/FLV/TS解複用
  5. 提取H264
  6. 提取AAC
  7. H264/H265解碼
  8. AAC/MP3解碼
  9. AVIO記憶體輸入模式
  10. 音頻重采樣
  11. 視訊尺寸格式變換
  12. DXVA2解碼
  13. NVDEC解碼
  14. CUVID解碼
  15. QSV解碼
  16. AAC編碼優化
  17. H264編碼優化
  18. H265編碼優化
  19. AAC轉MP3
  20. H264轉H265
  21. DXVA2編碼
  22. NVENC編碼
  23. CUVID編碼
  24. QSV編碼
  25. MP4合成
  26. FLV合成
  27. 多路音頻混音
  28. 視訊添加水印
  29. 視訊區域裁剪
  30. 視訊翻轉
  31. 視訊添加logo
  32. ffplay播放器
  33. 自研 QT播放器
  34. RTMP推流
  35. RTMP拉流
  36. RTSP推流
  37. RTSP推流
  38. HLS拉流