音視頻開發(fā)之旅(31) -FFMPEG常用命令

目錄

  1. 播放器ffplay常用命令
  2. 多媒體分析器ffprobe常用命令
  3. 編解碼工具ffmpeg常用命令
  4. 資料
  5. 收獲

FFMPEG是一個跨平臺的音視頻音視頻處理的開源套件,我們的學習實踐路線如下:
首先使用PC上使用熟悉基本的常用命令;
再交叉編譯android平臺上使用的ffmpeg株憾;
最后在代碼層面學習ffmpeg的代碼結構以及具體實現(xiàn)本鸣。

本篇业汰,我們先來熟悉ffmpeg的常用命令征冷,先從直觀上了解ffmpeg能做什么寂拆。

使用FFMPEG之前铜秆,我們要先安裝對應的應用程序淹真,可以采用從ffmpeg官網(wǎng)上下載源碼進行配置編譯使用,也可以采用直接安裝對應的應用程序连茧,

Mac/Linux平臺可以通過如下方式安裝編譯

1. 在yasm官網(wǎng)http://yasm.tortall.net/Download.html 下載yasm
2. 配置yasm
3. make 編譯yasm
4. make install 安裝yasm
5. 在官網(wǎng)http://ffmpeg.org/ 下載ffmpeg
6. 配置ffmpeg
7. make編譯
8. make install 安裝ffmpeg

Mac下也可以通過brew安裝ffmpeg

brew iinstall ffmpeg --with-ffplay

我們可以通過后者快速安裝ffmpeg趟咆,先了解ffmpeg能做什么,再來編譯或者交叉編譯生成對應的ffmpeg命令梅屉。

一值纱、播放器ffplay常用命令

ffplay是以FFMPEG框架為基礎,外加SDL構建的多媒體播放器坯汤。 支持各種格式的音視頻的播放虐唠,包括各種封裝格式的音視頻、以及裸音頻pcm或者裸yuv數(shù)據(jù)惰聂,也可以設置音視頻同步的方式(以音頻為基準疆偿、以視頻為基準、外部時鐘)搓幌、播放時可以設置循環(huán)模式
下面我們來具體實踐

1.1 播放音頻數(shù)據(jù)

ffplay music.mp3
播放音頻可以通過快捷鍵w切換顯示模式


通過快捷鍵q退出播放

1.2 播放視頻數(shù)據(jù)

ffplay video.mp4

如果想循環(huán)播放可以通過loop來指定循環(huán)次數(shù)

ffplay video.mp4 -loop 3

1.3 播放yuv數(shù)據(jù)

使用ffplay播放yuv原始數(shù)據(jù)表示的視頻圖片杆故,要告訴ffplay視頻的格式、大小溉愁、類型处铛,如下所示:

ffplay -f rawvideo -s 640x480 -pix_fmt yuv420p yuv.yuv

從mp4中提取出對應的yuv數(shù)據(jù),可以通過

ffmpeg -i video.mp4 -s 640x480 -pix_fmt yuv420p yuv.yuv

1.4 設置音視頻同步方式

音視頻常用的方案有三種 以音頻為基準(默認)、以視頻為基準撤蟆、以外部時鐘為基準奕塑。

ffplay video.mp4 -sync audio
ffplay video.mp4 -sync video
ffplay video.mp4 -sync ext

二、多媒體分析器ffprobe常用命令

ffprobe 的是FFMPEG提供的多媒體探測分析工具家肯,可以分析格式音視頻的信息

ffprobe music.mp3

-->
Duration: 00:04:28.62, start: 0.025057, bitrate: 320 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
    Metadata:
      encoder         : LAME3.99r

通過上面信息可以看到
音樂時長信息:Duration: 00:04:28.62龄砰;
開始時間:start: 0.025057
比特率:320 kb/s
流的類型:Stream #0:0: Audio: mp3
采樣率:44100 Hz
聲道:stereo

同樣的我們可以通過ffprobe來查看視頻的信息

ffprobe video.mp4

-->

Duration: 00:03:25.75, start: 0.000000, bitrate: 629 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 496 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)

    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)

我們可以看到視頻有兩個流:Stream #0:0(und): Video 視頻流和Stream #0:1(und): Audio音頻流。
分辨率:640x480
幀率:24 fps
視頻編碼格式: h264 (High) (avc1 / 0x31637661),
圖像存儲方式:yuv420p

三讨衣、編解碼工具ffmpeg常用命令

ffmpeg命令可以轉(zhuǎn)化各種格式的多媒體文件换棚。
按照功能分類可以分為如下常用幾種類型

  1. 信息查詢部分
  2. 通用參數(shù)
  3. 視頻參數(shù)
  4. 音頻參數(shù)

