1. 介紹
FFmpeg是一個(gè)跨平臺(tái)的開源多媒體框架饵骨,可以用于處理和轉(zhuǎn)換各種音視頻格式回溺。它提供了必要的工具和庫來進(jìn)行音視頻的錄制、轉(zhuǎn)碼唯欣、播放嘹吨、流媒體傳輸?shù)炔僮鳎€可以抓取實(shí)時(shí)的音頻/視頻流境氢。
FFmpeg 主要包括三塊:FFmpeg蟀拷、FFplay、FFprobe萍聊。</br>
使用FFmpeg的常見應(yīng)用和產(chǎn)品
視頻轉(zhuǎn)碼器:通過 FFmpeg问芬,可以將視頻文件從一個(gè)格式轉(zhuǎn)換為另一個(gè)格式,例如將 AVI 轉(zhuǎn)換為 MP4寿桨、MKV 轉(zhuǎn)換為 MOV 等此衅。
音頻轉(zhuǎn)碼器:類似于視頻轉(zhuǎn)碼器,F(xiàn)Fmpeg可用于轉(zhuǎn)換音頻文件的格式亭螟,例如將 MP3 轉(zhuǎn)換為 WAV挡鞍、AAC 轉(zhuǎn)換為 FLAC 等。
視頻編輯軟件:一些視頻編輯軟件预烙,如Adobe Premiere Pro匕累、Final Cut Pro等,使用 FFmpeg 來處理視頻文件默伍,包括剪輯欢嘿、合并衰琐、添加字幕、調(diào)整畫質(zhì)等功能炼蹦。
媒體播放器:許多媒體播放器羡宙,包括VLC媒體播放器、MPlayer等掐隐,使用FFmpeg 解碼和渲染音視頻文件狗热。
流媒體服務(wù)器:FFmpeg 可以用來構(gòu)建流媒體服務(wù)器,將音視頻文件以流的方式傳輸給客戶端虑省,實(shí)現(xiàn)實(shí)時(shí)播放或直播功能匿刮。
視頻截圖工具:FFmpeg 提供了截取視頻縮略圖的功能,可以用來生成視頻預(yù)覽圖探颈、視頻封面等熟丸。
視頻壓縮工具:通過 FFmpeg,你可以調(diào)整視頻的分辨率伪节、比特率光羞、幀率等參數(shù),以減小文件大小怀大,實(shí)現(xiàn)視頻壓縮纱兑。
2. 安裝
下面是一些常用平臺(tái)的安裝指南
2.1 Linux
- 使用包管理器安裝FFmpeg
- Debian/Ubuntu: `sudo apt-get install ffmpeg`
- CentOS/Fedora: `sudo yum install ffmpeg`
- 編譯安裝FFmpeg
- 下載最新的源代碼:`wget https://ffmpeg.org/releases/ffmpeg-<version>.tar.gz`
- 解壓源代碼:`tar -zxvf ffmpeg-<version>.tar.gz`
- 進(jìn)入解壓后的目錄:`cd ffmpeg-<version>`
- 配置和編譯:`./configure && make && sudo make install`
2.2 macOS
使用Homebrew安裝FFmpeg:
brew install ffmpeg
3. 基本用法
命令介紹
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
ffmpeg [全局選項(xiàng)] [輸入選項(xiàng)] -i 輸入文件 [輸出選項(xiàng)] 輸出文件...
-
[全局選項(xiàng)]
: 適用于整個(gè)轉(zhuǎn)碼過程,如設(shè)置日志級別化借、指定硬件加速器等潜慎。 -
[輸入選項(xiàng)]
: 用于指定輸入文件的參數(shù),如輸入文件的格式蓖康、分辨率勘纯、幀率等。 -
[輸出選項(xiàng)]
: 用于指定輸出文件的參數(shù)钓瞭,如輸出文件的格式、編碼器淫奔、比特率等山涡。
常用選項(xiàng)
-
-c:v
: 指定視頻編碼器。 -
-c:a
: 指定音頻編碼器唆迁。 -
-b:v
: 設(shè)置視頻比特率鸭丛。 -
-b:a
: 設(shè)置音頻比特率。 -
-s
: 設(shè)置輸出分辨率唐责。 -
-r
: 設(shè)置輸出幀率鳞溉。 -
-ss
: 剪切輸入文件的起始時(shí)間。 -
-t
: 設(shè)置輸出文件的持續(xù)時(shí)間鼠哥。 -
-vf
: 應(yīng)用視頻濾鏡熟菲。 -
-af
: 應(yīng)用音頻濾鏡看政。
處理過程
- 讀取輸入源
- 進(jìn)行音視頻的解封裝
- 解碼每一幀音視頻數(shù)據(jù)
- 編碼每一幀音視頻數(shù)據(jù)
- 進(jìn)行音視頻的重新封裝
- 輸出到目標(biāo)
轉(zhuǎn)碼
轉(zhuǎn)換一個(gè)音視頻文件的格式或編碼:
ffmpeg -i input.mp4 output.avi
剪切
剪切一個(gè)音視頻文件的時(shí)間段:
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c copy output.mp4
修改分辨率
修改一個(gè)視頻文件的分辨率:
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4
提取音頻
從一個(gè)視頻文件中提取音頻:
ffmpeg -i input.mp4 -vn -acodec copy output.aac
添加水印
在一個(gè)視頻文件上添加水印:
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4
圖片合成視頻
將一系列圖片合成為視頻:
ffmpeg -framerate 25 -pattern_type glob -i 'input*.png' -c:v libx264 output.mp4
4. 高級用法
視頻編解碼——視頻編碼
使用不同的視頻編碼器對視頻進(jìn)行編碼:
ffmpeg -i input.mp4 -c:v libx264 output.mp4 # 使用H.264編碼
ffmpeg -i input.mp4 -c:v libvpx output.webm # 使用VP8編碼
視頻編解碼——視頻解碼
使用不同的視頻解碼器對視頻進(jìn)行解碼:
ffmpeg -i input.mp4 -c:v rawvideo output.avi # 將視頻解碼為無壓縮的原始視頻
ffmpeg -i input.mp4 -c:v mjpeg output.avi # 使用MJPEG解碼器將視頻轉(zhuǎn)換為MJPG格式
編解碼——音頻編碼
使用不同的音頻編碼器對音頻進(jìn)行編碼:
ffmpeg -i input.wav -c:a aac output.m4a # 使用AAC編碼器將音頻編碼為M4A格式
ffmpeg -i input.wav -c:a libopus output.opus # 使用Opus編碼器將音頻編碼為Opus格式
編解碼——音頻解碼
使用不同的音頻解碼器對音頻進(jìn)行解碼:
ffmpeg -i input.mp3 -c:a pcm_s16le output.wav # 將MP3音頻解碼為無壓縮的PCM音頻
ffmpeg -i input.aac -c:a pcm_s16le output.wav # 將AAC音頻解碼為無壓縮的PCM音頻
常用濾鏡
- crop:裁剪視頻抄罕,可以指定裁剪的起始和結(jié)束時(shí)間允蚣,以及裁剪的寬度和高度。
- scale:縮放視頻呆贿,可以指定縮放的寬度和高度嚷兔,以及是否保持縱橫比。
- rotate:旋轉(zhuǎn)視頻做入,可以指定旋轉(zhuǎn)的角度冒晰。
- flip:翻轉(zhuǎn)視頻,可以指定是否水平翻轉(zhuǎn)或垂直翻轉(zhuǎn)竟块。
- contrast:調(diào)整視頻的對比度壶运。
- brightness:調(diào)整視頻的亮度。
- saturation:調(diào)整視頻的飽和度彩郊。
- hue:調(diào)整視頻的色調(diào)前弯。
- sharpness銳化:銳化視頻,提高圖像的清晰度秫逝。
- noisereduction降噪:降低視頻中的噪聲恕出,提高圖像的質(zhì)量。
- deinterlace去隔行:去除視頻中的隔行掃描违帆,使圖像更加流暢浙巫。
- Watermark水印:在視頻中添加水印刷后,可以指定水印的位置的畴、大小和透明度。
濾鏡-基本濾鏡
使用濾鏡效果來改善視頻或音頻:
# 調(diào)整亮度
ffmpeg -i input.mp4 -vf "scale=640:480, eq=brightness=0.2" output.mp4
# 調(diào)整音量
ffmpeg -i input.mp4 -af "volume=2.0" output.mp4
濾鏡-復(fù)雜濾鏡
使用復(fù)雜的濾鏡圖形鏈來實(shí)現(xiàn)更高級的效果:
# 分割尝胆、調(diào)整對比度和添加暗角效果
ffmpeg -i input.mp4 -vf "split=2[a][b];[a]eq=contrast=1.2[b];[b]vignette" output.mp4
# 提高音量和應(yīng)用高通濾波
ffmpeg -i input.mp4 -af "volume=1.5,highpass=f=200" output.mp4
流媒體傳輸-推送到RTMP服務(wù)器
將音視頻流推送到RTMP服務(wù)器進(jìn)行直播:
# 推送到RTMP服務(wù)器
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://server/live/stream
流媒體傳輸-拉取RTMP流
從RTMP服務(wù)器拉取音視頻流進(jìn)行播放或處理:
# 拉取流并保存為文件
ffmpeg -i rtmp://server/live/stream -c:v copy -c:a copy output.mp4
# 拉取流并在SDL窗口中顯示視頻
ffmpeg -i rtmp://server/live/stream -vf "scale=640:480" -f sdl "Video Output"
高級選項(xiàng)——編碼參數(shù)調(diào)優(yōu)
調(diào)整編碼器的參數(shù)以獲得更好的音視頻質(zhì)量或壓縮率:
# 使用CRF調(diào)整視頻質(zhì)量和使用慢速預(yù)設(shè)以獲取更好的壓縮
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow output.mp4
# 使用固定比特率設(shè)置音頻的碼率為128kbps
ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a
高級選項(xiàng)——處理字幕和元數(shù)據(jù)
提取丧裁、添加或修改視頻的字幕和元數(shù)據(jù):
# 提取視頻中的字幕為MOV Text字幕文件
ffmpeg -i input.mp4 -c:s mov_text output.mp4
# 添加英文字幕并設(shè)置語言標(biāo)簽
ffmpeg -i input.mp4 -c:s mov_text -metadata:s:s:0 language=eng output.mp4
# 修改視頻的標(biāo)題和藝術(shù)家元數(shù)據(jù)
ffmpeg -i input.mp4 -metadata title="My Title" -metadata artist="Artist Name" output.mp4
5. 文檔查找
ffmpeg -h
ffmpeg -muxers #查看支持的音視頻復(fù)用器
ffmpeg -h muxer=flv
ffmpeg -codecs #查看支持的編解碼器、格式和協(xié)議
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-dispositions show available stream dispositions
-colors show available color names
-sources device list sources of the input device
-sinks device list sinks of the output device
-hwaccels show available HW acceleration methods
視頻信息分析神器——FFprobe
- -show_format 格式相關(guān)信息
- -show_streams 音視頻流分析
- -show_packets 音視頻包分析
- -show_frames 音視頻幀分析
6. 資料
- FFmpeg官方文檔:https://ffmpeg.org/documentation.html
- FFmpeg Wiki:https://trac.ffmpeg.org/wiki
- FFmpeg常見問題解答:https://ffmpeg.org/faq.html
- FFmpeg濾鏡文檔:https://ffmpeg.org/ffmpeg-filters.html
- FFmpeg編碼器文檔:https://ffmpeg.org/ffmpeg-codecs.html
- FFmpeg格式文檔:https://ffmpeg.org/ffmpeg-formats.html