FFmpeg常用命令分類:
- 基本信息查詢
- 錄制
- 分解/復(fù)用
- 裁剪與合并
- 圖片/視頻互轉(zhuǎn)
- 直播
- 處理原始數(shù)據(jù)
- 濾鏡
一. 基本信息查詢命令
二. 錄制命令
FFmpeg錄屏命令:
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
-f avfoundation: 指定使用avfoundation采集數(shù)據(jù)
-i: 指定從哪兒采集數(shù)據(jù)融痛,它是一個文件索引號太闺,1代表是從屏幕采集
-r: 指定幀率
out.yuv表示以yuv格式輸出
所以,上面的指令意思是:使用avfoundation以每秒30的幀率從屏幕采集視頻蛙奖。
輸入上面指令后,就開始錄制了肺孤,可以使用ctrl+c取消錄制司光,再通過以下指令播放錄制的視頻:
ffplay out.yuv
結(jié)果報錯:
Picture size 0x0 is invalid
out.yuv: Invalid argument
這是因為yuv原始數(shù)據(jù)沒有寬高,要指定分辨率春叫,從錄制日志中可以查到:
所以播放指令變成:
ffplay -s 4096x2304 out.yuv
但是播放時出現(xiàn)了以下花屏的情況:
這是因為ffplay默認(rèn)使用的像素格式是yuv420p:
而我們錄制屏幕采用的像素格式是uyvy422:
像素格式不一致導(dǎo)致了無法正確渲染,所以需要另外指定錄制時的像素格式泣港。
ffplay -s 4096x2304 -pix_fmt uyvy422 out.yuv
指令輸入后就能正常播放剛剛錄制的屏幕視頻了暂殖。
上面說了i是設(shè)備索引號,1代表的是從屏幕采集当纱,實際上我們可以通過命令去列出設(shè)備索引號:
ffmpeg -f avfoundation -list_devices true -I ""
上面列出了我的電腦上的視頻設(shè)備和音頻設(shè)備呛每,前面的數(shù)字就是索引號”苟可以看到視頻莉给、音頻索引號都有0、1廉沮,那怎么區(qū)分呢颓遏,也很簡單,錄制音頻指令滞时,索引號放到冒號后邊叁幢,如下:
ffmpeg -f avfoundation -i :0 out.wav
:0就代表音頻設(shè)備:Built-in Microphone內(nèi)置麥克風(fēng)
錄制結(jié)束也是ctrl+c。再通過以下指令來播放剛剛錄制的音頻:
ffplay out.wav
這樣音頻的錄制與播放就完成了坪稽。
三. 分解與復(fù)用命令
FFmpeg分解與復(fù)用主要是文件格式的轉(zhuǎn)換曼玩,以及分解出音頻鳞骤、視頻文件等等。
- 比如黍判,多媒體格式轉(zhuǎn)換豫尽,將一個mp4文件轉(zhuǎn)成flv格式:
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
-i out.mp4:輸入一個名叫out的mp4文件。
-vcodec copy:視頻編碼處理方式顷帖。
-acodec copy:音頻編碼處理方式美旧。
- 單獨(dú)抽取音頻流或視頻流。
如果只是想抽取視頻流贬墩,可以用以下命令:
ffmpeg -i out.mp4 -an -vcodec copy out.h264
-an:不要音頻榴嗅。
同理,只抽取音頻流:
ffmpeg -i out.mp4 -acodec copy -vn out.aac
四. 處理原始數(shù)據(jù)命令
所謂原始數(shù)據(jù)陶舞,就是FFmpeg解碼后的數(shù)據(jù)嗽测。
- 提取視頻原始數(shù)據(jù)。
ffmpeg -i out.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
-c:v:對視頻進(jìn)行編碼肿孵。
rawvideo:編碼格式按原來的格式唠粥。
pix_fmt yuv420p:像素格式是yuv420p。
note: 播放yuv格式的視頻颁井,要指定分辨率厅贪,如
ffplay -s 4096x2304 out.yuv
- 提取音頻PCM原始數(shù)據(jù)。
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
-ar:音頻采樣率雅宾,常用的有48k、32k葵硕、16k等等眉抬。
-ac:音頻聲道,包括單聲道懈凹、雙聲道蜀变、立體聲、環(huán)繞立體聲等等介评,上面-ac2是雙聲道库北。
-f s16le: 存儲格式,s16是有符號16位來表示每個數(shù)值们陆,le是little寒瓦,它是一種存儲方式。
然后播放提取的音頻:
ffplay out.pcm
發(fā)現(xiàn)報錯:
這是因為播放pcm原始音頻數(shù)據(jù)并不知道采樣率坪仇、聲道這些信息杂腰,所以需要直接指定:
ffplay -ar 44100 -ac 2 -f s16le out.pcm
五. 濾鏡命令
濾鏡處理,比如加水印椅文、去水印喂很、畫中畫惜颇、視頻裁剪、音頻倍速等等少辣,都可以通過濾鏡命令實現(xiàn)凌摄。
濾鏡處理是對解碼后的原始數(shù)據(jù)幀進(jìn)行處理,那解碼后的數(shù)據(jù)如何得到呢漓帅,這就要先了解FFmpeg對音視頻文件處理的流程:
- 輸入文件是一些具有封裝格式的文件望伦,經(jīng)過demuxer分解解封裝后,就得到了音頻煎殷、視頻等編碼壓縮數(shù)據(jù)屯伞。
- 將這些編碼數(shù)據(jù)包進(jìn)行解碼decoder,解碼后就得到原始數(shù)據(jù)幀豪直。
- 再將解碼后數(shù)據(jù)幀編碼壓縮成我們想要的大小劣摇,比如調(diào)整分辨率,720縮小變成480P的弓乙。
- 重新muxer封裝編碼后的數(shù)據(jù)包成流行的格式并輸出播放末融。
上面流程是一個完整的流程,其中得到的解碼數(shù)據(jù)暇韧,如果進(jìn)行濾鏡處理勾习,就要再經(jīng)過下面的流程:
解碼后數(shù)據(jù)幀,經(jīng)過濾鏡程序過濾filter懈玻,得到過濾后的數(shù)據(jù)幀巧婶,再重新編碼。
- 視頻畫面大小裁剪
ffmpeg -i water.mp4 -vf crop=in_w-300:in_h-150 -c:v libx264 -c:a copy out.mp4
-vf: 視頻濾鏡類型涂乌,-af就是音頻濾鏡類型艺栈。
crop=in_w-300:in_h-150:crop是濾鏡名,等號后跟的是參數(shù)湾盒,本身視頻的寬高上減去一定的值湿右。
-c:v libx264:視頻編碼器是libx264。
-c:a copy:音頻編碼器是copy原來的罚勾,不作特殊處理毅人。
note: 要先cd到原視頻文件的目錄下,再執(zhí)行上面的命令尖殃。
六. 裁剪與合并命令
- 時長裁剪
ffmpeg -i water.mp4 -ss 00:00:00 -t 5 out.ts
-ss:裁剪起始時間
-t:總時長
- 多個視頻片段進(jìn)行合并
ffmpeg -f concat -i myInputsFile.txt out.mp4
-f concat:合并指令丈莺。
-i myInputsFile.txt:這里的myInputsFile.txt中存放的是多媒體文件列表,該txt文件中內(nèi)容的格式是file filename
分衫,如下:
out.ts和out1.ts是本地兩個視頻文件场刑,當(dāng)然在合并時,要cd到當(dāng)前要合并的視頻文件目錄下。
當(dāng)然其他視頻格式也可以合并牵现,比如將兩個mp4格式的視頻合并铐懊,只需將文件名以上面的格式放到txt文件中即可。
七. 圖片與視頻互轉(zhuǎn)命令
- 視頻轉(zhuǎn)圖片
ffmpeg -i water.mp4 -r 1 -f image2 image-%3d.jpeg
-r:幀率瞎疼,上面是以每秒1幀轉(zhuǎn)出圖片科乎。
-f:轉(zhuǎn)出格式,上面是image格式的贼急,image2就是該格式的第二版茅茂。
image-%3d.jpeg:輸出文件名,前綴是image太抓,在加上3個數(shù)字的文件名空闲。
- 圖片轉(zhuǎn)視頻
ffmpeg -i image-%3d.jpeg imageVideo.mp4
將上面前綴為image的一組圖片轉(zhuǎn)成視頻。
八. 直播推拉流命令
- 直播推流
ffmpeg -re -i water.mp4 -c copy -f flv rtmp://server/live/streamName
-re: 減慢幀率速度走敌,本地音視頻文件是以盡可能快的速度進(jìn)行播放碴倾,加上re是為了讓直播流盡可能與真實的幀率保持一致。
-c: 編解碼方式掉丽,-ac是音頻跌榔,-vc是視頻。上面是copy捶障,不作處理僧须。
-f flv:推出文件格式。
rtmp://server/live/streamName:服務(wù)器地址项炼。
- 直播拉流
ffmpeg -i rtmp://server/live/streamName -c copy myLive.flv
現(xiàn)在應(yīng)用實戰(zhàn)一下担平,比如我們先從湖南衛(wèi)視直播源rtmp://58.200.131.2:1935/livetv/hunantv
拉流,并保存到本地芥挣。
ffmpeg -i rtmp://58.200.131.2:1935/livetv/hunantv -c copy hunanTV.flv
ctrl + c驱闷,取消拉流保存到本地,現(xiàn)在播放一下保存的hunanTV.flv視頻文件是可以播放的空免。
當(dāng)然,也可以拉其他協(xié)議的視頻流盆耽,下面是一些視頻流的地址蹋砚,可以換到上面試一下。
RTSP協(xié)議直播源
HTTP協(xié)議直播源
比如拉取CCTV3高清:
ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8 -c copy cctv3.m3u8
note:注意保存格式摄杂,拉取的是m3u8格式坝咐,所以存的也要是m3u8格式的。