ffmpeg視頻音頻轉碼工具

一.ffmpeg詳細描述

1.ffmpeg詳細轉碼過程

 

 _______ ______________
| | | |
| 輸入| 分路器| 編碼數據| 解碼器
| 文件| ---------> | 數據包| ----- +
| _______ | | ______________ | |
                                           v
                                       _________
                                      | |
                                      | 解碼|
                                      | 框架|
                                      | _________ |
 ________ ______________ |
| | | | |
| 輸出| <-------- | 編碼數據| <---- +
| 文件| muxer | 數據包| 編碼器
| ________ | | ______________ |

| | | |
| 輸入| 分路器| 編碼數據| 解碼器
| 文件| ---------> | 數據包| ----- +
| _______ | | ______________ | |
                                           v
                                       _________
                                      | |
                                      | 解碼|
                                      | 框架|
                                      | _________ |
 ________ ______________ |
| | | | |
| 輸出| <-------- | 編碼數據| <---- +
| 文件| muxer | 數據包| 編碼器
| ________ | | ______________ |

ffmpeg調用libavformat庫(包含demuxers)來讀取輸入文件並獲取包含編碼數據的數據包。當有多個輸入文件時,ffmpeg通過追蹤任何活動輸入流上的最低時間戳,嘗試保持它們的同步。

然後將編碼的數據包傳送給解碼器。解碼器產生未壓縮的幀(原始視頻/ PCM音頻/ ...),可以通過濾波進一步處理(見下一節)。在過濾之後,幀被傳遞給編碼器,編碼器對其進行編碼並輸出編碼的數據包。最後,這些傳遞給複用器,將編碼的數據包寫入輸出文件。

 

2.過濾

編碼之前,ffmpeg可以使用libavfilter庫中的過濾器處理原始音頻和視頻幀,幾個鏈式過濾器形成一個過濾器圖形。ffmpeg區分兩種類型的過濾器圖:簡單和複雜。

A.簡單的過濾圖

 

 _________ ______________
| | | |
| 解碼| | 編碼數據|
| 框架| \ _ | 數據包|
| _________ | \ / || ______________ |
             \ __________ /
  簡單_ \ || | /編碼器
  filtergraph | 過濾| /
                | 框架|
                | __________ |
| | | |
| 解碼| | 編碼數據|
| 框架| \ _ | 數據包|
| _________ | \ / || ______________ |
             \ __________ /
  簡單_ \ || | /編碼器
  filtergraph | 過濾| /
                | 框架|
                | __________ |

簡單的過濾圖是使用每個流配置的 -過濾 選項與(-vf 和-af視頻和音頻別名)。一個簡單的視頻filtergraph可以看起來像這樣子的例子

 

 

 _______ _____________ _______ ________
| | | | | | | |
| 輸入| ---> | 去隔行| ---> | 規模| ---> | 輸出|
| _______ | | _____________ | | _______ | | ________ |
| | | | | | | |
| 輸入| ---> | 去隔行| ---> | 規模| ---> | 輸出|
| _______ | | _____________ | | _______ | | ________ |

 

B.複雜的過濾圖         

 

    複雜的過濾器圖是哪些不能簡單描述爲應用於一個流的線性處理鏈的過濾圖。例如,當圖形有多個輸入和/或輸出,或者當輸出流類型和輸入不同時,這種情況,可以用下圖表示:           

    

 _________
| |
| 輸入0 | \ __________
| _________ | \ | |
             \ _________ / | 輸出0 |
              \ | | / | __________ |
 _________ \ | 複雜| /
| | | | /
| 輸入1 | ----> | 過濾| \
| _________ | | | \ __________
               / | 圖| \ | |
              / | | \ | 輸出1 |
 _________ / | _________ | | __________ |
| | /
| 輸入2 | /
| _________ |
| |
| 輸入0 | \ __________
| _________ | \ | |
             \ _________ / | 輸出0 |
              \ | | / | __________ |
 _________ \ | 複雜| /
| | | | /
| 輸入1 | ----> | 過濾| \
| _________ | | | \ __________
               / | 圖| \ | |
              / | | \ | 輸出1 |
 _________ / | _________ | | __________ |
| | /
| 輸入2 | /
| _________ |

                               

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章