探索FFmpeg

  • 2020 年 1 月 22 日
  • 筆記

Part1 :FFmpeg簡介

FFmpeg定義

FFmpeg是一款音影片編解碼工具,為開發者提供了大量音影片處理介面。

FF指的是「Fast Forward」

FFmpeg歷史

2000年,法國天才Fabrice Bellard開發出第一代版本

2004年,Michael Nidermayer接手

2011年,FFmpeg其中的提交者對項目管理不滿意,自立門戶,創建了Libav

2015年,Michael Nidermayer移植了大量的程式碼到FFmpeg中,並辭職,希望兩個項目可以共同發展,若能合併則更好

GitHub地址:https://github.com/FFmpeg/FFmpeg

FFmpeg組成

  • AVFormat:實現了大多數媒體的封裝格式,包括MP4,FLV等文件封裝格式,RTMP,RTSP等網路協議封裝格式。
  • AVCodec:實現了大多數媒體的編解碼格式,支援MPEG4,AAC,H.264(AVC),H.265(HEVC),MP3
  • AVFilter:一個通用的音影片,字幕等濾鏡處理框架
  • swscale影片影像轉換計算模組:1080p轉換為720或者480,或者將影像數據從YUV420p轉換成YUYV.
  • swresample音頻計算轉換模組:操作音頻取樣,音頻通道布局轉換,布局調整。

FFmpeg編解碼工具ffmpeg

ffmpeg是FFmpeg源程式碼編譯後生成的可執行程式,可以作為命令行使用。

ffmpeg主要工作流程:

  • 讀取數據源
  • 進行音影片的解封裝
  • 解碼每一幀音影片數據
  • 編碼每一幀音影片數據
  • 對音影片數據重新封裝
  • 輸出到目標

FFmpeg多媒體分析器ffprobe

包含音頻,影片參數,媒體容器的參數資訊。

FFmpeg編譯

  • windows平台編譯 下載軟體包 https://ffmpeg.zeranoe.com/builds/ 解壓後配置環境變數 C:UsersnoneplusDesktopffmpeg-20191001-c4de49e-win64-staticbin 打開命令行 ffmpeg

Part2:常用命令

ffmpeg命令

命令格式

ffmpeg       [global_options]       [input_file_options] -i input_url       [actions]       [output_file_options] output_url

參數說明

-y   表示直接覆蓋已經存在的輸出文件  -n   表示若某個輸出文件已經存在則退出

影片截取

ffmpeg -ss 00:00:20 -t 00:00:10 -i test.mp4 noneplus.mp4

-ss表示開始切割的時間,-t表示要切多少。上面就從20秒開始,切10秒鐘出來。

影片格式轉換

ffmpeg -i noneplus.mp4 noneplus.avi

提取音頻流

ffmpeg -i output.mp4 -acodec copy -vn output.aac

-acodec表示音頻編碼,copy表示不改變編解碼器,只是改封裝器

-vn 不將影片流寫到輸出文件中

提取影片流

ffmpeg -i noneplus.mp4 -vcodec copy -an noneplus.mp4

-an 不將音頻流寫到輸出文件中

添加音頻

ffmpeg -i bgm.mp3 -i test.mp4 output.mp4

參數

參數名

作用

-i filename

輸入文件

ffmpeg -i test1.mp4 test2.avi

轉換格式mp4為avi。

參考書籍:

《FFmpeg從入門到精通》劉岐,趙文傑編著