可以通過ffmpeg --help查看支持的上述命令
查詢參數(shù)的部分如下:

-formats            show available formats
-muxers             show available muxers
-demuxers           show available demuxers
-devices            show available devices
-codecs             show available codecs
-decoders           show available decoders
-encoders           show available encoders
-bsfs               show available bit stream filters
-protocols          show available protocols
-filters            show available filters
-pix_fmts           show available pixel formats
-layouts            show standard channel layouts
-sample_fmts        show available audio sample formats
-colors             show available color names

比如可以通過ffmpeg -codecs查看支持的編碼類型

下面重點說下通用類型、音頻參數(shù)和視頻參數(shù)

3.1 通用參數(shù)

-i filename  指定輸入文件名  
-y           覆蓋同名的輸出文件
-f fmt       指定音/視頻的格式
-t duration  指定輸出音/視頻的時長反镇,單位秒
-to time_stop 指定輸出音/視頻結束點固蚤,單位秒
-fs limit_size  限定輸出文件大小
-ss time_off    指定輸出音/視頻的開始時間點,單位秒愿险,也支持hh:mm:ss的格式

3.2 音頻參數(shù)

-aq quality   指定輸出音頻的質(zhì)量
-ar rate      指定音頻采樣率 (單位 Hz)
-ac channels  指定音頻聲道數(shù)量
-an           輸出的文件不帶音頻
-acodec codec 指定輸出的音頻編碼類型('copy' to copy stream)
-vol volume    指定音頻的音量 (256=normal)
-af filter_graph    指定音效
-ab    指定輸出音頻的比特率

3.3 視頻參數(shù)

-r rate   指定幀率 (單位Hz )
-s size   指定分辨率 (WxH)
-aspect aspect  指定寬高比(4:3, 16:9 or 1.3333, 1.7777)
-vn           指定輸出文件不包含視頻
-vcodec codec 指定輸出視頻的編碼格式 ('copy' to copy stream)

-vf filter_graph 指定視頻濾鏡
-ab bitrate      指定音頻比特率 (please use -b:a)
-b bitrate   指定比特率颇蜡,若指定該值為平均比特率 (please use -b:v)
-vb 指定視頻比特率

下面來看下一些比較常用的命令事例

1. flac格式 --》轉(zhuǎn)成mp3

ffmpeg -i in.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3

輸入的音頻文件為in.flac价说,指定編碼格式為libmp3lame(即mp3的編碼庫)辆亏,音頻采樣率44100,比特率為320kb/s鳖目,聲道數(shù)量為2扮叨,輸出文件為out.mp3

2. 轉(zhuǎn)換視頻格式

ffmpeg -i in.mov -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4

碼率控制模式: -qp -crf -b

-qp(Constant Quantizer)恒定量化器模式
-crf(Constant Rate Factor) 恒定速率因子模式
-b (bitrate) 固定目標碼率模式

VBR(Variable Bit Rate)動態(tài)比特率 簡單的給少些碼率、負責的多放些碼率

CBR(Constant Bit Rate)恒定比特率 在vbr的基礎上改進 碼率固定在一個值上

3. 提取視頻

ffmpeg -i in.mp4 -vcodec copy -an v.mp4

還可以從視頻文件中直接提取出裸h264數(shù)據(jù)
ffmpeg -i in.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb out.h264
其中mp4toannexb是一種bitmapfilter類型

4. 提取音頻

ffmpeg -i in.mp4 -vn -acodec copy a.m4a

如果多個音頻流 通過 -map 0:3來分別提取

eg
Stream #0:2[0x81]:Audio:ac3,48khz,5.1,s16,384kb/s
Stream #0:3[0x82]:Audio:ac3,48khz,5.1,s16,384kb/s
Stream #0:4[0x80]:Audio:ac3,48khz,5.1,s16,384kb/s

再合并回去

ffmpeg -i a.m4a -i v.mp4 -c copy out.mp4

5. 截取

ffmpeg -i in.mp3 -ss 00:01:00 -to 00:10:00 -acodec copy out.mp3
或者
ffmpeg -i in.mp3 -ss 00:01:00 -t 10 -acodec copy out.mp3

把-ss放在-i之前领迈,ffmpeg會啟用關鍵幀技術彻磁,加速它的操作,但這樣提取出來的時期狸捅,在播放時顯示的
起止不一定準確衷蜓,可以通過 -copyts 拷貝時間戳,保證時間的正確性

ffmpeg -i in.mp3 -ss 00:01:00 -to 00:10:00 -acodec copy out.mp3
ffmpeg  -ss 00:01:00 -i in.mp3 -to 00:10:00 -acodec copy out.mp3
ffmpeg  -ss 00:01:00 -i in.mp3 -to 00:10:00 -acodec copy-copyts out.mp3

