【FFmpeg 分P教學(xué)】轉(zhuǎn)碼、壓制、錄屏、裁切、合并、提取 … 統(tǒng)統(tǒng)不是問題。

1.播放視頻或音頻
- 播放:
ffplay test.mp4
或者ffplay test.mp3
- 退出:q或者Escc
- 清空命令行:
cls
- 前進后退:
上下左右
- 跳轉(zhuǎn):
鼠標(biāo)右鍵
- 全屏:
f
- 暫停:
t或者空格
- 切換顯示模式:
w
2.查看屬性
ffprobe test.mp4
3.轉(zhuǎn)換格式
ffmpeg - i input.mov output.mp4
- 常見格式
?視頻封裝格式 視頻文件格式 ?AVI(Audio video Interleave) AVI ?WMV(Windows Media Video) WMV ?MPEG(Moving Picture Experts Group) MPG MPEG VOB DAT 3GP MP4 ?分M1PEG-1. MPEG-2 .MPEG-4 ?MKV ?Matroska ?Real Video RM RMVB ?QuickTime File Format MOV ?Flash video FLV
4.編碼轉(zhuǎn)碼
- 編碼方案(1080p):
- MP4封裝:H264視頻編碼+AAC音頻編碼
- WebM封裝:VP8視頻編碼+Vorbis音頻編碼(效果不好,油管采用方案)
- OGG封裝:Theora視頻編碼+ Vorbis音頻編碼(開源)
- 音頻編碼:
ffmpeg -i in.flac -acodec [libmp3lame] -ar 44100 -ab 320k -ac 2 out.mp3
- libmp3lame []表示不輸也可以,默認(rèn)編碼器
- ar音頻采樣率,默認(rèn)原音頻
- ab音頻比特率,默認(rèn)128k
- ac音道數(shù),默認(rèn)原音頻
- 視頻壓制
ffmpeg -i sp.mov -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -r 30 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4
- -s分辨率
- -pix_fmt顏色空間(YUV、NV、RGB...,參數(shù)可以ffmpeg -pix_fmt查看),網(wǎng)絡(luò)視頻一般采用這個空間
- -vcodec編碼器,1ibx2B64軟件編碼,可支持硬件加速(gpu加速)
- -preset編碼器預(yù)設(shè),ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo,默認(rèn)medium,錄制視頻用varyfast,壓制視頻用veryslow(往右時間長,壓制效果好)
- -profile:v指定編碼器配置,實時通信一般采用baseline,流媒體采用main,超清用high,越往右支持解析需要的要求硬件越高
- -level壓縮比,從1~5.2,一般1080p用4.1
- -crf碼率控制,取值:
0...18...23...28...51
。一般在18~28間,默認(rèn)23,越往右壓縮越狠 - 該方式畫面均衡,但無法精確控制碼率,對畫面要求,文件大小無要求的場景
- -r 設(shè)置幀率
- -b:a === -ab,音頻比特率
- 碼率控制模式
- -qp,每幀嚴(yán)格遵守規(guī)定(畫質(zhì)最好,體積特別大,除非想無損壓制視頻,否則不會這樣)
?無損壓縮的例子(快速編碼) ?ffmpeg -i input -vcodec libx264 -preset ultrafast -qp 0 output.mkv ?無損壓縮的例子(高壓縮比) ?ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv
- -crf,浮動qp模式(一般用這種模式)
- -b,嚴(yán)格控制視頻碼率,設(shè)定多少輸出多少
- 單遍編碼:-qp,-crf默認(rèn):單遍編碼,因此采用qp或者crf要搭配very slowly預(yù)設(shè),更精準(zhǔn)
- VBR編碼:-b默認(rèn)VBR編碼(網(wǎng)絡(luò)不好會造成花屏或黑屏)
- ABR編碼:現(xiàn)在一般用ABR
- CBR編碼:在ABR上加了一些指令(沒人用)
5.合并、提取音視頻
- 提取
- 提取單獨視頻:
``ffmpeg -i in.mp4 -vcodec copy -an v.mp4
- 提取音頻:
ffmpeg -i in.mp4 -vcodec copy -vn a.m4a
(mp3也可以) - 一個視頻多個音頻:
?Stream #0:2[0x81]:Audio: ac3,48000 Hz,5.1,s16,384 kb/s ?Stream #0:3[0x82]:Audio: ac3,48000 Hz,5.1,s16,384 kb/s ?Stream #0:4[Ox80]:Audio: ac3,48000 Hz,5.1,s16,448 kb/s
單獨提取,額外加上-map 0:3
- 合并:
ffmpeg -i a.m4a -i v.mp4 -c copy out.mp4
- -c copy (== -codec copy 是-acodec和-vcodec的和)用于維持編碼器,如果音視頻格式不剛好,則需要轉(zhuǎn)換
6.截取、連接音視頻
- 截取
ffmpeg -i in.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3
- -ss參數(shù)可以為00:00:12、00:12或者12都表示12秒
- -to表示結(jié)束時間,也可以用-t 10,表示往后截取10秒
- -sseof以末尾為起點,-sseof后面得跟具體的負(fù)數(shù), 且得放在-i前面,比如截取in.mp4的最后10秒, 代碼可以是:
ffmpeg -sseof -10 -i in.mp4 out.mp4
- ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -c copy out.mp4
- 將 -ss放在 -i前面會啟用關(guān)鍵幀技術(shù)(加速操作,但截取出來的視頻起止時間不一定準(zhǔn)確)
- 可以用:ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -c copy -copyts out.mp4
- 上述會保留時間戳,不會影響起止時間
- 連接
ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4
(這里沒成功,可以將待拼接的mp4轉(zhuǎn)為ts文件拼接為ts再轉(zhuǎn)mp4) ffmpeg -i "concat:1.ts|2.ts" -c copy out.ts
out.ts再轉(zhuǎn)mp4- 但是轉(zhuǎn)ts后很糊,建議直接剪輯軟件拼
- up推薦了一個剪輯軟件Avidemux
7.截圖、水印、動圖
- 截圖:截取第5s處第一幀的畫面
ffmpeg -i in.mp4 -ss 5 -vframes 1 img.jpg
- 水?。?code>ffmpeg -i in.mp4 -i logo.png -filter_complex "overlay=20:20" out.mp4 (overlay是偏移左邊和右邊的像素值)
- 動圖
ffmpeg -i in.mp4 -ss 7.5 -to 8.5 -s 640x320 -r 15 out.gif
8.錄屏和直播
- 錄屏不推薦,推薦obs
- 直播推流:
ffmpeg -re -i rec.mp4 按照網(wǎng)站要求編碼 -f flv "你的rtmp地址/你的直播碼"
- -re按視頻幀率推流
- -f指定格式(force format)
標(biāo)簽: