[FFMpeg筆記]01 基本組成和入門示例
阿新 • • 發佈:2021-01-20
目錄
FFmpeg基本組成
-
AVFormat
封裝了大多數媒體格式:如MP4、FLV等檔案格式,RTMP、RTSP、MMS、HLS等網路協議。 -
AVCodec
支援常見編解碼格式:MPEG4、AAC等。支援第三方:- H.263(AVC)->需x264編碼器;
- H265(HEVC)->需x265編碼器;
- MP3(mp3lame)->需libmp3lame編碼器;
-
AVFilter
通用濾鏡處理框架。可以有多個輸入和多個輸出。
ffmpeg -i 1.jpg -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip];[main][flip] overlay=0:H/2" 2.jpg
說明:
- 相同的Filter線性鏈之間用逗號分隔
- 不同的Filter線性鏈之間用分號分隔
- 方括號[]括起來的部分是標籤
- 上面的命令列,圖片換成視訊也可以正常轉換,比如 1.jpg 改為 1.mp4, 2.jpg 改為 2.mp4
-
AVDevice
-
AVUtil
-
swresample
音訊轉換計算模組 -
swscale
視訊影象轉換計算模組
編解碼工具 ffmpeg.exe
ffmpeg -i 1.mp4 2.avi
- -i 引數將1.mp4作為輸入源
- mp4和avi是兩種檔案封裝格式,但不是字尾名就可以決定的。
ffmpeg -i 1.mp4 -f avi 2.dat
- -f進行約束,指定了輸出檔案的容器格式,其過程和上一個命令一樣,僅僅輸出的檔名不同。
ffmpeg.exe的工作流程
- ffmpeg讀取輸入原始檔
- 將音視訊包Demuxer(解封裝),呼叫libavformat中的介面即可
- Decoder(解碼)每一幀音視訊資料,成為YVU或者PCM這樣的資料,通過libavcodec中的介面即可
- 轉換引數
- Encoder(編碼)對應資料,依然通過libavcodec中的介面來實現
- 然後通過libavformat中的介面進行Muxer(封裝)
- 輸出到目標,檔案或資料流
可以通過下面的命令檢視預設支援格式
ffmpeg -formats
檢視支援的編解碼情況
ffmpeg -codecs
Decoders:
V..... = Video
A..... = Audio
S..... = Subtitle
.F.... = Frame-level multithreading
..S... = Slice-level multithreading
...X.. = Codec is experimental
....B. = Supports draw_horiz_band
.....D = Supports direct rendering method 1
輸出資訊的第一列包含6個欄位:
- 表示這個編碼器是視訊、音訊還是字幕;
- 表示幀級別的多執行緒支援;
- 表示分片級別的多執行緒支援;
- 表示為試驗版本;
- draw_horiz_band模式支援;這是一個數據結構;
- 直接渲染模式支援;
檢視支援哪些濾鏡
ffmpeg -filters
檢視flv解封裝器的引數支援
ffmpeg -h demuxer=flv
檢視H.264的編碼器的引數支援
ffmpeg -h encoder=h264
播放器 ffplay.exe
這個一般我們用來做測試工具
多媒體分析器 ffprobe
ffprobe -show_streams 1.mp4