FFmpeg 簡要介紹荒典、常用命令和實(shí)例(一)

?

簡要介紹


FFmpeg 介紹

  • 音視頻多媒體處理開源框架,采用LGPL或GPL許可證吞鸭。
  • 有音視頻采集寺董、編碼、解碼瞒大、轉(zhuǎn)碼螃征、復(fù)用、解復(fù)用透敌、音視頻分離盯滚、合并、流化酗电、過濾器等功能魄藕。
  • 可在iOS、Android撵术、Window背率、Linux馋评、Mac上運(yùn)行.
  • 包含音頻/視頻編解碼庫libavcodec弧岳,具有非常高的可移植性和編解碼質(zhì)量晓避。

FFmpeg 歷史

  • 2000年, 由法布里斯-貝拉(FabriceBellard)創(chuàng)建也切。
  • 2004年, 邁克爾(Michael Niedermayer)接管。
  • 2011年, Libav從FFmpeg分離饵筑。

主要的開發(fā)庫

  • libavutil: 包含一些公共的工具函數(shù)埃篓,包括隨機(jī)數(shù)生成、數(shù)據(jù)結(jié)構(gòu)根资、核心多媒體工具等架专。
  • libavcodec: 用于各種類型聲音/圖像encode/decode編解碼庫。
  • libavformat: 用于各種音視頻封裝格式(mp4/AVI/Flv等)的生成和解析muxer/demuxer玄帕,包括獲取解碼所需信息以生成解碼上下文結(jié)構(gòu)和讀取音視頻幀等功能部脚。
  • libavdevice: 讀取電腦(或者其他設(shè)備上)的多媒體設(shè)備的數(shù)據(jù) 或者輸出數(shù)據(jù)到指定的多媒體設(shè)備上。
  • libswresample: 用于音頻采樣采樣數(shù)據(jù)(PCM)轉(zhuǎn)換的庫裤纹。
  • libswscale: 用于視頻場景比例縮放委刘、色彩映射轉(zhuǎn)換的庫。
  • libavfilter: 包含媒體濾波器的庫服傍。

主要的工具集:

  • ffmpeg: 一個命令行工具钱雷,可用于格式轉(zhuǎn)換骂铁、解碼或電視卡即時編碼等吹零。
  • ffsever: 一個 HTTP 、RTSP的實(shí)時廣播流媒體服務(wù)器.
  • ffplay: 是一個簡單的播放器拉庵,使用ffmpeg 庫解析和解碼灿椅,通過SDL顯示。
  • ffprobe: 一個多媒體流分析工具钞支。 它從多媒體流中收集信息 并且以人類和機(jī)器可讀的形式打印出來茫蛹。

FFmpeg 安裝

  • 先在安裝Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  • 再用Homebrew 安裝 ffmpeg

brew install ffmpeg


FFmpeg 處理音視頻流程

    1. 要有輸入文件: MP4/flv/mkv等具有封裝格式的文件, 里邊包含了音頻/視頻/字幕等很多數(shù)據(jù)。
    1. demuxer: 視音頻分離器分離數(shù)據(jù)烁挟。(會得到一些編碼數(shù)據(jù)包--壓縮后的數(shù)據(jù))
    1. decoder: 解碼婴洼,等到解碼后的數(shù)據(jù)幀。
    1. 自定義處理數(shù)據(jù)幀撼嗓,比如視頻720p轉(zhuǎn)化為480p等柬采。
    1. encoder: 壓縮數(shù)據(jù),得到另一種編碼數(shù)據(jù)包且警。
    1. muxer: 視音頻復(fù)用器封裝音視頻數(shù)據(jù)粉捻,得到指定格式的文件。(MP4/flv/mkv)
    1. 輸出數(shù)據(jù)斑芜。
1.png

?

ffmpeg 命令


基本信息查詢命令

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

例如: ffmpeg -version


錄制/播放命令

?

例 1:


ffmpeg -f avfoundation -i 1 -r 30 out.yuv (錄制視頻)

  • -f: (-f avfoundation)指定使用Mac系統(tǒng)下的 avfoundation庫采集數(shù)據(jù)肩刃,avfoundation是用作音視頻處理的
  • -i: 指定從哪采集數(shù)據(jù),它是一個文件索引號。(-i0:是攝像頭 -i1:是屏幕錄制)
  • -r: 指定幀率盈包,fps沸呐,高清電影在60幀以上(-r60)
  • out.yuv: 指定采集的yuv格式的數(shù)據(jù),yuv是原始格式數(shù)據(jù)呢燥,沒有任何壓縮
  • ffmpeg -f avfoundation -list_devices true -i "": 查詢avfoundation下支持的設(shè)備列表
  • control + c : 退出錄制

例 2:


ffplay -s 2880x1800 -pix_fmt uyvy422 out.yuv (播放)

  • ffplay out.yuv: 播放視頻垂谢。(yuv是原始數(shù)據(jù)不知道視頻大小,ffplay默認(rèn)使用的像素格式y(tǒng)uv420p疮茄,如果使用例 1錄制滥朱,錄制默認(rèn)是uyvy422格式,無法正常播放力试。)
  • ffplay -s 2880x1800 -pix_fmt uyvy422 out.yuv: 播放( 例 1 錄制可正常播放)徙邻。 -> (-s)指定尺寸大小,可以之前錄制的日志中找到畸裳;(-pix_fmt) 指定錄制的像素的格式

例 3:


ffmpeg -f avfoundation -i :0 out.wav  (錄制音頻)

  • ":" : ":"代表音頻設(shè)備
  • ffplay out.wav: 播放音頻

