這里通過(guò)軟件MediaInfo來(lái)查看視頻信息。其中黃色為幀數(shù),紅色為比特率

基本用法:
-
1除來(lái)上面我們通過(guò)軟件來(lái)查看視頻信息之外,我們還可以使用ffmpeg命令查看
ffmpeg -i vid.mp4

-
2 拆分視頻為多張圖片
ffmpeg -i vid.mp4 frame%03d.png //%d也可以。支持的圖片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI
03的%表示有三位,不夠三位前面補(bǔ)充0,運(yùn)行上面這行代碼,該視頻一共生成了329張圖片

我們可以手動(dòng)指定每秒生成的圖片數(shù)量
ffmpeg -i vid.mp4 frame%03d.png -r 20
這行命令表示每秒生成20張圖片。我們還可以把生成的這些圖片重新整合成視頻。
ffmpeg -i frame%3d.png out.mp4


但是這樣生成的視頻,是沒(méi)有聲音的。但是之前的橫屏播放,現(xiàn)在變成了豎屏播放。
-
3從視頻中提取音頻文件保存為mp3
ffmpeg -i vid.mp4 -f mp3 outaudio.mp3

但是生成的mp3時(shí)長(zhǎng)超過(guò)了視頻時(shí)長(zhǎng)。
ffmpeg -i vid.mp4 -f mp3 -ar 44100 -ac 2 -ab 192 outaudio2.mp3
指定采樣率44100,通道2立體聲,碼率192kbps
ffmpeg -i xiaguangcheng.mp4 -b:a 128k dest1.mp3 //mp3與原視頻時(shí)長(zhǎng)相等
ffmpeg -i xiaguangcheng.mp4 -f mp3 dest2.mp3 //mp3為原視頻時(shí)長(zhǎng)的兩倍
ffmpeg -i xiaguangcheng.mp4 -f mp3 -ar 44100 -ac 2 -ab 128 xia2.mp3 //mp3為原視頻時(shí)長(zhǎng)的兩倍
ffmpeg -i mothin.mkv -vn -ar 44100 -ac 2 -ab 128 -f mp3 xia3.mp3
-
4將聲音和無(wú)聲視頻 合并為有聲視頻
ffmpeg -i outaudio2.mp3 -i out.mp4 outav.mp4
經(jīng)過(guò)這樣的一翻轉(zhuǎn)化之后,視頻大小降低了不少

-
5視頻封裝格式轉(zhuǎn)換
如果只是封裝格式的簡(jiǎn)單轉(zhuǎn)換,那么直接輸出就可以
ffmpeg -i vid.mp4 vid.mkv
將mkv轉(zhuǎn)碼為mp4
ffmpeg -i vid.mkv -vcodec copy -acodec copy vid1.mp4
-vcodec copy 和 -acodec copy 表示所使用的視頻和音頻編碼格式,為原樣拷貝。
-
6對(duì)視頻切片操作
ffmpeg -i vid.mp4 -ss 00:00:03 -t 5 vid2.mp4
表示從vid.mp4的第三秒開(kāi)始切割,長(zhǎng)度為5秒,然后將切割出來(lái)的視頻生成vid2.mp4.
這個(gè)操作還可以用來(lái)提供切片文件索引給h5用來(lái)做hls直播源。
ffmpeg -i vid.mp4 -strict -2 -c:v libx264 -c:a aac -f hls test.m3u8
主要把視頻源切成若干個(gè).ts格式的視頻片段然后生成一個(gè).m3u8的切片文件索引提供給html5的video做hls直播源
-
7加減速視頻
ffmpeg -i vid.mp4 -vf "setpts=0.5*PTS" vid3.mp4
但是發(fā)現(xiàn)這樣的加速只是將視頻畫(huà)面加速了,但是視頻聲音并沒(méi)有加速,因此本來(lái)14秒的視頻,現(xiàn)在7秒就播放玩了,但是還有7秒?yún)s在播放原來(lái)最后7秒的聲音。
ffmpeg -i vid.mp4 -vf "setpts=2.0*PTS" vid4.mp4
這個(gè)是減速視頻
-
8截取指定視頻時(shí)間圖片
ffmpeg -i vid.mp4 -y -f image2 -t 0.001 -ss 10 -s 1920x1080 haha.png
-f 指定格式
-t 延長(zhǎng)時(shí)間
-ss 開(kāi)始時(shí)間單位為秒
-s 生成圖片規(guī)格

