FFMpeg 常用命令格式轉換,視訊合成

面向大佬程式設計ing發表於2019-03-29

FFmpeg都是命令列的,用起來肯定不方便。但是,這對技術宅應該不成問題。下面,我就羅列一些比較實用的使用方法吧。

FFmpeg的下載與安裝

FFmpeg是開源的。但我們不必去下載它的原始碼。下載已經編譯好的exe/dll即可。可以到http://www.ffmpeg.org/download.html,然後點選“Windows Builds”,再根據你當前的機器是32位還是64位來決定下載哪個包。我的機器跑的是Win 7,所以我選擇了“Download FFmpeg git-7c210c4 64-bit Shared”。如果你英文不好,也可以直接去我的網盤下載:http://pan.baidu.com/s/1jGgOomy


下載完成之後,解壓到硬碟上,假設路徑為E:\OpenSrc。啟動一個控制檯程式,然後執行DOS命令進入FFmpeg工具的bin目錄,如下:

應用場景1:格式轉換

我想把用iPhone拍的.MOV檔案轉成.avi檔案。最簡單了,可以執行下面的命令:

ffmpeg -i D:\Media\IMG_0873.MOV D:\Media\output.avi

意思是,把D:\Media目錄下的原始檔IMG_0873.MOV(視訊:h.264,音訊:aac)轉換成output.avi(編碼格式自動選擇為:視訊mpeg4,音訊mp3),目標檔案仍然儲存到D:\Media目錄下。問題來了:我想自己指定編碼格式,怎麼辦呢?一種方法是,通過目標檔案的副檔名(.flv、.mpg、.mp4、.wmv等)來控制,比如:

ffmpeg -i D:\Media\IMG_0873.MOV D:\Media\output2.flv

另一種方法是通過-c:v引數來控制,比如我想輸出的視訊格式是H.265(警告:編碼時間會比較長哦)。命令列如下:

ffmpeg -i D:\Media\IMG_0873.MOV -c:v libx265 D:\Media\output265.avi

注:可以先用ffmpeg -encoders命令檢視一下所有可選的編碼格式。

不再深究了,我們繼續。我發現原始檔的影象幀尺寸是1920x 1080,我不需要這麼大——能有720 x 480就夠了。於是,就要用上-s引數了。為了保證影象縮放後的質量,最好加上碼流引數-b:v。如下:

ffmpeg -i D:\Media\IMG_0873.MOV -s 720x480 -b:v 1500k D:\Media\output2.avi

還可以更簡單一點,使用-target引數匹配行業標準,引數值可以是vcd、svcd、dvd、dv、dv50等,可能還需要加上電視制式作為字首(pal-、ntsc-或film-)。如下:

ffmpeg -i D:\Media\IMG_0873.MOV -target pal-dvd D:\Media\output2dvd.avi

又來一個問題:我發現用手機拍的視訊中,有些是顛倒的,我想讓它順時針旋轉90度。這時候,可以使用-vf引數加入一個過濾器,如下:

ffmpeg -i D:\Media\IMG_0873.MOV -vf "rotate=90*PI/180" D:\Media\output3.avi

注:如果想逆時針旋轉90度,90前面加個負號就可以了。

如果我只需要從源視訊裡擷取一小段,怎麼辦呢?比如從第2秒的地方開始,往後擷取10秒鐘。命令列可以這樣:

ffmpeg -ss 2 -t 10 -i D:\Media\IMG_0873.MOV D:\Media\output4.avi

注:這種情況下,-ss和-t引數必須放在-i前面,表示是限定後面跟著的輸入檔案的。

應用場景2:視訊合成

我發現,用手機拍的視訊有時候背景噪音比較大。怎麼把噪音去掉,換成一段美妙的音樂呢?使用FFmpeg也能輕易做到。

第一步:把原始檔裡的音訊去掉,生成一個臨時檔案tmp.mov

ffmpeg -i D:\Media\IMG_0873.MOV -vcodec copy -an D:\Media\tmp.mov

注:-vcodeccopy的意思是對源視訊不解碼,直接拷貝到目標檔案;-an的意思是將原始檔裡的音訊丟棄。

第二步:把這個無聲的視訊檔案(tmp.mov)與一個音樂檔案(music.mp3)合成,最終生成output.mov

ffmpeg -i D:\Media\tmp.mov -ss 30 -t 52 -i D:\Media\music.mp3 -vcodec copy D:\Media\output5.avi

為了保證良好的合成效果,音樂時長必須匹配視訊時長。這裡我們事先知道視訊時長為52秒,於是擷取music.mp3檔案的第30秒往後的52秒與視訊合成。另外,為了保證音訊時長擷取的準確性,我們這裡沒有使用-acodec copy,而是讓音訊重新轉碼。

還有一種情況:我們希望在一段視訊上疊加一張圖片。可以簡單實現如下:

ffmpeg -i D:\Media\IMG_0873.MOV -i D:\Media\logo.png -filter_complex 'overlay' D:\Media\output6.avi

應用場景3:視訊播放

格式轉換或合成之後,我們需要試著播放一下。播放器的選擇很多。這裡順手用ffplay工具也行:

ffplay -i D:\Media\output6.avi

應用場景4:獲取視訊資訊

有時候,我只是想看看這個視訊檔案的格式資訊。可以用ffprobe工具:

ffprobe -i D:\Media\IMG_0873.MOV

其他應用

FFmpeg的功能非常強大。關鍵是要理解各種引數的意義,並且巧妙搭配。必要的話,就把線上文件完整讀一遍吧:http://www.ffmpeg.org/ffmpeg.html

相關文章