使用FFmpeg處理音視訊

王肖發表於2018-05-07

本文主要是介紹如何使用ffmpeg命令列工具進行各式各樣的音視訊處理操作——縮放、裁剪、剪輯、旋轉、格式轉換,etc。。。學了本文,基本可以把格式工廠之類的音視訊處理軟體刪了。。

一. 安裝ffmpeg命令列工具

本文只介紹mac系統下的安裝方法,Linux的使用者安裝也很簡單,Win的使用者也可以上網找找教程。。。

1. 安裝Homebrew

Homebrew號稱是“OS X 不可或缺的包管理器”,通過homebrew,可以很方便地在mac上安裝常用的命令列工具。給出官網:http://brew.sh/

安裝和使用方法官網說得很詳細,恩。。

2. 安裝ffmpeg

上面我們已經安裝了Homebrew,接下來我們很方便地就可以安裝ffmpeg,只需要一行命令:

$ brew install ffmpeg  //使用brew安裝ffmpeg
複製程式碼

執行了上面的命令後,brew會開啟瘋狂下載模式。。如果網速快的話,一會兒就可以下載完畢。然後brew還會自動把ffmpeg的啟動路徑加到path環境變數中,這樣你就可以在任何地方使用ffmpeg了,不需要先cd到ffmpeg安裝目錄再執行命令了。

brew自動把ffmpeg的啟動路徑加到path環境變數時,可能會提示“permission denied”,這是因為brew沒有更改相關檔案的許可權,手動加上就好了,舉個例子:

$ sudo chmod 777 /usr/share/  // 這個命令是給所有程式新增/usr/share/的讀、寫、執行許可權,執行成功之後就brew就可以更改/usr/share/下的內容了
複製程式碼

上面的命令會讓你輸入當前登入使用者的密碼,輸入你電腦的密碼就好啦。

二. 視訊處理

1. 剪輯

有時候我們需要擷取一個長視訊的其中某一段內容,比如從一個視訊的第10秒開始,擷取6秒的內容,也就是10~16秒的內容,輸入一個out.mp4檔案

$ ffmpeg -i in.mp4 -ss 00:00:10 -t 00:00:06 -acodec aac -vcodec h264 -strict -2 out.mp4   //從00:00:10開始,擷取的長度為00:00:06
複製程式碼

引數解釋:

-i 代表輸入待處理的檔案

-ss 代表開始的時間

-t 代表擷取的長度。

-acodec 音訊編解碼器,這個不懂的話也沒關係,直接照抄就行。。

-vcodec 音訊編解碼器,這個不懂的話也沒關係,直接照抄就行。。

2. 縮放

很多時候我們需要把一個高解析度的視訊處理成一個低解析度的視訊,以達到減小視訊體積的目的。舉個例子:把一個10801920的視訊縮小到360640

$ ffmpeg -i in.mp4 -vf scale=360:640 -acodec aac -vcodec h264 out.mp4  // 1080*1920-->360*640
複製程式碼

引數解釋:

-i 代表輸入,

-vf 的全稱是video filter,即:視訊濾鏡,縮放其實就是給視訊新增一個濾鏡。

scale=360:640 scale是一種濾鏡,縮放濾鏡,格式是:scale=width:height,其中,width和height分別是處理後的寬和高

3. 裁剪

有時候我們想擷取一個大視訊的中間一部分畫面,比如一個10801920的視訊,我們想擷取中間的10801080的部分,這個也可以實現的:

$ ffmpeg -i in.mp4 -strict -2 -vf crop=1080:1080:0:420 out.mp4 
複製程式碼

引數解釋:

crop 和上面的scale一樣,也是視訊濾鏡的一種,crop是裁剪濾鏡。四個引數分別是 width:height:x:y,其中width和height指的是裁剪的寬和高,x和y代表裁剪的區域的左上角的座標,座標系原點為原視訊的左上角。比如 0:0就代表原視訊的左上角,50:50就代表以原視訊的左上角為原點的座標系的50:50位置

4. 旋轉

使用ffmpeg可以輕鬆地旋轉視訊。舉個例子:將一個視訊順時針旋轉90度

$ ffmpeg -i in.mp4 -vf rotate=PI/2:ow=1080:oh=1920 out.mp4
複製程式碼

引數解釋:

視訊旋轉其實也是一直濾鏡。

rotate=PI/2 rotate是旋轉濾鏡,後面的“PI/2”旋轉角度(正數代表順時針),這裡是90度

rotate除了指定旋轉角度的引數外,還有其他一些引數:

ow 全稱是out width,輸出視訊的寬度,如果不指定,預設是輸入視訊的寬度

oh 全稱是out height,輸出視訊的高度,如果不指定,預設是輸入視訊的高度

5. 調節幀率

幀率會很大程度上影響畫面的流暢度和視訊的體積,幀率越大,畫面越流暢,同時視訊體積越大。

我們有時候需要通過降低幀率來減小視訊的體積。

舉個例子:將一個視訊的幀率降到15

$ ffmpeg -i in.mp4 -r 15 out.mp4
複製程式碼

引數解釋:

-r 幀率

6. 格式轉換

ffmpeg具備強大的格式轉換功能,這裡舉幾個常用的例子。

$ ffmpeg -i in.mov -vcodec copy -acodec copy out.mp4  // mov --> mp4
$ ffmpeg -i in.flv -vcodec copy -acodec copy out.mp4  // flv --> mp4
$ ffmpeg -i in.gif -vf scale=420:-2,format=yuv420p out.mp4  // gif --> mp4
複製程式碼

7. 檢視視訊的詳細資訊

有的時候我們需要在處理之前先了解一下視訊的引數資訊,比如解析度、位元率等等。可以使用下面的命令:

$ ffmpeg -i in.mp4   // 不加任何引數,只指定輸入的視訊
複製程式碼

來個截圖:

使用FFmpeg處理音視訊

三. 音訊處理

稍後繼續。。。

四. Reference

FFmpeg有著強大的音視訊處理能力,其官網給出了眾多音視訊處理濾鏡的使用介紹,文中只提到了一些常用的操作,如果沒有你想要的,可以直接去看下官網的濾鏡介紹。

音視訊濾鏡介紹:http://ffmpeg.org/ffmpeg-filters.html

相關文章