-
9 轉(zhuǎn)換為gif
ffmpeg -i vid.mp4 -vframes 5 -y -f gif out5.gif
這里是將視頻的前5幀轉(zhuǎn)換為gif

將視頻轉(zhuǎn)換為gif
ffmpeg -ss 00:00:00.000 -i vid.mp4 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 out6.gif
將輸入的文件從(-ss)設(shè)定的時(shí)間開(kāi)始以10幀頻率,輸出到320x240大小的 gif 中,時(shí)間長(zhǎng)度為-t 設(shè)定的參數(shù)。

也可以直接轉(zhuǎn),未壓縮
ffmpeg -i vid.mp4 vid.gif
-
10 將圖片和聲音合并為mpeg4編碼方式分辨率為720p的avi文件
ffmpeg -i frame%3d.png -i silian.mp3 -s hd720 -vcodec mpeg4 out7.avi
這里有個(gè)問(wèn)題,為什么我并沒(méi)有設(shè)定合成視頻的幀數(shù),這些圖片還是會(huì)合成之前分離出這些圖片的那個(gè)視頻的時(shí)間長(zhǎng)度?
-
11 設(shè)置輸出文件幀數(shù)
ffmpeg -i vid.mp4 -r 1 outv1.avi
將vid.mp4 以幀數(shù)為1輸出為outv1.avi。這樣我們?cè)谟^看outv1.avi的時(shí)候,就會(huì)發(fā)現(xiàn)每張圖會(huì)停頓一秒,直至播放結(jié)束。
ffmpeg -r 1 -i vid.mp4 -r 24 outav3.avi
vid.mp4中的每幀圖片都會(huì)在outav3.avi中播放一秒
-
12 設(shè)置輸出文件編碼率
ffmpeg -i vid.mp4 -b:v 64k -bufsize 64k outav6.mp4
設(shè)置輸出文件編碼率 64 kbit/s
-
13 添加水印
ffmpeg -i vid.mp4 -i icon.png -filter_complex overlay="(main_w/2)-(overlay_w/2):(main_h/2)-(overlay_h)/2" output222.mp4
在視頻的中間位置添加一個(gè)水印。

14 縮放視頻
ffmpeg -i test.mp4 -vf scale=-1:480 -acodec aac -vcodec h264 test1.mp4
其中vf參數(shù)用來(lái)指定視頻濾鏡,其中scale表示縮放,后面的數(shù)字表示縮放至-1:480px。寬度和高度只需要指定一個(gè)就可以了,這里指定了寬度為480,高度會(huì)根據(jù)原視頻的比例來(lái)計(jì)算。手機(jī)拍攝的視頻一般都是音頻為aac,視頻為h264編碼。另外音頻還有faac編碼。
15 錄制網(wǎng)絡(luò)視頻
ffmpeg -i https://kangaiweishi.com/test2.mp4 -vcodec copy xiaguangcheng.mp4
可以將視頻從“https://kangaiweishi.com/test2.mp4”這個(gè)網(wǎng)址里面copy下來(lái)。

16 分離視頻音頻
ffmpeg -i xiaguangcheng.mp4 -vcodec copy -an abc.mp4 //分離出來(lái)的abc.mp4是沒(méi)有聲音的
ffmpeg -i xiaguangcheng.mp4 -acodec copy -vn edf.aac //分離出來(lái)edf.aac的音頻文件,但是播放不了
ffmpeg -i abc.mp4 -i edf.aac -vcodec copy -acodec copy xia.mp4 //這樣播放的話,有畫(huà)面也有聲音
17 視頻解復(fù)用 沒(méi)懂什么意思
ffmpeg -i xiaguangcheng.mp4 -vcodec copy -an -f m4v xia.264
18 視頻轉(zhuǎn)碼
ffmpeg -i xiaguangcheng.mp4 -vcodec h264 -s 352*278 -an -f m4v xia1.264
轉(zhuǎn)碼為碼流原始文件,還是沒(méi)懂
ffmpeg -i xiaguangcheng.mp4 -vcodec h264 -bf 0 -g 25 -s 352*278 -an -f m4v xia2.264 //-bf B幀數(shù)目控制,-g 關(guān)鍵幀間隔控制,-s 分辨率控制
轉(zhuǎn)碼為封裝文件
ffmpeg -i xiaguangcheng.avi -vcodec mpeg4 -vtag xvid -qsame xia_xvid.avi //這行命令執(zhí)行不通過(guò)
19 ffmpeg 裁剪視頻尺寸
如果視頻為640x360的橫向視頻,我們要一個(gè)尺寸為360x360的正方形視頻,那么我們就可以將橫向視頻進(jìn)行裁剪。
ffmpeg -i xiaguangcheng.mp4 -strict -2 -vf crop=360:360:140:0 xiaxia.mp4


