這里通過軟件MediaInfo來查看視頻信息团南。其中黃色為幀數(shù)旭寿,紅色為比特率
基本用法:
-
1除來上面我們通過軟件來查看視頻信息之外,我們還可以使用ffmpeg命令查看
ffmpeg -i vid.mp4
-
2 拆分視頻為多張圖片
ffmpeg -i vid.mp4 frame%03d.png //%d也可以。支持的圖片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI
03的%表示有三位贩猎,不夠三位前面補充0,運行上面這行代碼萍膛,該視頻一共生成了329張圖片
我們可以手動指定每秒生成的圖片數(shù)量
ffmpeg -i vid.mp4 frame%03d.png -r 20
這行命令表示每秒生成20張圖片吭服。我們還可以把生成的這些圖片重新整合成視頻。
ffmpeg -i frame%3d.png out.mp4
但是這樣生成的視頻蝗罗,是沒有聲音的艇棕。但是之前的橫屏播放,現(xiàn)在變成了豎屏播放串塑。
-
3從視頻中提取音頻文件保存為mp3
ffmpeg -i vid.mp4 -f mp3 outaudio.mp3
但是生成的mp3時長超過了視頻時長沼琉。
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與原視頻時長相等
ffmpeg -i xiaguangcheng.mp4 -f mp3 dest2.mp3 //mp3為原視頻時長的兩倍
ffmpeg -i xiaguangcheng.mp4 -f mp3 -ar 44100 -ac 2 -ab 128 xia2.mp3 //mp3為原視頻時長的兩倍
ffmpeg -i mothin.mkv -vn -ar 44100 -ac 2 -ab 128 -f mp3 xia3.mp3
-
4將聲音和無聲視頻 合并為有聲視頻
ffmpeg -i outaudio2.mp3 -i out.mp4 outav.mp4
經(jīng)過這樣的一翻轉(zhuǎn)化之后打瘪,視頻大小降低了不少
-
5視頻封裝格式轉(zhuǎ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對視頻切片操作
ffmpeg -i vid.mp4 -ss 00:00:03 -t 5 vid2.mp4
表示從vid.mp4的第三秒開始切割,長度為5秒屋匕,然后將切割出來的視頻生成vid2.mp4.
這個操作還可以用來提供切片文件索引給h5用來做hls直播源葛碧。
ffmpeg -i vid.mp4 -strict -2 -c:v libx264 -c:a aac -f hls test.m3u8
主要把視頻源切成若干個.ts格式的視頻片段然后生成一個.m3u8的切片文件索引提供給html5的video做hls直播源
-
7加減速視頻
ffmpeg -i vid.mp4 -vf "setpts=0.5*PTS" vid3.mp4
但是發(fā)現(xiàn)這樣的加速只是將視頻畫面加速了借杰,但是視頻聲音并沒有加速过吻,因此本來14秒的視頻,現(xiàn)在7秒就播放玩了蔗衡,但是還有7秒?yún)s在播放原來最后7秒的聲音纤虽。
ffmpeg -i vid.mp4 -vf "setpts=2.0*PTS" vid4.mp4
這個是減速視頻
-
8截取指定視頻時間圖片
ffmpeg -i vid.mp4 -y -f image2 -t 0.001 -ss 10 -s 1920x1080 haha.png
-f 指定格式
-t 延長時間
-ss 開始時間單位為秒
-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è)定的時間開始以10幀頻率,輸出到320x240大小的 gif 中绞惦,時間長度為-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
這里有個問題济蝉,為什么我并沒有設(shè)定合成視頻的幀數(shù)杰刽,這些圖片還是會合成之前分離出這些圖片的那個視頻的時間長度?
-
11 設(shè)置輸出文件幀數(shù)
ffmpeg -i vid.mp4 -r 1 outv1.avi
將vid.mp4 以幀數(shù)為1輸出為outv1.avi王滤。這樣我們在觀看outv1.avi的時候贺嫂,就會發(fā)現(xiàn)每張圖會停頓一秒,直至播放結(jié)束雁乡。
ffmpeg -r 1 -i vid.mp4 -r 24 outav3.avi
vid.mp4中的每幀圖片都會在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
在視頻的中間位置添加一個水印第喳。
14 縮放視頻
ffmpeg -i test.mp4 -vf scale=-1:480 -acodec aac -vcodec h264 test1.mp4
其中vf參數(shù)用來指定視頻濾鏡,其中scale表示縮放踱稍,后面的數(shù)字表示縮放至-1:480px曲饱。寬度和高度只需要指定一個就可以了悠抹,這里指定了寬度為480,高度會根據(jù)原視頻的比例來計算扩淀。手機拍攝的視頻一般都是音頻為aac楔敌,視頻為h264編碼。另外音頻還有faac編碼驻谆。
15 錄制網(wǎng)絡(luò)視頻
ffmpeg -i https://kangaiweishi.com/test2.mp4 -vcodec copy xiaguangcheng.mp4
可以將視頻從“https://kangaiweishi.com/test2.mp4”這個網(wǎng)址里面copy下來梁丘。
16 分離視頻音頻
ffmpeg -i xiaguangcheng.mp4 -vcodec copy -an abc.mp4 //分離出來的abc.mp4是沒有聲音的
ffmpeg -i xiaguangcheng.mp4 -acodec copy -vn edf.aac //分離出來edf.aac的音頻文件,但是播放不了
ffmpeg -i abc.mp4 -i edf.aac -vcodec copy -acodec copy xia.mp4 //這樣播放的話,有畫面也有聲音
17 視頻解復(fù)用 沒懂什么意思
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)碼為碼流原始文件旺韭,還是沒懂
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í)行不通過
19 ffmpeg 裁剪視頻尺寸
如果視頻為640x360的橫向視頻区端,我們要一個尺寸為360x360的正方形視頻值漫,那么我們就可以將橫向視頻進行裁剪。
ffmpeg -i xiaguangcheng.mp4 -strict -2 -vf crop=360:360:140:0 xiaxia.mp4
其中crop=width:height:x:y织盼。因為只裁剪寬度杨何,所以y為0,不用動沥邻,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表示沒秒視頻占用100KB空間大小。
幀數(shù):單位fps延届,每秒鐘播放的圖片數(shù)剪勿。30fps流暢,50fps已經(jīng)行云流水方庭,60fps已經(jīng)滿足絕大多數(shù)要求厕吉。在同一視頻同一碼率情況下,幀數(shù)越大械念,畫質(zhì)越不好头朱。因為每張畫面會分擔(dān)每秒有限的文件體積,如果畫面越多订讼,那么每張畫面所能表現(xiàn)的內(nèi)容就越有限髓窜。
分辨率和編碼率的關(guān)系:同一碼率,分辨率越高,圖像馬賽克越多寄纵。
采樣率:單位赫茲Hz鳖敷。音頻文件一般使用的采樣率為44100Hz,這是經(jīng)過反復(fù)試驗之后的結(jié)果程拭。
MPEG格式 它的英文全稱為Moving Picture Expert Group定踱,即運動圖像專家組格式,家里呈研看的VCD崖媚、SVCD、DVD就是這種格式恤浪。MPEG文件格式是運動圖像壓縮算法的國際標準畅哑,它采用了有損壓縮方法從而減少運動圖像中的冗余信息。MPEG的壓縮方法說的更加深入一點就是保留相鄰兩幅畫面絕大多數(shù)相同的部分水由,而把后續(xù)圖像中和前面圖像有冗余的部分去除荠呐,從而達到壓縮的目的。目前MPEG格式有三個壓縮標準砂客,分別是MPEG-1泥张、MPEG-2、和MPEG-4鞠值,另外媚创,MPEG-7與MPEG-21仍處在研發(fā)階段。 MPEG-1:制定于1992年彤恶,它是針對1.5Mbps以下數(shù)據(jù)傳輸率的數(shù)字存儲媒體運動圖像及其伴音編碼而設(shè)計的國際標準钞钙。也就是我們通常所見到的VCD制作格式。這種視頻格式的文件擴展名包括.mpg粤剧、.mlv歇竟、.mpe挥唠、.mpeg及VCD光盤中的.dat文件等抵恋。 MPEG-2:制定于1994年,設(shè)計目標為高級工業(yè)標準的圖像質(zhì)量以及更高的傳輸率宝磨。這種格式主要應(yīng)用在DVD/SVCD的制作(壓縮)方面弧关,同時在一些HDTV(高清晰電視廣播)和一些高要求視頻編輯、處理上面也有相當(dāng)?shù)膽?yīng)用唤锉。這種視頻格式的文件擴展名包括.mpg世囊、.mpe、.mpeg窿祥、.m2v及DVD光盤上的.vob文件等株憾。 MPEG-4:制定于1998年,MPEG-4是為了播放流式媒體的高質(zhì)量視頻而專門設(shè)計的,它可利用很窄的帶度嗤瞎,通過幀重建技術(shù)墙歪,壓縮和傳輸數(shù)據(jù),以求使用最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量贝奇。MPEG-4最有吸引力的地方在于它能夠保存接近于DVD畫質(zhì)的小體積視頻文件虹菲。這種視頻格式的文件擴展名包括.asf、.mov和DivX 掉瞳、AVI等
RTSP協(xié)議支持實時播放毕源,而Http協(xié)議則需要緩沖一定時間才能夠播放。
參考:FFmpeg開發(fā)(一)常用處理視頻命令