首先需要下載ffmpeg.exe枣耀,下載后在D盤建一個(gè)文件夾障涯,名字叫:ffmpeg纵朋,把這個(gè)程序移到文件夾中,同時(shí)將要壓縮的視頻也放在這個(gè)文件夾中祈秕,比如視頻名稱改為:123.mp4渺贤,然后按照以下步驟操作。
1请毛、在開始-->搜索中輸入:cmd 按 enter? 確認(rèn)
2志鞍、輸入D:?? 按enter
3、輸入 cd ffmpeg?? 按enter
4获印、輸入壓縮命令:
?1)ffmpeg -i 123_ffmpeg.mp4? (壓縮的文件更大更清晰述雾,一般情況下不用)
?2)ffmpeg.exe -i 123.MP4 -b:v 700k 1231_ffmpeg.mp4(壓縮的更小,相對(duì)模糊一些)
輸入后按下Enter鍵兼丰。
程序會(huì)自動(dòng)處理,界面如下:
上圖中圈住的是視頻的時(shí)長(zhǎng)唆缴,壓縮完畢后鳍征,在D盤會(huì)多一個(gè)視頻文件:1231_ffmpeg.mp4的文件,就是壓縮的文件面徽。
其他設(shè)置命令說(shuō)明:
1. 視頻轉(zhuǎn)換
比如一個(gè)avi文件艳丛,想轉(zhuǎn)為mp4匣掸,或者一個(gè)mp4想轉(zhuǎn)為ts。
ffmpeg -i input.avi output.mp4
ffmpeg -i input.mp4 output.ts
2. 提取音頻
ffmpeg -i test.mp4 -acodec copy -vn output.aac
上面的命令氮双,默認(rèn)mp4的audio codec是aac,如果不是碰酝,可以都轉(zhuǎn)為最常見的aac。
ffmpeg -i test.mp4 -acodec aac -vn output.aac
3. 提取視頻
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
4. 視頻剪切
下面的命令戴差,可以從時(shí)間為00:00:15開始送爸,截取5秒鐘的視頻。
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss表示開始切割的時(shí)間暖释,-t表示要切多少袭厂。上面就是從15秒開始,切5秒鐘出來(lái)球匕。
5. 碼率控制
碼率控制對(duì)于在線視頻比較重要纹磺。因?yàn)樵诰€視頻需要考慮其能提供的帶寬。
那么亮曹,什么是碼率橄杨?很簡(jiǎn)單:
bitrate = file size / duration
比如一個(gè)文件20.8M,時(shí)長(zhǎng)1分鐘照卦,那么式矫,碼率就是:
biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps
一般音頻的碼率只有固定幾種,比如是128Kbps窄瘟,
那么衷佃,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。
那么ffmpeg如何控制碼率蹄葱。
ffmpg控制碼率有3種選擇氏义,-minrate -b:v -maxrate
-b:v主要是控制平均碼率。
比如一個(gè)視頻源的碼率太高了图云,有10Mbps惯悠,文件太大,想把文件弄小一點(diǎn)竣况,但是又不破壞分辨率克婶。
ffmpeg -i input.mp4 -b:v 2000k output.mp4
上面把碼率從原碼率轉(zhuǎn)成2Mbps碼率,這樣其實(shí)也間接讓文件變小了丹泉。目測(cè)接近一半情萤。
不過(guò),ffmpeg官方wiki比較建議摹恨,設(shè)置b:v時(shí)筋岛,同時(shí)加上 -bufsize
-bufsize 用于設(shè)置碼率控制緩沖器的大小,設(shè)置的好處是晒哄,讓整體的碼率更趨近于希望的值睁宰,減少波動(dòng)肪获。(簡(jiǎn)單來(lái)說(shuō),比如1 2的平均值是1.5柒傻, 1.49 1.51 也是1.5, 當(dāng)然是第二種比較好)
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
-minrate -maxrate就簡(jiǎn)單了孝赫,在線視頻有時(shí)候,希望碼率波動(dòng)红符,不要超過(guò)一個(gè)閾值青柄,可以設(shè)置maxrate。
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
6. 視頻編碼格式轉(zhuǎn)換
比如一個(gè)視頻的編碼是MPEG4违孝,想用H264編碼刹前,咋辦?
ffmpeg -i input.mp4 -vcodec h264 output.mp4
相反也一樣
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4
當(dāng)然了雌桑,如果ffmpeg當(dāng)時(shí)編譯時(shí)喇喉,添加了外部的x265或者X264,那也可以用外部的編碼器來(lái)編碼校坑。(不知道什么是X265拣技,可以Google一下,簡(jiǎn)單的說(shuō)耍目,就是她不包含在ffmpeg的源碼里膏斤,是獨(dú)立的一個(gè)開源代碼,用于編碼HEVC邪驮,ffmpeg編碼時(shí)可以調(diào)用它莫辨。當(dāng)然了,ffmpeg自己也有編碼器)
ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4
7. 只提取視頻ES數(shù)據(jù)
ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264
8. 過(guò)濾器的使用
8.1 將輸入的1920x1080縮小到960x540輸出:
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
//ps: 如果540不寫毅访,寫成-1沮榜,即scale=960:-1, 那也是可以的,ffmpeg會(huì)通知縮放濾鏡在輸出時(shí)保持原始的寬高比喻粹。
8.2 為視頻添加logo
比如蟆融,我有這么一個(gè)圖片
想要貼到一個(gè)視頻上,那可以用如下命令:
./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
結(jié)果如下所示:
要貼到其他地方守呜?看下面:
右上角:
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
左下角:
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
右下角:
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
8.3 去掉視頻的logo
語(yǔ)法:-vf delogo=x:y:w:h[:t[:show]]
x:y 離左上角的坐標(biāo)
w:h logo的寬和高
t: 矩形邊緣的厚度默認(rèn)值4
show:若設(shè)置為1有一個(gè)綠色的矩形型酥,默認(rèn)值0。
ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4
結(jié)果如下所示:
9. 截取視頻圖像
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-r 表示每一秒幾幀
-q:v表示存儲(chǔ)jpeg的圖像質(zhì)量查乒,一般2是高質(zhì)量弥喉。
如此,ffmpeg會(huì)把input.mp4玛迄,每隔一秒档桃,存一張圖片下來(lái)。假設(shè)有60s憔晒,那會(huì)有60張藻肄。
可以設(shè)置開始的時(shí)間,和你想要截取的時(shí)間拒担。
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-ss 表示開始時(shí)間
-t 表示共要多少時(shí)間嘹屯。
如此,ffmpeg會(huì)從input.mp4的第20s時(shí)間開始从撼,往下10s州弟,即20~30s這10秒鐘之間,每隔1s就抓一幀低零,總共會(huì)抓10幀婆翔。
10. 序列幀與視頻的相互轉(zhuǎn)換
把darkdoor.[001-100].jpg序列幀和001.mp3音頻文件利用mpeg4編碼方式合成視頻文件darkdoor.avi:
$ ffmpeg -i 001.mp3 -i darkdoor.%3d.jpg -s 1024x768 -author fy -vcodec mpeg4 darkdoor.avi
還可以把視頻文件導(dǎo)出成jpg序列幀:
$ffmpeg -i bc-cinematic-en.avi example.%d.jpg