其中crop=width:height:x:y。因?yàn)橹徊眉魧挾?,所以y為0,不用動(dòng),x=(640-360)/2=140;
20 轉(zhuǎn)換視頻格式
ffmpeg -i xiaguangcheng.mp4 -c:v libx264 -crf 30 xia12.avi
-crf是控制轉(zhuǎn)碼后視頻的質(zhì)量,0-51,值越小視頻質(zhì)量越高文件越大。建議值在18-28之間。
附錄基本概念
比特率,就是每秒鐘輸出多少kb的參數(shù)。800Kbps表示沒(méi)秒視頻占用100KB空間大小。
幀數(shù):?jiǎn)挝籪ps,每秒鐘播放的圖片數(shù)。30fps流暢,50fps已經(jīng)行云流水,60fps已經(jīng)滿足絕大多數(shù)要求。在同一視頻同一碼率情況下,幀數(shù)越大,畫(huà)質(zhì)越不好。因?yàn)槊繌埉?huà)面會(huì)分擔(dān)每秒有限的文件體積,如果畫(huà)面越多,那么每張畫(huà)面所能表現(xiàn)的內(nèi)容就越有限。
分辨率和編碼率的關(guān)系:同一碼率,分辨率越高,圖像馬賽克越多。
采樣率:?jiǎn)挝缓掌滺z。音頻文件一般使用的采樣率為44100Hz,這是經(jīng)過(guò)反復(fù)試驗(yàn)之后的結(jié)果。
MPEG格式 它的英文全稱為Moving Picture Expert Group,即運(yùn)動(dòng)圖像專家組格式,家里??吹腣CD、SVCD、DVD就是這種格式。MPEG文件格式是運(yùn)動(dòng)圖像壓縮算法的國(guó)際標(biāo)準(zhǔn),它采用了有損壓縮方法從而減少運(yùn)動(dòng)圖像中的冗余信息。MPEG的壓縮方法說(shuō)的更加深入一點(diǎn)就是保留相鄰兩幅畫(huà)面絕大多數(shù)相同的部分,而把后續(xù)圖像中和前面圖像有冗余的部分去除,從而達(dá)到壓縮的目的。目前MPEG格式有三個(gè)壓縮標(biāo)準(zhǔn),分別是MPEG-1、MPEG-2、和MPEG-4,另外,MPEG-7與MPEG-21仍處在研發(fā)階段。 MPEG-1:制定于1992年,它是針對(duì)1.5Mbps以下數(shù)據(jù)傳輸率的數(shù)字存儲(chǔ)媒體運(yùn)動(dòng)圖像及其伴音編碼而設(shè)計(jì)的國(guó)際標(biāo)準(zhǔn)。也就是我們通常所見(jiàn)到的VCD制作格式。這種視頻格式的文件擴(kuò)展名包括.mpg、.mlv、.mpe、.mpeg及VCD光盤(pán)中的.dat文件等。 MPEG-2:制定于1994年,設(shè)計(jì)目標(biāo)為高級(jí)工業(yè)標(biāo)準(zhǔn)的圖像質(zhì)量以及更高的傳輸率。這種格式主要應(yīng)用在DVD/SVCD的制作(壓縮)方面,同時(shí)在一些HDTV(高清晰電視廣播)和一些高要求視頻編輯、處理上面也有相當(dāng)?shù)膽?yīng)用。這種視頻格式的文件擴(kuò)展名包括.mpg、.mpe、.mpeg、.m2v及DVD光盤(pán)上的.vob文件等。 MPEG-4:制定于1998年,MPEG-4是為了播放流式媒體的高質(zhì)量視頻而專門(mén)設(shè)計(jì)的,它可利用很窄的帶度,通過(guò)幀重建技術(shù),壓縮和傳輸數(shù)據(jù),以求使用最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量。MPEG-4最有吸引力的地方在于它能夠保存接近于DVD畫(huà)質(zhì)的小體積視頻文件。這種視頻格式的文件擴(kuò)展名包括.asf、.mov和DivX 、AVI等
RTSP協(xié)議支持實(shí)時(shí)播放,而Http協(xié)議則需要緩沖一定時(shí)間才能夠播放。
參考:FFmpeg開(kāi)發(fā)(一)常用處理視頻命令