1. 程式人生 > 實用技巧 >[FFMpeg筆記]01 基本組成和入門示例

[FFMpeg筆記]01 基本組成和入門示例

目錄

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

說明:

  1. 相同的Filter線性鏈之間用逗號分隔
  2. 不同的Filter線性鏈之間用分號分隔
  3. 方括號[]括起來的部分是標籤
  4. 上面的命令列,圖片換成視訊也可以正常轉換,比如 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的工作流程

  1. ffmpeg讀取輸入原始檔
  2. 將音視訊包Demuxer(解封裝),呼叫libavformat中的介面即可
  3. Decoder(解碼)每一幀音視訊資料,成為YVU或者PCM這樣的資料,通過libavcodec中的介面即可
  4. 轉換引數
  5. Encoder(編碼)對應資料,依然通過libavcodec中的介面來實現
  6. 然後通過libavformat中的介面進行Muxer(封裝)
  7. 輸出到目標,檔案或資料流

可以通過下面的命令檢視預設支援格式

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個欄位:

  1. 表示這個編碼器是視訊、音訊還是字幕;
  2. 表示幀級別的多執行緒支援;
  3. 表示分片級別的多執行緒支援;
  4. 表示為試驗版本;
  5. draw_horiz_band模式支援;這是一個數據結構;
  6. 直接渲染模式支援;

檢視支援哪些濾鏡

ffmpeg -filters

檢視flv解封裝器的引數支援

ffmpeg -h demuxer=flv

檢視H.264的編碼器的引數支援

ffmpeg -h encoder=h264

播放器 ffplay.exe

這個一般我們用來做測試工具

多媒體分析器 ffprobe

ffprobe -show_streams 1.mp4