FFmpeg 是一個功能強大的跨平臺開源音視頻處理工具集 ,集錄制、轉碼、編解碼、流媒體傳輸等功能于一體,被廣泛應用于音視頻處理、直播、點播等場景。它支持幾乎所有主流的音視頻格式和協議,是許多媒體軟件(如 VLC、YouTube、抖音等)的核心底層依賴。
核心組件與功能
FFmpeg 由多個核心部分組成,涵蓋音視頻處理的全流程:
1. 命令行工具
ffmpeg
:核心轉碼工具,用于格式轉換、編解碼、裁剪、合并、濾鏡處理等。ffplay
:輕量級播放器,支持播放各種音視頻格式,可用于測試流或文件。ffprobe
:媒體信息分析工具,用于查看音視頻文件的編碼格式、時長、碼率、分辨率等元數據。ffserver
:流媒體服務器工具(較舊,逐漸被專用服務器替代)。
2. 核心庫(供開發者調用)
libavcodec
:音視頻編解碼庫,支持 H.264、H.265、AAC、MP3 等主流編解碼器。libavformat
:封裝格式處理庫,支持 MP4、FLV、MKV 等容器格式,以及 RTMP、RTSP、HLS 等流媒體協議。libavfilter
:音視頻濾鏡庫,支持加水印、裁剪、縮放、特效處理等。libswscale
:視頻縮放和像素格式轉換庫(如 YUV 轉 RGB)。libswresample
:音頻重采樣庫,用于調整采樣率、聲道數等。libavutil
:通用工具庫,提供數學運算、加密、像素處理等基礎功能。
常用命令示例
FFmpeg 命令行參數豐富,以下是一些典型用法:
1. 查看媒體文件信息
ffprobe input.mp4 # 查看 MP4 文件的詳細元數據
2. 格式轉換(轉碼)
將視頻從一種格式轉為另一種(如 MKV 轉 MP4):
ffmpeg -i input.mkv output.mp4
3. 提取音頻
從視頻中提取音頻并保存為 MP3:
ffmpeg -i input.mp4 -vn -acodec mp3 -b:a 128k output.mp3 # -vn:禁用視頻輸出;-acodec mp3:指定音頻編碼器;-b:a 128k:音頻碼率
4. 視頻裁剪
截取視頻的第 10 秒到第 30 秒片段(不重新編碼,速度快):
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c copy output_cut.mp4 # -ss:起始時間;-to:結束時間;-c copy:直接復制流(無損裁剪)
5. 調整分辨率
將視頻分辨率改為 1280x720(720P):
ffmpeg -i input.mp4 -s 1280x720 output_720p.mp4
6. 推流到 RTMP 服務器
將本地視頻以實時速率推送到 RTMP 直播服務器:
ffmpeg -re -i input.mp4 -c copy rtmp://server/live/stream_name # -re:按實際幀率發送(模擬實時流);-c copy:不轉碼直接推送
7. 拉取 RTSP 流并保存
從網絡攝像頭(RTSP 協議)拉流并保存為本地文件:
ffmpeg -i rtsp://username:password@camera_ip/stream -c copy output.mp4
8. 添加水印
在視頻左上角添加 PNG 水印圖片:
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output_watermark.mp4 # overlay=10:10:水印位置(x=10, y=10)
核心優勢
- 全能性:支持幾乎所有音視頻格式、協議和編解碼器,無需依賴其他工具。
- 高效性:優化的編解碼算法,支持硬件加速(如 NVIDIA CUDA、Intel QSV),處理速度快。
- 跨平臺:可運行于 Windows、Linux、macOS、Android、iOS 等系統。
- 可擴展性:提供 C 語言 API,可被 Python、Java 等多種語言調用,方便集成到應用中。
- 開源免費:基于 LGPL/GPL 許可證,可自由使用和二次開發。
攝像頭 Pipeline
“攝像頭 Pipeline”(攝像頭數據處理流水線)是指從攝像頭傳感器捕獲光信號,到最終輸出可使用的圖像 / 視頻數據的完整技術流程,核心是將原始數據按步驟處理為標準化格式,廣泛用于手機、安防監控、自動駕駛等設備。
核心環節(按數據流向排序)
傳感器捕獲(Sensor Capture)
攝像頭傳感器(如 CMOS)將光信號轉換為原始電信號,輸出未經處理的 “RAW 數據”(如 RGGB 格式),包含像素亮度、色彩信息,但無壓縮且體積大。ISP 處理(Image Signal Processing)
這是 Pipeline 的核心步驟,由專門的 ISP 芯片 / 模塊執行,目的是優化圖像質量:
- 基礎校正:壞點修復(修正傳感器故障像素)、黑電平校正(消除暗電流干擾);
- 關鍵優化:白平衡(調整色溫,避免偏色)、自動曝光(控制亮度)、對焦(確保清晰度)、降噪(減少雜色)、色彩還原(校準 RGB 比例);
- 效果增強:銳化(提升細節)、HDR 合成(融合不同曝光畫面,擴大動態范圍)。
數據編碼 / 壓縮(Encoding/Compression)
經過 ISP 優化的圖像數據仍為 “YUV/RGB 原始格式”,需通過編碼壓縮減少體積,便于存儲 / 傳輸:
- 靜態圖像:常用 JPEG 編碼;
- 動態視頻:常用 H.264(AVC)、H.265(HEVC)、AV1 等標準。
數據輸出 / 傳輸(Output/Transmission)
壓縮后的圖像 / 視頻數據,通過接口(如 MIPI、USB、以太網)傳輸到處理器(CPU/GPU)、存儲設備(硬盤 / 閃存),或直接用于顯示(屏幕)、AI 分析(如人臉識別)等場景。3A 算法
“3A 算法” 是攝像頭 ISP(圖像信號處理) Pipeline 中的核心自動控制算法,通過實時調整參數優化圖像質量,解決不同環境下的成像問題,是消費級相機(手機、單反)、安防監控等設備 “即拍即清晰” 的關鍵技術。
3A 算法的組成(核心三模塊)
3A 算法分別對應自動對焦(AF)、自動曝光(AE)、自動白平衡(AWB)?,三者協同工作,無需人工干預即可輸出高質量圖像。
RTSP和RTMP
一、核心定位與設計目標
RTSP:專注于媒體流控制,本身不傳輸實際音視頻數據,主要負責發送 "播放、暫停、快進" 等控制指令,需配合 RTP(傳輸媒體數據)和 RTCP(監控傳輸質量)協議使用。
設計目標是提供靈活的實時媒體控制能力,適合需要交互操作的場景。RTMP:集控制與數據傳輸于一體,可直接傳輸音視頻數據(基于 FLV 格式封裝),同時支持基礎控制指令,無需依賴額外數據傳輸協議。
設計目標是實現低延遲的媒體流傳輸,早期為 Flash Player 設計,后成為直播推流的主流協議。
二、技術特性對比
對比維度 RTSP RTMP 底層協議 通常基于 TCP(默認端口 554),也支持 UDP 基于 TCP(默認端口 1935) 數據傳輸方式 僅控制,媒體數據由 RTP 傳輸(UDP 為主) 直接傳輸媒體數據(FLV 格式分片) 延遲表現 極低(100ms-1 秒),UDP 傳輸減少等待 較低(1-3 秒),TCP 可靠傳輸帶來輕微延遲 傳輸可靠性 RTP 基于 UDP,可能丟包(需 RTCP 補償) 基于 TCP,保證數據不丟失、有序到達 協議開放性 標準化協議(IETF 定義),完全開放 最初為 Adobe 私有協議,后開源但標準較封閉 媒體格式支持 靈活,支持多種編碼(H.264、MPEG 等) 主要支持 FLV 封裝的音視頻(H.264/AAC 為主)
三、典型工作流程
RTSP 流程(需 RTP/RTCP 配合):
- 客戶端發送
OPTIONS
查詢服務器支持的指令- 發送
DESCRIBE
獲取媒體描述(SDP 格式,含編碼、RTP 端口等)- 發送
SETUP
建立 RTP 傳輸通道(協商 TCP/UDP)- 發送
PLAY
指令,服務器通過 RTP 開始傳輸媒體數據- 可發送
PAUSE
暫停,TEARDOWN
終止會話RTMP 流程:
- 客戶端與服務器建立 TCP 連接(端口 1935)
- 完成 RTMP 三次握手(驗證協議版本)
- 客戶端發送
connect
指令建立會話- 推流場景:發送
publish
指令開始上傳媒體流(FLV 分片)
拉流場景:發送play
指令,服務器推送媒體流- 斷開連接時發送
close
指令
四、應用場景差異
RTSP:
適合低延遲、需實時控制的場景,如:
- 安防監控(網絡攝像頭 IPC 的實時預覽、云臺控制)
- 視頻會議(實時畫面切換、攝像頭控制)
- 工業監控(設備實時畫面傳輸)
RTMP:
適合互聯網直播、推流等場景,如:
- 主播推流(通過 OBS 等工具向服務器推流)
- 低延遲直播(游戲直播、互動直播)
- 視頻點播(邊傳邊播已存儲的視頻文件)
五、優缺點總結
協議 優點 缺點 RTSP 延遲極低、控制靈活、協議開放標準 需配合 RTP/RTCP 使用,實現復雜度高;端口易被防火墻封禁 RTMP 實現簡單(單協議)、傳輸可靠、生態成熟 延遲略高于 RTSP;1935 端口易被封禁;瀏覽器原生不支持(需插件)
六、實際應用中的結合
在很多流媒體系統中,兩者會配合使用:
- 前端攝像頭通過RTSP輸出實時流(低延遲)
- 后端通過 FFmpeg 將 RTSP 流轉碼為RTMP推送到直播服務器
- 服務器再將 RTMP 流轉為 HLS/DASH 等協議供用戶在瀏覽器觀看
例如:
攝像頭(RTSP) → FFmpeg轉碼 → 直播服務器(RTMP) → 分發為HLS → 觀眾端
H.264 和 AAC
H.264 和 AAC 是音視頻領域常用的?兩種獨立編碼標準,常搭配使用(如 MP4、RTMP 格式),前者處理視頻,后者處理音頻,以下是簡潔介紹:
一、H.264(視頻編碼)
- 全稱:ITU-T H.264 / ISO/IEC MPEG-4 AVC(Advanced Video Coding),俗稱 “AVC”。
- 核心作用:對原始視頻數據(如攝像頭采集的 RGB 數據)進行?高效壓縮,在保證畫質的同時大幅減小文件體積 / 傳輸帶寬(壓縮比可達 100:1 以上)。
- 關鍵特點:
- 通用性極強:支持標清、高清(1080P)、4K 等多種分辨率,廣泛用于直播(RTMP)、點播(MP4)、監控、手機拍攝等場景。
- 平衡畫質與效率:通過 “幀間預測”(參考前后幀減少冗余)、“幀內預測”(單幀內像素關聯壓縮)等技術,在相同碼率下畫質優于早期標準(如 MPEG-2)。
- 常見應用:本地視頻文件(MP4、MKV)、直播推流(RTMP 常用 H.264 視頻)、視頻會議。
二、AAC(音頻編碼)
- 全稱:Advanced Audio Coding(高級音頻編碼),是 MPEG-4 標準下的音頻編碼方案。
- 核心作用:對原始音頻數據(如麥克風采集的 PCM 數據)進行壓縮,替代早期的 MP3,在相同碼率下音質更優。
- 關鍵特點:
- 音質好、壓縮效率高:128-192 kbps 碼率即可實現接近 CD 音質,支持單聲道、立體聲、多聲道(如 5.1 環繞聲)。
- 低延遲:適合實時場景(如直播、語音通話),也支持無損壓縮(AAC-LC 為有損,AAC-ALAC 為無損)。
- 常見應用:視頻伴音(MP4、FLV)、音樂文件(.aac 格式)、手機錄音、直播音頻。
三、H.264 + AAC 的典型搭配
兩者常結合使用,因為視頻需要畫面 + 聲音,且均為高效壓縮標準,能最大化降低存儲 / 傳輸成本:
- 容器格式:通過 MP4、FLV、MKV 等 “容器” 將 H.264 視頻流和 AAC 音頻流封裝在一起,確保同步播放。
- 典型場景:用 FFmpeg 推 RTMP 直播時,常指定?
-c:v libx264
(H.264 視頻編碼)和?-c:a aac
(AAC 音頻編碼),如:ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://server/live/stream