FFmpeg 作為音視頻處理的「瑞士軍刀」,其模塊化設計極具參考價值。本文系統梳理 **六大核心庫、三大命令行工具、轉碼全流程、濾鏡圖語法、探針分析用法**,並附帶實戰命令與輸出解讀,助你從整體架構到細節用法全面掌握 FFmpeg。
| 庫 | 核心職責 | 典型場景 |
|---|---|---|
| libavformat | 封裝/解封裝(容器格式、協議) | MP4/FLV/MKV 封裝、RTMP/RTSP/TCP/UDP 解封裝 |
| libavcodec | 編解碼(壓縮格式) | H.264/H.265/AAC/MP3 編解碼,支持 x264/x265/lame 第三方編碼器 |
| libavfilter | 濾鏡/特效(音視頻處理) | 疊加、裁剪、翻轉、重采樣、混音、字幕燒錄 |
| libavdevice | 設備輸入輸出 | 攝像頭采集、聲卡錄音、屏幕錄製、SDL 播放 |
| libswscale | 視頻縮放/像素格式轉換 | 1080p→720p、YUV420P↔RGB24、混色計算 |
| libswresample | 音頻重采樣/通道/格式轉換 | 48kHz→44.1kHz、立體聲↔單聲道、planar↔packed |

libx264、H.265→libx265、MP3→libmp3lame;支持**多輸入多輸出**、**線性鏈(逗號分隔)**、**多鏈匯合(分號分隔)**、**標籤引用([label])**。
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT

split 將輸入分為 [main] 和 [tmp] 兩路;crop=iw:ih/2:0:0 取上半部,vflip 垂直翻轉,標記為 [flip];overlay=0:H/2 將 [flip] 疊加到 [main] 的正中間(y=H/2)。| 工具 | 定位 | 典型用法 |
|---|---|---|
| ffmpeg | 轉碼/轉封裝/處理主程序 | ffmpeg -i in.mp4 -c:v libx264 -c:a aac out.mp4 |
| ffplay | 簡易播放器(依賴 SDL) | ffplay -i test.mp4、波形/頻譜可視化 |
| ffprobe | 多媒體分析探針 | ffprobe -show_streams -print_format json in.mp4 |

ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
輸出結構化 JSON,包含:format(容器元數據)、streams[](每路流的 codec、分辨率、幀率、碼率、時長等)。
FFmpeg 以 **「核心庫解耦 + 工具鏈組合」** 實現極致靈活性:libavformat 管容器,libavcodec 管壓縮,libavfilter 管處理,libavdevice 管設備,swscale/resample 管轉換。掌握這六大庫職責邊界、濾鏡圖語法、轉碼五階段、三大工具定位,即可應對 90% 以上的音視頻工程需求。