ffprobe
主要用于查看文件的格式和詳細(xì)信息。
1.查看音頻文件:
ffprobe ~/Desktop/32037.mp3
可得到結(jié)果:
#時(shí)長(zhǎng)鹉胖、開(kāi)始播放時(shí)間握玛、波特率
Duration:00:05:14.83,start:0.000000甫菠,bitrate:64kb/s
#第一個(gè)流是音頻流挠铲,編碼格式是MP3格式,采樣率是24kHz寂诱,聲道是立體聲拂苹,
#采樣表示格式是SInt16(short)的 planner(平鋪格式),這路流的比特率是64Kbit/s痰洒。
Stream#0:0 Audio:mp3瓢棒,24000Hz浴韭,stereo,s16p脯宿,64kb/s
2.查看視頻文件:
可以顯示format_name念颈、時(shí)間長(zhǎng)度duration、文件 大小size连霉、比特率bit_rate榴芳、流的數(shù)目nb_streams等:
ffprobe -show_format 32037.mp4
以JSON格式的形式輸出具體每一個(gè)流最詳細(xì)的信息,視頻中會(huì)有視頻的寬高信息跺撼、是否有b幀翠语、視頻幀的總數(shù)目、視頻的編碼格式财边、顯示比例肌括、比特率等信息,音頻中會(huì)有音頻的編碼格式酣难、 表示格式谍夭、聲道數(shù)、時(shí)間長(zhǎng)度憨募、比特率紧索、幀的總數(shù)目等信息:
ffprobe -print_format json -show_streams 32037.mp4
3.顯示幀信息:
ffprobe -show_frames sample.mp4
4.查看包信息:
ffprobe -show_packets sample.mp4
ffplay
ffplay是以FFmpeg框架為基礎(chǔ),外加渲染音視頻的庫(kù)libSDL來(lái)構(gòu)建的媒體文件播放器菜谣。
1.播放音頻:
ffplay 32037.mp3
2.播放視頻:
一些特殊格式需要指定參數(shù)播放珠漂,如yuv的播放方式見(jiàn)【7.】。
ffplay 32037.mp4
3.視頻結(jié)束之后會(huì)從頭再次播放尾膊,共循環(huán)播放10 次:
ffplay 32037.mp4 -loop 10
4.播放音頻中第一路流媳危。
一個(gè)視頻中可能有多路音頻、視頻流冈敛。如一部電影有英文和中文的不同音頻流選擇待笑。播放視頻中的第一路音頻流,如果參數(shù)ast后面跟的是 2抓谴,那么就播放第二路音頻流暮蹂,如果沒(méi)有第二路音頻流的話,就會(huì)靜音:
ffplay 大話西游.mkv -ast 1
5.播放視頻中的第一路視頻流癌压。
如果參數(shù)vst后面跟的是 2仰泻,那么就播放第二路視頻流,但是如果沒(méi)有第二路視頻流滩届,就會(huì)是黑屏即什么都不顯示:
ffplay 大話西游.mkv -vst 1
6.播放pcm文件:
格式(-f)集侯、聲道數(shù)(-channels)、采樣率(-ar)必須設(shè)置正確,如果其中任何一項(xiàng)參數(shù)設(shè)置不正確浅悉,都不會(huì)得到正常的播放結(jié)果趟据。
ffplay song.pcm -f s16le -channels 2 -ar 44100
7.播放一幀視頻幀、RGB:
格式(-f rawvideo代表原始格式)术健、表示格式(-pixel_format yuv420p)汹碱、寬高(-s 480*480),寬高要設(shè)置正常不然不能正常播放荞估,寬高可以使用ffprobe工具查看咳促。
ffplay -f rawvideo -pixel_format yuv420p -s 480*480 texture.yuv
或
ffplay -f rawvideo -pixel_format rgb24 -s 480*480 texture.rgb
8.音視頻對(duì)齊方式:
播放器接收到的視頻幀或者音頻幀,內(nèi)部都會(huì)有時(shí)間戳(PTS時(shí)鐘)來(lái)標(biāo)識(shí)它實(shí)際應(yīng)該在什么時(shí)刻進(jìn)行展示勘伺。實(shí)際的對(duì)齊策略如下:
比較視頻當(dāng)前的播放時(shí)間和音頻當(dāng)前的播放時(shí)間跪腹,如果視頻播放過(guò)快,則通過(guò)加大延遲或者重復(fù)播放來(lái)降低視頻播放速度;如果視頻播放慢了飞醉,則通過(guò)減小延遲或者丟幀來(lái)追趕音頻播放的時(shí)間點(diǎn)冲茸。關(guān)鍵就在于音視頻時(shí)間的比較以及延遲的計(jì)算,當(dāng)然在比較的過(guò)程中會(huì)設(shè)置一個(gè)閾值(Threshold)缅帘,若超過(guò)預(yù)設(shè)的閾值就應(yīng)該做調(diào)整(丟幀渲染 或者重復(fù)渲染)轴术,這就是整個(gè)對(duì)齊策略。
#顯式地指定了ffplay使用音頻為基準(zhǔn)進(jìn)行音視頻同步钦无,用來(lái)播放文件32037.mp4逗栽,當(dāng)然這也是ffplay的默認(rèn)設(shè)置
ffplay 32037.mp4 -sync audio
#顯式地指定了使用以視頻為基準(zhǔn)進(jìn)行音視頻同步的方式播 放視頻文件。
ffplay 32037.mp4 -sync video
#顯式地指定了使用外部時(shí)鐘作為基準(zhǔn)進(jìn)行音視頻同步的方 式失暂,用來(lái)播放視頻文件彼宠。
ffplay 32037.mp4 -sync ext
ffmpeg
媒體文件轉(zhuǎn)換工具。
1.參數(shù):
1)通用參數(shù)
·-f fmt:指定格式(音頻或者視頻格式)弟塞。
·-i filename:指定輸入文件名凭峡,在Linux下當(dāng)然也能指定:0.0(屏 幕錄制)或攝像頭。
·-y:覆蓋已有文件宣肚。
·-t duration:指定時(shí)長(zhǎng)想罕。
·-fs limit_size:設(shè)置文件大小的上限。
·-ss time_off:從指定的時(shí)間(單位為秒)開(kāi)始霉涨,也支持[-]hh: mm:ss[.xxx]的格式。
·-re:代表按照幀率發(fā)送惭适,尤其在作為推流工具的時(shí)候一定要加入 該參數(shù)笙瑟,否則ffmpeg會(huì)按照最高速率向流媒體服務(wù)器不停地發(fā)送數(shù)據(jù)。
·-map:指定輸出文件的流映射關(guān)系癞志。例如:“-map 1:0-map 1: 1”要求將第二個(gè)輸入文件的第一個(gè)流和第二個(gè)流寫(xiě)入輸出文件往枷。如果沒(méi) 有-map選項(xiàng),則ffmpeg采用默認(rèn)的映射關(guān)系。
2)視頻參數(shù)
·-b:指定比特率(bit/s)错洁,ffmpeg是自動(dòng)使用VBR的秉宿,若指定了該參數(shù)則使用平均比特率。
·-bitexact:使用標(biāo)準(zhǔn)比特率屯碴。
·-vb:指定視頻比特率(bits/s)描睦。
·-r rate:幀速率(fps)。
·-s size:指定分辨率(320×240)导而。
·-aspect aspect:設(shè)置視頻長(zhǎng)寬比(4:3忱叭,16:9或1.3333, 1.7777)今艺。
·-croptop size:設(shè)置頂部切除尺寸(in pixels)韵丑。
·-cropbottom size:設(shè)置底部切除尺寸(in pixels)。
·-cropleft size:設(shè)置左切除尺寸(in pixels)虚缎。
·-cropright size:設(shè)置右切除尺寸(in pixels)撵彻。
·-padtop size:設(shè)置頂部補(bǔ)齊尺寸(in pixels)。
·-padbottom size:底補(bǔ)齊(in pixels)实牡。
·-padleft size:左補(bǔ)齊(in pixels)陌僵。
·-padright size:右補(bǔ)齊(in pixels)。
·-padcolor color:補(bǔ)齊帶顏色(000000-FFFFFF)铲掐。
·-vn:取消視頻的輸出拾弃。
·-vcodec codec:強(qiáng)制使用codec編解碼方式('copy'代表不進(jìn)行重新 編碼)。
3)音頻參數(shù)
·-ab:設(shè)置比特率(單位為bit/s摆霉,老版的單位可能是Kbit/s)豪椿,對(duì)于 MP3格式,若要聽(tīng)到較高品質(zhì)的聲音則建議設(shè)置為160Kbit/s(單聲道則 設(shè)置為80Kbit/s)以上携栋。
·-aq quality:設(shè)置音頻質(zhì)量(指定編碼)搭盾。
·-ar rate:設(shè)置音頻采樣率(單位為Hz)。
·-ac channels:設(shè)置聲道數(shù)婉支,1就是單聲道鸯隅,2就是立體聲。 ·-an:取消音頻軌向挖。
·-acodec codec:指定音頻編碼('copy'代表不做音頻轉(zhuǎn)碼蝌以,直接復(fù) 制)。
·-vol volume:設(shè)置錄制音量大小(默認(rèn)為256)<百分比>何之。
2.實(shí)例
1)列出ffmpeg支持的所有格式:
ffmpeg -formats
2)剪切一段媒體文件跟畅,可以是音頻或者視頻文件:
#將文件input.mp4從第50s開(kāi)始剪切20s的時(shí)間,輸出到文件 output.mp4中溶推,
#其中-ss指定偏移時(shí)間(time Offset)徊件,-t指定的時(shí)長(zhǎng) (duration)奸攻。
ffmpeg -i input.mp4 -ss 00:00:50.0 -codec copy -t 20 output.mp4
3)將視頻文件切割為多個(gè)文件:
ffmpeg -i input.mp4 -t 00:00:50 -c copy small-1.mp4 -ss 00:00:50 -codec copy small-2.mp4
4)提取一個(gè)視頻文件中的音頻文件:
ffmpeg -i input.mp4 -vn -acodec copy output.m4a
5)使一個(gè)視頻中的音頻靜音,即只保留視頻:
ffmpeg -i input.mp4 -an -vcodec copy output.mp4
6)從MP4文件中抽取視頻流導(dǎo)出為裸H264數(shù)據(jù):
ffmpeg -i output.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb output.h264
7)使用AAC音頻數(shù)據(jù)和H264的視頻生成MP4文件:
ffmpeg -i test.aac -i test.h264 -acodec copy -bsf:a aac_adtstoasc -vcodec copy -f
mp4 output.mp4
8)對(duì)音頻文件的編碼格式做轉(zhuǎn)換:
ffmpeg -i input.wav -acodec libfdk_aac output.aac
9)從WAV音頻文件中導(dǎo)出PCM裸數(shù)據(jù):
ffmpeg -i input.wav -acodec pcm_s16le -f s16le output.pcm
10)重新編碼視頻文件虱痕,復(fù)制音頻流睹耐,同時(shí)封裝到MP4格式的文件 中:
ffmpeg -i input.flv -vcodec libx264 -acodec copy output.mp4
11)將一個(gè)MP4格式的視頻轉(zhuǎn)換成為gif格式的動(dòng)圖:
#按照分辨比例不動(dòng)寬度改為100(使用VideoFilter的 scaleFilter),幀率改為10(-r)部翘,只處理前5秒鐘(-t)的視頻硝训,生成 gif。
ffmpeg -i input.mp4 -vf scale=100:-1 -t 5 -r 10 image.gif
12)將一個(gè)視頻的畫(huà)面部分生成圖片略就,比如要分析一個(gè)視頻里面的每一幀都是什么內(nèi)容的時(shí)候捎迫,可能就需要用到這個(gè)命令了:
#每4秒鐘截取一幀視頻畫(huà)面生成一張圖片,生成的圖片從 frames_0001.png開(kāi)始一直遞增下去表牢。
ffmpeg -i output.mp4 -r 0.25 frames_%04d.png
13)使用一組圖片可以組成一個(gè)gif窄绒,如果你連拍了一組照片,就可 以用下面這行命令生成一個(gè)gif:
ffmpeg -i frames_%04d.png -r 5 output.gif
14)使用音量效果器崔兴,可以改變一個(gè)音頻媒體文件中的音量:
#音量減小一半
ffmpeg -i input.wav -af ‘volume=0.5’ output.wav
15)淡入效果器的使用:
//將input.wav文件中的前5s做一個(gè)淡入效果,輸出到output.wav中
ffmpeg -i input.wav -filter_complex afade=t=in:ss=0:d=5 output.wav
16)淡出效果器的使用:
ffmpeg -i input.wav -filter_complex afade=t=out:st=200:d=5 output.wav
17)將兩路聲音進(jìn)行合并彰导,比如要給一段聲音加上背景音樂(lè):
ffmpeg -i vocal.wav -i accompany.wav -filter_complex
amix=inputs=2:duration=shortest output.wav
18)對(duì)聲音進(jìn)行變速但不變調(diào)效果器的使用:
#將vocal.wav按照0.5倍的速度進(jìn)行處理生成output.wav,
#時(shí)間長(zhǎng)度將會(huì)變?yōu)檩斎氲?倍敲茄。但是音高是不變的位谋,這就是大家常說(shuō)的 變速不變調(diào)。
ffmpeg -i vocal.wav -filter_complex atempo=0.5 output.wav
19)為視頻增加水印效果:
#main_w代表主視頻寬度堰燎, overlay_w代表水印寬度掏父,main_h代表主視頻高度,overlay_h代表水印
ffmpeg -i input.mp4 -i changba_icon.png -filter_complex
'[0:v][1:v]overlay=main_w-overlay_w-10:10:1[out]' -map '[out]' output.mp4
20)視頻提亮效果器的使用:
#參數(shù)是brightness秆剪,取值范圍是從-1.0到1.0赊淑,默認(rèn)值是0。
ffmpeg -i input.flv -c:v libx264 -b:v 800k -c:a libfdk_aac -vf eq=brightness=0.25 -f mp4 output.mp4
21)為視頻增加對(duì)比度效果:
#參數(shù)是contrast仅讽,取值范圍是從-2.0到2.0陶缺,默認(rèn)值是1.0。
ffmpeg -i input.flv -c:v libx264 -b:v 800k -c:a libfdk_aac -vf eq=contrast=1.5 -f mp4 output.mp4
22)視頻旋轉(zhuǎn)效果器的使用:
ffmpeg -i input.mp4 -vf "transpose=1" -b:v 600k output.mp4
23)視頻裁剪效果器的使用:
ffmpeg -i input.mp4 -an -vf "crop=240:480:120:0" -vcodec libx264 -b:v 600k output.mp4
24)將一張RGBA格式表示的數(shù)據(jù)轉(zhuǎn)換為JPEG格式的圖片:
ffmpeg -f rawvideo -pix_fmt rgba -s 480*480 -i texture.rgb -f image2 -vcodec mjpeg
output.jpg
25)將一個(gè)YUV格式表示的數(shù)據(jù)轉(zhuǎn)換為JPEG格式的圖片:
ffmpeg -f rawvideo -pix_fmt yuv420p -s 480*480 -i texture.yuv -f image2 -vcodec mjpeg output.jpg
26)將一段視頻推送到流媒體服務(wù)器上:
#rtmp://xxx代表流媒體服務(wù)器的地址洁灵,加上-re參數(shù)代 表將實(shí)際媒體文件的播放速度作為推流速度進(jìn)行推送饱岸。
ffmpeg -re -i input.mp4 -acodec copy -vcodec copy -f flv rtmp://xxx
27)將流媒體服務(wù)器上的流dump到本地:
ffmpeg -i http://xxx/xxx.flv -acodec copy -vcodec copy -f flv output.flv
28)將兩個(gè)音頻文件以兩路流的形式封裝到一個(gè)文件中,比如在K 歌的應(yīng)用場(chǎng)景中徽千,原伴唱實(shí)時(shí)切換的場(chǎng)景下苫费,可以使用一個(gè)文件包含兩 路流,一路是伴奏流双抽,另外一路是原唱流:
ffmpeg -i 131.mp3 -i 134.mp3 -map 0:a -c:a:0 libfdk_aac -b:a:0 96k -map 1:a -c:a:1 libfdk_aac -b:a:1 64k -vn -f mp4 output.m4a