FFmpeg:淺談命令集合


前言


在上一篇博客中我們搭建了FFmpeg的基本環境,這一篇博客我們主要來說一下FFmpeg的各種命令,主要包含一下九大類命令.如下所示.接下來我們就逐一的來說明每一種命令的使用與示例.

FFmpeg命令分類
基本信息查詢命令
錄制命令
播放命令
分解/復用命令
處理原始數據命令
裁剪與合并命令
圖片/視頻互轉命令
直播相關命令
視頻濾鏡命令


基本信息查詢命令


常用基本信息查詢命令如下所示.

命令 作用 命令 作用
-version 顯示版本 -formats 顯示可用的格式
-demuxers 顯示可用的demuxers -protocols 顯示可用的協議
-muxers 顯示可用的muxers -filters 顯示可用的過濾器
-devices 顯示可用的設備 -pix_fmts 顯示可用的像素點
-codecs 顯示所有編解碼器 -sample_fmts 顯示可用的采樣格式
-decoders 顯示可用的解碼器 -layouts 顯示channel名稱
-encoders 顯示可用的編碼器 -colors 顯示識別的顏色名稱
-bsfs 顯示比特流filter

例如查詢 可用的解碼器,我們直接使用下面的命令即可.

ffmpeg -decoders


錄制命令


錄制命令也是我們常用的一種命令,這里直接上命令了.

ffmpeg -f avfoundation -i 1 -r 30 out.yuv

各個參數的解釋如下所示.

參數 說明
-f 指定使用哪個庫來采集數據,avfoundation是iOS的音視頻庫
-i 指定從哪里采集數據,它是一個文件索引號,我們可以通過ffmpeg -f avfoundation -list_devices true -i ""查詢.
-r 指定幀率

這里先說明一下查詢文件索引號的命令.

ffmpeg -f avfoundation -list_devices true -i ""

當我們使用上面的命令去查詢avfoundation的所能使用的設備的時候.

[AVFoundation input device @ 0x7fb4cb50f1c0] AVFoundation video devices:
[AVFoundation input device @ 0x7fb4cb50f1c0] [0] FaceTime 高清攝像頭(內建)
[AVFoundation input device @ 0x7fb4cb50f1c0] [1] Capture screen 0
[AVFoundation input device @ 0x7fb4cb50f1c0] AVFoundation audio devices:
[AVFoundation input device @ 0x7fb4cb50f1c0] [0] Built-in Microphone

我們可以看到我的電腦一共有兩個視頻設備和一個音頻設備, 在錄制的時候,我們使用-i 1的指令就是來指定我們需要錄制桌面,所以我們可以捕捉到桌面的圖像.當然了,我們可以使用-i 0來開啟電腦的高清攝像頭,來捕捉到我這個逗比,哈哈[手動滑稽]

上面我們可以錄制視頻,我們如何錄制音頻呢?我們在錄制音頻的時候該如何制定我們的設備呢?我們帶著這些疑問接著往下看.錄制音頻的時候,我們整體的命令如下所示.

ffmpeg -f avfoundation -i :0 out.wav

這時候我們發現 -i 指定音頻設備的時候文件索引號前面需要加冒號 :

上面我們看到了如何錄制視頻和音頻,如果我們想同時錄制音視頻該怎么辦呢?我們只需要把上面的兩條命令合并一下即可.整體命令如下所示.

ffmpeg -f avfoundation -i :0 -f avfoundation -i 0 -r 30 out.flv 


播放命令


在錄制命令模塊中我們錄制了視頻和音頻,所以我們需要看我們錄制的結果,這時候需要播放命令.播放命令是基于 ffplay 的,這里有個點需要注意,那就是yuv格式的視頻數據是沒有包含幀大小(WxH)的視頻文件.所以我們需要指定幀大小.整體命令如下所示.

ffplay -s 1920x1080  -pix_fmts uyvy422 out.yuv 
參數 說明
-s 設置顯示幀存儲(WxH格式),僅適用于類似原始YUV等沒有包含幀大小(WxH)的視頻.
-pix_fmts 設置像素格式.ffplay 默認使用的像素格式yuv420p,但是錄制的是uyvy422.

上面兩個參數具體指可以參考錄制過程中的打印值.

對于音頻和常見的音視頻,我們可以不加任何的參數直接進行播放,如下所示.

ffplay out.wav

