ffmepg介绍
ffmepg介紹
ffmpeg是一個開放原碼的自由軟件,可以運行音頻和視頻多種格式的錄影、轉換、流功能。
具體地,ffmpeg包括一組應用程序和函數庫。
命令行應用程序
- ffmpeg:用于對視頻文檔或音頻檔案轉換格式
- ffplay:一個簡單的播放器,基于SDL與FFmpeg庫
- ffprobe:用于顯示媒體文件的信息
函數庫 - libswresample
- libavresample
- libavcodec:包含全部FFmpeg音頻/視頻編解碼庫
- libavformat:包含demuxers和muxer庫
- libavutil:包含一些工具庫
- libpostproc:對于視頻做前處理的庫
- libswscale:對于影像作縮放的庫
- libavfilter
基本語法
這里介紹ffmpeg應用程序的使用語法
ffmpeg [global_options] {[input_file_options] -i input_url} … {[output_file_options] output_url} …
ffmepg的輸入文件可以是多個(比如將視頻和音頻文件合成為一個帶有聲音的視頻),輸出文件也可以是多個(比如從視頻中截取多幀圖片)。輸入文件地址用命令-i接地址指定,沒有命令指定的地址是輸出文件地址。
ffmpeg對選項的順序敏感,選項作用于下一個指定的文件。所以,在一個命令中,可以出現多次相同的選項。例外是全局選項(global_options)必須在最前面指定。
例如,下面的命令包含兩個-r,令輸入文件的fps為1,輸出文件的fps為24。
ffmpeg -r 1 -i input.m2v -r 24 output.avi
處理流程
ffmepg的處理流程可以用下圖描述:
這里首先說明一下多媒體數據的封裝格式和編碼格式。編碼是對數據的壓縮算法,常見的編碼格式有:h264、h265、mpeg、wmv、aac 等。封裝格式也稱為容器格式,作為編碼格式的載體,將至少一個編碼格式的數據按照特定格式組織起來,并提供一些輔助功能。一個視頻文件格式可以看成一個容器,這個容器包含了如音頻軌道、視頻軌道和其他一些元數據。常見的封裝格式有mp4、mkv、avi等。
上圖中demuxer是解封裝器,muxer是封裝器,decoder是解碼器,encoder是編碼器。ffmpeg首先讀取輸入源,然后通過demuxer將音視頻包進行解封裝,這個動作通過調用libavformat中的接口即可實現;接著通過decoder進行解碼,將音視頻通過decoder解包為YUV或者PCM這樣的數據,decoder通過libavcodec中的接口即可實現;然后通過encoder將對應的數據進行編碼,編碼可以通過libavcodec中的接口實現;接下來將編碼后的音視頻數據包通過muxer進行封裝,muxer封裝通過libavformat中的接口即可實現,輸出成為輸出流。
過濾器filter
對于解碼得到的原始數據,ffmpeg可以對其進行操作,并將這些操作稱之為過濾。ffmpeg通過libavfilter中的接口進行過濾。
過濾分為兩種,簡單過濾和復雜過濾。
簡單過濾如下圖只有一個輸入輸出,可以用線性的過程來表示。
復雜過濾如下圖,不能用一個線性的過程來表示。
例子
提取帶音頻的視頻文件中的視頻流,屏蔽音頻
ffmpeg -i input.mp4 -an output.mp4
提取帶音頻的視頻文件中的音頻,屏蔽視頻
ffmpeg -i input.mp4 -vn output.aac
參考資料
ffmpeg官方文檔
wiki百科ffmpeg
https://zhuanlan.zhihu.com/p/37516093
總結
- 上一篇: 分子结构的子结构查询:SMARTS语言
- 下一篇: Word中如何自动按照章节给图片编号?