FFmpeg筆記(二)-- 命令行工具

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末黍衙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荠诬,更是在濱河造成了極大的恐慌琅翻,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柑贞,死亡現(xiàn)場(chǎng)離奇詭異方椎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)钧嘶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)棠众,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人有决,你說(shuō)我怎么就攤上這事闸拿。” “怎么了书幕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵新荤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我台汇,道長(zhǎng)苛骨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任苟呐,我火速辦了婚禮痒芝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牵素。我一直安慰自己严衬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布笆呆。 她就那樣靜靜地躺著请琳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腰奋。 梳的紋絲不亂的頭發(fā)上单起,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音劣坊,去河邊找鬼嘀倒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛局冰,可吹牛的內(nèi)容都是我干的测蘑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼康二,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碳胳!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起沫勿,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挨约,失蹤者是張志新(化名)和其女友劉穎味混,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體诫惭,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翁锡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夕土。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馆衔。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖怨绣,靈堂內(nèi)的尸體忽然破棺而出角溃,到底是詐尸還是另有隱情,我是刑警寧澤篮撑,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布减细,位于F島的核電站,受9級(jí)特大地震影響咽扇,放射性物質(zhì)發(fā)生泄漏邪财。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一质欲、第九天 我趴在偏房一處隱蔽的房頂上張望树埠。 院中可真熱鬧,春花似錦嘶伟、人聲如沸怎憋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绊袋。三九已至,卻和暖如春铸鹰,著一層夾襖步出監(jiān)牢的瞬間癌别,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工蹋笼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留展姐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓剖毯,卻偏偏與公主長(zhǎng)得像圾笨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逊谋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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