1. 媒體格式的介紹
文件格式:特殊的文件類型,用來存儲音頻或視頻數據。一些類型可以用來存儲多條流數據,這些叫做容器。視頻文件格式一般包含視頻流和音頻流。
媒體容器:特殊的文件格式,用來存儲多條流數據和相關元數據的。音頻和視頻是可以被編碼和解碼的,容器可以將這些音頻流和視頻流存儲在一個文件里面。
有些容器只能存儲音頻,比如AIFF、WAV、XMF等等。有些只能存儲圖片,比如TIFF。大部分只可以同時存儲音頻】視頻、字幕、元數據等等。
如果只是容器改變,編碼沒改,可以使用-c copy參數或-c:a copy參數或-c:v copy參數
比如:ffmpeg -i input.avi -q 1 -c copy output.mov
2. 轉碼和轉換
使用ffmpeg對輸入源處理然后輸出的過程叫做轉碼。轉碼可以改變文件格式,或者文件格式不變,只是更改其他數據。轉碼過程可以分為下面幾個階段:
1)demuxing解封裝:ffmpeg根據輸入源的文件擴展名來選擇最佳的解封裝器(在libavformat庫里面)。解封裝后生成編碼狀態的數據包、即壓縮狀態的數據包。(文件file ——> 數據包data package)
2)decoding解碼:通過適當的解碼器將步驟1里面的數據包解碼為未壓縮的數據幀。如果使用-c copy或-codec copy,將不會有解碼這個步驟,當然也就不會有下面的編碼這個步驟了。(數據包data package ——> 數據幀frame)
3)optional filtering可選的濾鏡:通過指定的濾鏡修改解碼后的數據幀。(修改數據幀)
3)encoding編碼:通過指定編碼器將數據幀編碼為數據包。(數據幀frame ——> 數據包data package)
4)muxing封裝:將數據包封裝為指定的媒體格式。(數據包data package ——> 文件file)
3. 編解碼器
codec是coder和decoder的組合縮寫。用於編解碼視頻流和音頻流數據的。ffmpeg的編解碼是基於比特流進行的。在ffmpeg命令行可通過 -c 或者 -codec指定編解碼器。語法如下:
-codec[:stream_specifier] codec_name
4. 轉換的全局選項和特定選項
在轉碼過程里面,
有一些選項全局選項,如下-y表示覆蓋輸出,-n表示結束處理過程,不覆蓋輸出;-target 表示針對指定設備進行轉碼處理。等等
也有一些特定選項,比如只能用於視頻或者音頻等等。