探索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從入門到精通》劉岐,趙文傑編著