上面我們說到了如何播放音視頻,接下來我們簡單的說一下 ffplay 其他常見的參數.

ffplay參數 說明
-x 強制顯示寬帶。
-y 強制顯示高度。
-s 幀尺寸 設置顯示幀存儲(WxH格式),僅適用于類似原始YUV等沒有包含幀大小(WxH)的視頻。該參數已經被廢棄,請嘗試用-video_size代替.
-fs 以全屏模式啟動。
-an 禁用音頻(不播放聲音)
-vn 禁用視頻(不播放視頻)
-sn 禁用字幕(不顯示字幕)
-ss 根據設置的秒進行定位拖動,注意時間單位:比如'55' 55 seconds, '12:03:45' ,12 hours, 03 minutes and 45 seconds, '23.189' 23.189 second
-t 設置播放視頻/音頻長度,時間單位如 -ss選項
-bytes 按字節進行定位拖動。
-seek_interval 自定義左/右鍵定位拖動間隔(以秒為單位),默認值為10秒
-nodisp 關閉圖形化顯示窗口,視頻將不顯示
-noborder 無邊框窗口
-volume 設置起始音量。音量范圍[0 ~100]
-f 強制使用設置的格式進行解析。比如-f s16le
-loop 設置播放循環次數
-showmode 設置顯示模式,可用的模式值:0 顯示視頻,1 顯示音頻波形,2 顯示音頻頻譜。缺省為0,如果視頻不存在則自動選擇2
-vf 設置視頻濾鏡
-af 設置音頻濾鏡


分解/復用命令


上面說到錄制和播放命令兩種命令,這一個模塊我們來說說分解與復用命令.比如一個視頻里面包含著視頻流,音頻流以及其他信息,我們想單獨的抽取視頻或者音頻,這時候我們該怎么辦呢?這時候我們就需要用到我們的分解/復用命令了.

例如我們想把一個視頻格式進行轉換,其實就是一個分解與復用的過程.那么我們就可以如下命令進行操作.

ffmpeg -i input.mp4 -vcodec copy -acodec copy out.mov
參數 說明
-i 指定需要轉換格式的文件
-vcodec 視頻處理方式
-acodec 音頻處理方式

當我們需要單獨抽取音頻或者視頻的時候,我們需要用的操作是這樣的.-vn-an 兩個參數去除視頻和音頻.命令如下所示.

#抽取視頻
ffmpeg -i input.mp4 -vcodec copy -an out.mov
#抽取音頻
ffmpeg -i input.mp4 -acodec copy -vn out.aac

當我們了解基本的分解與復用命令之后,我們就可以做一些比較有趣的事情,例如做一個小咖秀的功能,給一段視頻進行配音.其實就是我們需要抽取出我們的視頻數據,把視頻數據和音頻數據合并在一起即可.

#移除原始的音頻數據
ffmpeg -i input.mp4  -vcodec copy -an out.mp4
#合并新的視頻和音頻數據
ffmpeg -i out.mp4 -i out.aac  -vcodec copy -acodec copy result.mp4


處理原始數據命令


有些時候,我們需要提取音視頻文件中的原始數據,例如yuv視頻原始數據和pcm音頻原始數據等等,這時候我們就需要使用到處理原始數據命令了.接下來我們直接來看示例.

ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
參數 說明
-i 指定操作的多媒體文件
-an 移除音頻
-c:v rawvideo 對視頻進行編碼(原始數據格式)
-pix_fmt 設置像素格式.

我們抽取音頻的時候,需要指定 音頻采樣率 ,聲道信息 ,存儲格式 等相關參數.命令如下所示.

ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
參數 說明
-i 指定操作的多媒體文件
-vn 移除視頻
-ar 音頻的采樣率 例如 44100 48000 32000 16000 等
-ac 設置聲道
-f 設置存儲格式 例如這里使用的是s16le

同時注意的是,在播放的時候也需要注意存儲格式.所以播放命令示例如下所示.

ffplay -f s16le out.pcm


裁剪與合并命令


在日常生活中我們會有對視頻進行裁剪以及對多個視頻進行合并需求,這時候我們就需要使用到裁剪與合并命令了.廢話不多講,我們直接上示例.

ffmpeg -i input.mp4 -ss 00:00:00 -t 3 out.mp4
參數 說明
-i 指定操作的多媒體文件
-ss 裁剪開始時間
-t 剪切時長,單位秒

