一、FFmpeg簡介
FFmpeg 是一款開源的多媒體視頻處理工具,可以用來記錄、轉換數字音頻、視頻,并能夠將其轉化為流的開源計算機程式,
其中包含了音頻/視頻編解碼庫libavcodec,
它的功能包括視頻采集、視頻格式轉換、視頻抓圖、給視頻加水印等,
其中現有的很多處理軟體是基于 FFmpeg 開發,包括暴風影音、QQ影音、PotPlaye 等,
但是需要注意的是,FFmpeg 是以命令列的方式運行的,所以需要在終端操作它,
二、音視頻相關知識
1、封裝:即我們常說的檔案格式 mp4、avi、mkv、rmvb,它像是一個容器,里面會包含視頻、音頻、字幕等資訊,
2、編碼:編碼的目的是為了存盤和壓縮,視頻和音頻會采用不同的編碼方式編碼后放進容器中,
常見的視頻編碼方式有h.264(HVC)、h.265(HEVC)、MPEG4、VC-1等,常見的音頻編碼方式有AAC、AC-3、MP3等,
注:封裝格式會限制編碼方式,
三、ffmpeg的主要組成
1、libavformat:用于各種音視頻封裝格式的生成和決議,包括獲取解碼所需資訊以生成解碼背景關系結構和讀取音視頻幀等功能,包含demuxers和muxer庫;
2、libavcodec:用于各種型別聲音/影像編解碼;
3、libavutil:包含一些公共的工具函式;
4、libswscale:用于視頻場景比例縮放、色彩映射轉換;
5、libpostproc:用于后期效果處理;
6、ffmpeg:是一個命令列工具,用來對視頻檔案轉換格式,也支持對電視卡實時編碼;
7、ffsever:是一個HTTP多媒體實時廣播流服務器,支持時光平移;
8、ffplay:是一個簡單的播放器,使用 ffmpeg 庫決議和解碼,通過SDL顯示;
基礎概念
容器(Container)
容器就是一種檔案格式,比如flv,mkv等,包含下面5種流以及檔案頭資訊,
流(Stream)
是一種視頻資料資訊的傳輸方式,5種流:音頻,視頻,字幕,附件,資料,
幀(Frame)
幀代表一幅靜止的影像,分為I幀,P幀,B幀,
編解碼器(Codec)
是對視頻進行壓碩訓者解壓縮,CODEC =COde (編碼) +DECode(解碼)
復用/解復用(mux/demux)
把不同的流按照某種容器的規則放入容器,這種行為叫做復用(mux)
把不同的流從某種容器中決議出來,這種行為叫做解復用(demux)
四、ffmpeg的處理流程

執行流程解釋:
1、FFmpeg程式把-i引數指定的若干檔案內容讀入到記憶體,按照輸入的引數或者程式默認的引數來處理并且把結果寫入到若干的檔案中,輸入和輸出檔案可以是計算機檔案、管道、網路流、捕獲設備等,
2、FFmpeg用libavformat包呼叫解復用器(demuxers)來讀取輸入檔案中被編碼的資料包(packets),如果有多個輸入檔案,FFmpeg以有效輸入流的最小時間戳來同步,
3、然后解碼器(decoder)從已編碼的資料包中產生未被壓縮的幀(frame),在那之后呼叫可選的過濾器,
4、這些幀被傳遞到編碼器,編碼器會產生新的編碼包
5、把新的編碼包傳遞給復用器(muxer)處理并且把結果寫入到輸出檔案中,
五、FFmpeg的安裝
FFmpeg支持的常見平臺有:Linux、Windows、Mac OS等,
官網下載地址:https://www.ffmpeg.org/download.html
一般來說,為了方便,我們選擇下載靜態編譯的包,這樣可以放到任何位置多能正確的被執行,
但是通常來說,我們希望在任何位置打開終端都能運行 FFmpeg,這樣我們可以把 FFmpeg 的存放路徑添加至系統環境變數中,
接下來進行軟體的安裝,
#1.安裝x264庫
#下載libx264包,如果在視頻轉碼時不指定libx264格式,可能會出現轉換后的視頻或音頻不正常
git clone git://git.videolan.org/x264.git
#進行簡單配置,有些cpu不支持asm匯編陳述句,使能共享,使能多執行緒,使能pic
./configure --disable-asm --enable-shared --enable-pthread --enable-pic
#編譯
make
#安裝 【其實就是移動了庫檔案、可運行檔案的位置】
make install
#2.安裝ffmpeg
#可以在http://www.ffmpeg.org/download.html下載軟體包
wget https://ffmpeg.org/releases/ffmpeg-4.1.3.tar.bz2
#解壓軟體
tar -jxvf ffmpeg-4.1.3.tar.bz2
#切換目錄
cd ffmpeg-4.1.3/
#根據服務器進行配置,生成組態檔
./configure --disable-x86asm --enable-gpl --enable-libx264
#編譯
make
#安裝
make install
之后我們可以運行命令,可以通過ffmpeg -V 來測驗下是否成功
接下來我們進行測驗:
找到一個音頻檔案,例如a.mp4
執行如下:
ffmpeg -i ./e6a4aa70cb88294a364087ee98ecf502.avi -vcodec libx264 a.mp4
如果報錯:提示找不到libx264.so之類的錯誤,
解決方案:
1、將 /usr/local/lib/添加到/etc/ld.so.conf 檔案末尾
或者直接修改/etc/ld.so.conf ,【需要root權限】
echo “/usr/local/lib” >> /etc/ld.so.conf
2、使庫檔案的配置生效
ldconfig
#執行完畢后,然后測驗看是否可以正確轉碼,
六、音視頻的簡單處理
1、提取視頻 A 的背景音輸出為 B.mp3
ffmpeg -y -i A.mp4 -vn B.mp3
2、用 B.mp3 替換視頻 C 中的背景音
step1:提取 C 中的視頻,去除背景音,輸出為無聲的視頻 D
ffmpeg -i C.mp4 -vcodec copy -an D.mp4
step2:將新的背景音 B 合成到視頻 D 中生成新的視頻 F
ffmpeg -i D.mp4 -i B.mp3 -vcodec copy -acodec copy F.mp4
這里需要注意的是:
ffmpeg對cpu特別消耗,
因為音視頻的處理是一件非常消耗計算力的事情,通常一般情況下會消耗100%的cpu來處理這些事情,這會使得電腦的執行變得特別緩慢,機器性能嚴重受損,所以,通常情況下,我們要進行cpu的限制,
如通過加入 -threads 引數來實作這點,如限制 cpu 使用率在 50%,可以進行如下:
ffmpeg -i input.mp4 -threads 2 -vcodec h264 -acodec copy output.mkv
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291828.html
標籤:其他