還可以截取多個文件

ffmpeg -i video.mp4 -t 00:00:50 -c copy small-1.mp4 -ss 00:00:50 -t 10 -codec copy small-2.mp4 -y

6. 把多個視頻連接成一個視頻
多個視頻的寬高尘喝、碼率一致

ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4

如果參數(shù)不一致推薦使用Avidemux這款軟件處理

7. 截圖

ffmpeg -i in.mp4 -ss 5 -vframes 1 img.jpg

上述指令是指 在第五秒截圖

還可以采用更加方便的方式截一系列的圖

ffmpeg -i in.mp4 -r 0.25  frames_%04d.png

上述命令指定每4秒截取一幀畫面生成一張圖片磁浇,

8. 水印

ffmpeg -i in.mp4 -i logo.png -filter_complex "overlay=20:20" out.mp4

通過兩個-i指定兩個輸入源,一個是視頻朽褪,一個是水印置吓,通過filter_complex指定水印的位置_

9. 動圖

ffmpeg -i in.mp4 -ss 7.5 -to 8.5 -s 640x320 -r 15 out.gif

指定分辨率為640x320,幀率為15

或者可以通過如下命令指定寬高

ffmpeg -i in.mp4 -vf scale=100:-1 -t 5 -r 10 out.gif

寬高比不變缔赠,寬度指定為100

還可以把一組圖片生成一張動圖

ffmpeg -i frames_%04d.png -r 5 out.gif

10.淡入淡出效果
給一個音頻做一個淡入的效果,可以通過如下命令

ffmpeg -i music.mp3 -filter_complex afade=t=in:ss=0:d=5 music11.mp3

前5秒做個淡入效果

淡出效果可以采用如下命令

ffmpeg -i music.mp3 -filter_complex afade=t=out:st=200:d=5 music22.mp3

從200秒開始做5秒的淡出效果

11. 倍速
兩倍速處理音頻

ffmpeg -i music.mp3 -filter_complex atempo=2 out1.mp3 -y

0.5倍速處理音頻

ffmpeg -i music.mp3 -filter_complex atempo=0.5 out1.mp3 -y

12.混音
將兩個聲音進行合并

ffmpeg -i music.mp3 -i bg.mp3 -filter_complex amix=inputs=2:duration=shortest out.mp3

四衍锚、資料

《FFmpeg從入門到精通》
《音視頻開發(fā)進階指南》
【FFmpeg 分P教學】轉(zhuǎn)碼、壓制嗤堰、錄屏戴质、裁切、合并、提取 … 統(tǒng)統(tǒng)不是問題置森。
基于FFmpeg+SDL的視頻播放器的制作——雷霄驊

收獲

  1. 了解ffplay常用命令的使用
  2. 了解ffprobe的使用
  3. 了解ffmpeg常用命令
  4. 學習實踐常用命令的使用場景

感謝你的閱讀

下一篇我們學習實踐“交叉編譯android平臺使用的ffmpeg”斗埂,歡迎關注公眾號“音視頻開發(fā)之旅”,一起學習成長凫海。

歡迎交流

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呛凶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子行贪,更是在濱河造成了極大的恐慌漾稀,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件建瘫,死亡現(xiàn)場離奇詭異崭捍,居然都是意外死亡,警方通過查閱死者的電腦和手機啰脚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門殷蛇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人橄浓,你說我怎么就攤上這事粒梦。” “怎么了荸实?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵匀们,是天一觀的道長。 經(jīng)常有香客問我准给,道長泄朴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任露氮,我火速辦了婚禮祖灰,結果婚禮上,老公的妹妹穿的比我還像新娘畔规。我一直安慰自己局扶,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布油讯。 她就那樣靜靜地躺著详民,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陌兑。 梳的紋絲不亂的頭發(fā)上沈跨,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音兔综,去河邊找鬼饿凛。 笑死狞玛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的涧窒。 我是一名探鬼主播心肪,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纠吴!你這毒婦竟也來了硬鞍?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤戴已,失蹤者是張志新(化名)和其女友劉穎固该,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糖儡,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡伐坏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了握联。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桦沉。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖金闽,靈堂內(nèi)的尸體忽然破棺而出纯露,到底是詐尸還是另有隱情,我是刑警寧澤呐矾,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布苔埋,位于F島的核電站懦砂,受9級特大地震影響蜒犯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荞膘,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一罚随、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羽资,春花似錦淘菩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腹暖,卻和暖如春汇在,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脏答。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工糕殉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亩鬼,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓阿蝶,卻偏偏與公主長得像雳锋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子羡洁,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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