<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] ## FFmpeg的工作流程 ## 編解碼流程 `ffmpeg`的每個轉換過程像下圖描述的程序 ``` _______ ______________ | | | | | input | demuxer | encoded data | decoder | file | ---------> | packets | -----+ |_______| |______________| | v _________ | | | decoded | | frames | |_________| ________ ______________ | | | | | | | output | <-------- | encoded data | <----+ | file | muxer | packets | encoder |________| |______________| ``` `ffmpeg`調用`libavformat`庫(含分離器)讀取輸入文件,分離出各類編碼的數據包(流),當有多個輸入文件時,`ffmpeg`試圖跟蹤最低時間戳實現任意輸入流同步。編碼數據包(除非是指定為流式拷貝,相關內容請參考特性描述對[流式拷貝](https://www.bookstack.cn/read/other-doc-cn-ffmpeg/ffmpeg-doc-cn-03.md#%E6%B5%81%E6%8B%B7%E8%B4%9D)的說明)通過解碼器解碼出非壓縮的數據幀(raw視頻/PCM格式音頻…),這些數據幀可以被濾鏡進一步處理(下面會講到)。經過濾鏡處理的數據被重新編碼為新的數據包(流),然后經過混合器混合(例如按一定順序和比例把音頻數據包和視頻數據包交叉組合),寫入到輸出文件。 ## 濾鏡處理/Filtering 在編碼前,`ffmpeg`可以對raw(真實/原)音頻和視頻使用`libavfilter`庫中的濾鏡進行處理。多個濾鏡可以組成濾鏡鏈圖(濾鏡鏈圖filtergraphs )。在`ffmpeg`看來只有2種濾鏡:簡單濾鏡,復合濾鏡。 ### 簡單濾鏡 簡單濾鏡就是只有1個輸入和輸出的濾鏡,濾鏡兩邊的數據都是同一類型的,可以理解為在非壓縮數據幀到再次編碼前簡單附加了一步: ``` _________ ______________ | | | | | decoded | | encoded data | | frames |\ _ | packets | |_________| \ /||______________| \ __________ / simple _\|| | / encoder filtergraph | filtered |/ | frames | |__________| ``` 簡單濾鏡一般用于配置每個流 -filter 選項(-vf 和 -af 分別對應視頻和音頻)。一個最簡單的視頻濾鏡如下: ``` _______ _____________ _______ ________ | | | | | | | | | input | ---> | deinterlace | ---> | scale | ---> | output | |_______| |_____________| |_______| |________| ``` ### 復合濾鏡 復合濾鏡是那些不能簡單描述為一個線性處理過程應用到一個流的情況,例如當過程中有多個輸入和/或輸出,或者輸出流類型不同于輸入時,示意圖如下: ``` _________ | | | input 0 |\ __________ |_________| \ | | \ _________ /| output 0 | \ | | / |__________| _________ \| complex | / | | | |/ | input 1 |---->| filter |\ |_________| | | \ __________ /| graph | \ | | / | | \| output 1 | _________ / |_________| |__________| | | / | input 2 |/ |_________| ``` 復合濾鏡由`-filter_complex`選項進行設定。**注意**這是一個全局選項,因為一個復合濾鏡必然是不能只關聯到一個單一流或者文件的。`-lavfi`選項等效于`-filter_complex` 一個復合濾鏡的簡單例子就是`overlay`濾鏡,它從兩路輸入中,把一個視頻疊加到一個輸出上。對應的類似音頻濾鏡是`amix`。 ### 流拷貝 流拷貝(Stream copy)是一種對指定流數據僅僅進行復制的`拷貝(copy)`模式。這種情況下`ffmpeg`不會對指定流進行解碼和編碼步驟,而僅僅是分離和混合數據包。這種模式常用于文件包裝格式的轉換或者修改部分元數據信息,這個過程簡單圖示如下: ``` _______ ______________ ________ | | | | | | | input | demuxer | encoded data | muxer | output | | file | ---------> | packets | -------> | file | |_______| |______________| |________| ``` 因為這種模式下不存在解碼和編碼過程,所以也特別快,而且不會造成新的質量損失。然而這也使得這樣的模式不能適合很多工作需求,例如這個模式下不能使用大量的濾鏡了,因為濾鏡僅能對未壓縮(編碼)的數據進行處理。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看