目錄
- 播放器ffplay常用命令
- 多媒體分析器ffprobe常用命令
- 編解碼工具ffmpeg常用命令
- 資料
- 收獲
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)化各種格式的多媒體文件换棚。
按照功能分類可以分為如下常用幾種類型
- 信息查詢部分
- 通用參數(shù)
- 視頻參數(shù)
- 音頻參數(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的視頻播放器的制作——雷霄驊
收獲
- 了解ffplay常用命令的使用
- 了解ffprobe的使用
- 了解ffmpeg常用命令
- 學習實踐常用命令的使用場景
感謝你的閱讀
下一篇我們學習實踐“交叉編譯android平臺使用的ffmpeg”斗埂,歡迎關注公眾號“音視頻開發(fā)之旅”,一起學習成長凫海。
歡迎交流