例 4:


// (錄制音視頻同步缰犁。要錄制flv格式的,mp4格式的音頻錄制不上)
ffmpeg -f avfoundation -i 1 -f avfoundation -i :0 -r 30 out2.flv 


分解復(fù)用命令

?

例 1:


// (將test.mp4轉(zhuǎn)換為test.flv)
ffmpeg -i test.mp4 -vcodec copy -acodec copy test.flv  

  • -i: 輸入文件
  • -vcodec copy: 視頻編碼處理方式為復(fù)制
  • -acodec copy: 音頻編碼處理方式為復(fù)制

例 2:


// 只提取視頻
ffmpeg -i test.mp4 -vcodec copy -an test.h264

  • -an: (n:代表no)不要音頻數(shù)據(jù)

例 3:


// 只提取音頻
ffmpeg -i test.mp4 -acodec copy -vn test.aac 

  • -vn: (n:代表no)不要視頻數(shù)據(jù)

處理原始數(shù)據(jù)命令

?

例 1:


// 提取原始視頻yuv數(shù)據(jù)
ffmpeg -i test.mp4 -an -c:v rawvideo -pix_fmt yuv420p test.yuv

//播放yuv怖糊, 播放原始數(shù)據(jù)得告訴播放器數(shù)據(jù)格式類型
ffplay -s 540x960 test.yuv

  • -c:v: 輸出視頻格式帅容。(rawvideo -> 原始數(shù)據(jù)格式)

例 2:


// 提取原始音頻pcm數(shù)據(jù)
ffmpeg -i test.mp4 -vn -ar 44100 -ac 2 -f s16le test.pcm

//播放pcm, 播放原始數(shù)據(jù)得告訴播放器數(shù)據(jù)格式類型
ffplay -ar 44100 -ac 2 -f s16le test.pcm

  • -ar: 設(shè)定音頻采樣率(44100 -> 44k)
  • -ac: 設(shè)定聲音的Channel數(shù)(1單聲道伍伤,2雙聲道并徘,3:立體聲)
  • -f: 設(shè)定數(shù)據(jù)格式(s16le: s有正負(fù),16:16位扰魂,le:little end)
  • .pcm: 聲音的原始數(shù)據(jù)

裁剪和合并命令

?

例 1:


// 裁剪前兩秒
ffmpeg -i test.mp4 -ss 00:00:00 -t 2 test1.ts

// 截取后兩秒
ffmpeg -i test.mp4 -ss 00:00:02 -t 2 test2.ts

  • -ss: 指定開始時間 (00:00:02)
  • -t: 指定持續(xù)時間(00:05)

例 2:


// 新建txt資源
touch resource.txt

// 編輯 resource.txt麦乞,并保存
file 'test1.ts'
file 'test2.ts'

// 使用 resource.txt和音視頻文件拼接
ffmpeg -f concat -i resource.txt test3.mp4

  • -f contat: 設(shè)定文件拼接
3.png

圖片和視頻互轉(zhuǎn)命令

?


// 視頻每1秒生成15張圖片
ffmpeg -i test.mp4 -r 15 -f image2 image_%3d.jpeg

// 圖片生成視頻
ffmpeg -i image_%3d.jpeg test.mp4 

  • -r: 提取圖像頻率(用于視頻截圖)
  • image2: 一種圖片格式

直播類命令


// 推流
ffmpeg -re -i test.mp4 -c copy -f flv address(服務(wù)器地址)

// 拉流
ffmpeg -i address(直播流地址) -c copy test.mp4

  • -re :以本地幀頻讀數(shù)據(jù),避免獲取的幀率比本地快劝评,保持同步

濾鏡命令

?

例 1:


// 裁剪濾鏡
ffmpeg -i test.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy test1.mp4

  • -vf: 設(shè)定視頻濾鏡
  • -af: 設(shè)定音頻濾鏡
  • -c:v: 設(shè)定視頻編碼器
  • -c:a: 設(shè)置音頻編碼器
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姐直,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蒋畜,更是在濱河造成了極大的恐慌声畏,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姻成,死亡現(xiàn)場離奇詭異插龄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)佣渴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門辫狼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辛润,你說我怎么就攤上這事膨处〖樱” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵真椿,是天一觀的道長鹃答。 經(jīng)常有香客問我,道長突硝,這世上最難降的妖魔是什么测摔? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮解恰,結(jié)果婚禮上锋八,老公的妹妹穿的比我還像新娘。我一直安慰自己护盈,他們只是感情好挟纱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腐宋,像睡著了一般紊服。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胸竞,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天欺嗤,我揣著相機(jī)與錄音,去河邊找鬼卫枝。 笑死煎饼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剃盾。 我是一名探鬼主播腺占,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼淤袜,長吁一口氣:“原來是場噩夢啊……” “哼痒谴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铡羡,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤积蔚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后烦周,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尽爆,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年读慎,在試婚紗的時候發(fā)現(xiàn)自己被綠了漱贱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡夭委,死狀恐怖幅狮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤崇摄,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布擎值,位于F島的核電站,受9級特大地震影響逐抑,放射性物質(zhì)發(fā)生泄漏鸠儿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一厕氨、第九天 我趴在偏房一處隱蔽的房頂上張望进每。 院中可真熱鬧,春花似錦命斧、人聲如沸品追。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肉瓦。三九已至,卻和暖如春胃惜,著一層夾襖步出監(jiān)牢的瞬間泞莉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工船殉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鲫趁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓利虫,卻偏偏與公主長得像挨厚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子糠惫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容