官方教程
筆記來源 https://www.bilibili.com/video/av40146374 評論區(qū)
- 查看
ffmpeg的幫助說明
ffmpeg -h
- 播放媒體
ffplay video.mp4
ffplay music.mp3
常用快捷鍵
按鍵Q或Esc: 退出媒體播放
鍵盤方向鍵: 媒體播放的前進后退
點擊鼠標右鍵: 拖動到該播放位置
按鍵F: 全屏
按鍵P或空格鍵: 暫停
按鍵W: 切換顯示模式查看媒體參數(shù)信息
ffprobe video.mp4
- 轉(zhuǎn)換格式(文件格式/封裝格式)
(1)文件名可以是中英文,但不能有空格。
(2)轉(zhuǎn)換格式
ffmpeg -i video.mp4 video_avi.avi
- 改變編碼 上(編碼,音頻轉(zhuǎn)碼)
(1)查看編解碼器
ffmpeg -codecs
(2)網(wǎng)站常用編碼
MP4封裝:H264視頻編碼+ACC音頻編碼
WebM封裝:VP8視頻編碼+Vorbis音頻編碼
OGG封裝:Theora視頻編碼+Vorbis音頻編碼
(3)無損編碼格式.flac轉(zhuǎn)換編碼
ffmpeg -i music_flac.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 music_flac_mp3.mp3
說明:
acodec:audio Coder Decoder 音頻編碼解碼器
libmp3lame: mp3解碼器
ar:audio rate: 音頻采樣率
44100: 設(shè)置音頻的采樣率44100。若不輸入,默認用原音頻的采樣率
ab: audio bit rate 音頻比特率
320k: 設(shè)置音頻的比特率。若不輸入,默認128K
ac: aduio channels 音頻聲道
2:聲道數(shù)
若不輸入,默認采用源音頻的聲道數(shù)
概括:設(shè)置格式的基本套路-先是指名屬性,然后跟著新的屬性值
查看結(jié)果屬性
ffprobe music_flac_mp3.mp3
- 改變編碼 中(視頻壓制)
(1)視頻轉(zhuǎn)碼
ffmpeg -i video.mp4 -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k video_avi.avi
說明:
-s 1920x1080: 縮放視頻新尺寸(size)
-pix_fmt yuv420p: pixel format, 用來設(shè)置視頻顏色空間。
參數(shù)查詢:
ffmpeg -pix_fmts
-vcodec libx264: video Coder Decoder,視頻編碼解碼器
-preset medium: 編碼器預(yù)設(shè)。
參數(shù):ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo
-profile:v high:編碼器配置,與壓縮比有關(guān)。
實時通訊-baseline,流媒體-main,超清視頻-high
-level:v 4.1: 對編碼器設(shè)置的具體規(guī)范和限制,權(quán)衡壓縮比和畫質(zhì)。
-crf 23: 設(shè)置碼率控制模式。
constant rate factor-恒定速率因子模式。范圍051,默認23。數(shù)值越小,畫質(zhì)越高。一般在828做出選擇。
-r 30: 設(shè)置視頻幀率
-acodec aac: audio Coder Decoder-音頻編碼解碼器
-b:a 128k: 音頻比特率.大多數(shù)網(wǎng)站限制音頻比特率128k,129k
其他參考上一個教程
- 改變編碼 下(碼率控制模式)
ffmpeg支持的碼率控制模式:-qp -crf -b
(1)
-qp :constant quantizer, 恒定量化器模式
無損壓縮的例子(快速編碼)
ffmpeg -i input -vcodec libx264 -preset ultrafast -qp 0 output.mkv
無損壓縮的例子(高壓縮比)
ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv
(2)
-crf: constant rate factor,恒定速率因子模式
(3)
-b: bitrate,固定目標碼率模式。一般不建議使用
3種模式默認單遍編碼
VBR(Variable Bit Rate/動態(tài)比特率):
ffmpeg -i input -vcodec libx264 -preset veryslow output
ABR(Average Bit Rate/平均比特率):
ffmpeg -i input -vcodec libx264 -preset veryslow -b:v 3000k output
CBR(Constant Bit Rate/恒定比特率):
... -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k ...
- 合并,提取音視頻
(1)單獨提取視頻(不含音頻流)
ffmpeg -i video.mp4 -vcodec copy -an video_silent.mp4
(2)單獨提取音頻(不含視頻流)
ffmpeg -i video.mp4 -vn -acodec copy video_novideo.m4a
具備多個音頻流的,如
Stream #0:2[0x81]:Audio:ac3,48000Hz,5.1,s16,384kb/s
Stream #0:3[0x82]:Audio:ac3,48000Hz,5.1,s16,384kb/s
Stream #0:4[0x80]:Audio:ac3,48000Hz,5.1,s16,448kb/s
針對性的單一的提取,例如提取第2條,用指令: -map 0:3
(3)合并音視頻
ffmpeg -i video_novideo.m4a -i video_silent.mp4 -c copy video_merge.mp4
- 截取,連接音視頻
(1)截取
ffmpeg -i music.mp3 -ss 00:00:30 -to 00:02:00 -acodec copy music_cutout.mp3
截取60秒
ffmpeg -i music.mp3 -ss 00:00:30 -t 60 -acodec copy music_cutout60s.mp3
-sseof : 從媒體末尾開始截取
ffmpeg -i in.mp4 -ss 00:01:00 -to 00:01:10 -c copy out.mp4
ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -c copy out.mp4
ffmpeg -ss 00:01:00 -i in.mp4 -to 00:01:10 -c copy -copyts out.mp4
把-ss放到-i之前,啟用了關(guān)鍵幀技術(shù),加速操作。但截取的時間段不一定準確??捎米詈笠粭l指令,保留時間戳,保證時間準確。
(2)連接音視頻
ffmpeg -i "concat:01.mp4|02.mp4|03.mp4" -c copy out.mp4
不同格式的音視頻可以連接在一起,但不推薦不同格式連接在一起。
建議使用Avidemux軟件連接
- 截圖,水印,動圖
(1)截圖.
截取第7秒第1幀的畫面
ffmpeg -i video.mp4 -ss 7 -vframes 1 video_image.jpg
(2)水印
ffmpeg -i video.mp4 -i qt.png -filter_complex "overlay=20:80" video_watermark.mp4
(3)截取動圖
ffmpeg -i video.mp4 -ss 7.5 -to 8.5 -s 640x320 -r 15 video_gif.gif
- 錄屏,直播
(1)錄屏
windows: ffmpeg -f gdigrab -i desktop rec.mp4
ubuntu: sudo ffmpeg -f fbdev -framerate 10 -i /dev/fb0 rec.mp4
gdigrab: ffmpeg中的一個組件。
只捕獲視頻.若要錄屏,錄音,獲取攝像頭,麥克風,換組件,用OBS Studio軟件
(2)直播
ffmpeg -re i rec.mp4 按照網(wǎng)站要求編碼 -f flv "你的rtmp地址/你的直播碼"