文章目錄
-
- 一、FFmpeg 簡介
- 二、FFmpeg 相關術語
-
- 1、容器
- 2、媒體流
- 3、資料幀
- 4、資料包
- 5、編解碼器
- 6、複用
- 7、解複用
- 部落格資源
一、FFmpeg 簡介
FFmpeg 是 " Fast Forward mpeg " 的縮寫 , 其符合 mpeg 視訊編碼标準 ;
FFmpeg 功能很強大 , 可以對音視訊進行 格式轉換 , 内容修改 , 等幾乎所有涉及音視訊的操作 ;
愛奇藝 , 優酷 , YouTube 等公司的音視訊産品 , 幾乎都是基于 FFmpeg 進行的二次開發 ;
二、FFmpeg 相關術語
1、容器
容器 Container : 容器的本質就是檔案 , 是特定的視訊檔案 , 如 mp4 , mkv , flv 等格式的音視訊檔案 ;
容器的作用 : 容器中可以存放 音頻 , 視訊 , 字幕流 等資訊 , 将這些資訊整合在一起 , 按照特定規則放置在容器檔案中 ,
使用 MediaInfo 打開一個 mp4 格式的視訊檔案 , 在 " 容器格式和一般資訊 " 一欄中 , 可以看到該 mp4 容器檔案中包含了
1
1
1 個 AVC 視訊流 ,
1
1
1 個 AAC LC 音頻流 ;
MediaInfo 工具在 http://mediaarea.net/en/MediaInfo 位址下載下傳 , 或本部落格的部落格資源中下載下傳 ;
2、媒體流
媒體流 ( Stream ) : 時間上的一段連續資料 , 一段聲音資料 稱為 音頻流 , 一段視訊資料 稱為 視訊流 , 一段字幕資料 稱為 字幕流 ;
這些媒體流資料 可以壓縮 , 也可以不壓縮 , 如視訊流以 H.264 格式進行壓縮 , 将視訊幀編碼成 關鍵幀 , 非關鍵幀 , 音頻流一般是 AAC 編碼格式進行壓縮 ;
媒體流如果是壓縮的 , 在播放時 , 先使用解碼器解碼 , 然後再播放 ; 生成檔案時需要使用編碼器 , 編碼後存儲到檔案中 ;
3、資料幀
資料幀 ( Data Frame ) : 媒體流 由 若幹 資料幀構成 ; 壓縮格式中 , 資料幀是最小的處理單元 ;
在容器中如果有多個資料流 , 那麼 視訊幀 , 音頻幀 , 字幕資訊 , 交錯存儲 , 以保證明時性 ;
資料幀是未壓縮的原始資料 , 如 : 視訊幀每一幀都是一張完整的 YUV 圖檔 , 音頻幀是 PCM 格式的 ;
4、資料包
資料包 ( Data Packet ) : 将 資料幀 壓縮後就是 資料包 , 資料幀是未壓縮的原始資料 , 資料包時壓縮後的資料 ;
生成容器檔案時 , 壓縮資料 , 将資料幀 編碼壓縮 成 資料包 ;
播放容器檔案時 , 解壓資料 , 将資料包 解碼展開 成 資料幀 ;
視訊編碼過程 : YUV 格式的圖像 -> H.264 編碼器編碼 -> H.264 視訊幀
視訊解碼過程 : H.264 視訊幀 -> H.264 解碼器解碼 -> YUV 格式的圖像
音頻資料編碼過程 : PCM 音頻資料 -> ACC 編碼器編碼 -> AAC 音頻幀
音頻資料解碼過程 : AAC 音頻幀 -> AAC 解碼器解碼 -> PCM 音頻資料
5、編解碼器
編解碼器 ( Codec ) : 資料幀 ( 原始資料 ) 與 資料包 ( 壓縮資料 ) 之間的轉換工具 ;
資料幀 ( 原始資料 ) -> 編解碼器 ( 編碼 ) -> 資料包 ( 壓縮資料 )
資料包 ( 壓縮資料 ) -> 編解碼器 ( 解碼 ) -> 資料幀 ( 原始資料 )
6、複用
複用 ( Mux ) : 将不同的 媒體流流 , 按照一定規則放入容器 ;
音頻流 , 視訊流 , 字幕流 ,
按照一定規則
封裝到 容器 ( 視訊檔案 ) 中 ;
複用的關鍵工具時 複用器 ( Muxer ) ;
7、解複用
解複用 ( Demux ) : 從容器中解析不同的流出來 ;
從 容器 ( 視訊檔案 ) 中 ,
按照一定規則
拆分出 音頻流 , 視訊流 , 字幕流 ,
解複用的關鍵工具時 解複用器 ( Demuxer ) ;