合并命令和我們以前命令有些不同,為了實現多個視頻的合并,我們需要在一個文件中寫下我們所需要合并的所有的多媒體文件.格式如下所示.

file 'input.mp4'
file 'input2.mp4'

接著我們使用我們的合并命令就行了.命令如下所示.

ffmpeg -f concat -i inputs.txt out.mp4
參數 說明
-i 指定操作的文件
-f concat 合并操作


圖片/視頻互轉命令


圖片和視頻的互相轉換也是我們日常生活比較常用的功能.我們經常需要去視頻中抽取圖片,也會有把圖片轉換為視頻的需求.這是我們就可以使用FFmpeg來解決這些問題了.

#視頻轉圖片
ffmpeg -i input.mp4 -r 1 -f image2 image-%3d.jpeg
參數 說明
-i 指定操作的文件
-f image2 指定圖片類型
-r 轉換圖片的幀率,一秒幾張
#圖片轉視頻
ffmpeg -i image-%3d.jpeg -r 6 out.mp4
參數 說明
-i 指定操作的文件
-r 指定一張圖片所占的幀率


直播命令


直播命令我們可能更多的會用于測試,例如使用直播命令推流或者拉流.

#直播推流命令
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/stramName
#直播拉流命令
ffmpeg -i rtmp://server/live/stramName -c copy dump.flv

例如,下面就是可用的示例.

ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy dump.m3u8


視頻濾鏡命令


FFmpeg中的視頻濾鏡也是非常的豐富的,我們可以通過以前的命令查詢所有可用的濾鏡信息.

ffmpeg -filters

這里我們只說幾個常見的濾鏡.

  • 視頻的裁剪濾鏡
ffmpeg -i input.mp4 -vf crop=in_w-100:in_h-100 -c:v libx264 -c:a copy out.mp4
參數 說明
-i 指定操作的文件
-vf 指定視頻濾鏡
crop 濾鏡名稱
-c:v 指定視頻編碼格式
-c:a 指定音頻編碼格式
  • 視頻的縮放
ffmpeg -i input.mp4 -vf scale=iw/2:-1 scale.mp4
參數 說明
-i 指定操作的文件
-vf 指定視頻濾鏡
scale 濾鏡名稱,iw/2表示寬縮小一倍,-1表示高等比例縮小
  • 添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "[1:v] scale=80:80[logo];[0:v][logo]overlay=x=0:y=0" logo.mp4
參數 說明
-i 指定操作的文件
-vf 指定視頻濾鏡
scale 圖片寬高信息
overlay 圖片的位置信息
  • 去除水印
ffmpeg -i logo.mp4 -filter_complex "delogo=x=1:y=1:w=80:h=80:show=1" delogo.mp4
參數 說明
-i 指定操作的文件
-filter_complex 指定視頻濾鏡
delogo 去除logo濾鏡
show 會暫時是否顯示去除的綠色邊框


總結


FFmpeg中的命令多用于腳本的編寫以及測試用途,也可以自己做一些簡單的小工具進行日常的使用.這里就不過多敘述了.下面的博客基本是圍繞FFmpeg代碼編寫進行的,歡迎指導批評.


?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容

  • 前言 如此強大的FFmpeg,能夠實現視頻采集、視頻格式轉化、視頻截圖、視頻添加水印、視頻切片、視頻錄制、視頻推流...
    RichyLeo閱讀 17,417評論 1 22
  • [TOC] 基本知識FFmpeg 資源網站音視頻流容器聲道命令種類處理流程 下載 目錄結構 模塊列表顯示所有可用的...
    Afra55閱讀 1,356評論 0 1
  • 因為正在學習音視頻,從當當買了關于FFmpeg的書,在家補充知識。遇到了一些命令行的使用,我把它從書上移到筆記上,...
    請叫我果爸閱讀 14,717評論 0 18
  • 前言 如此強大的FFmpeg,能夠實現視頻采集、視頻格式轉化、視頻截圖、視頻添加水印、視頻切片、視頻錄制、視頻推流...
    sillen閱讀 5,395評論 2 45
  • 前言 如此強大的FFmpeg,能夠實現視頻采集、視頻格式轉化、視頻截圖、視頻添加水印、視頻切片、視頻錄制、視頻推流...
    騷之哈塞給閱讀 25,791評論 6 39