ffmpeg Linux 安裝 和運行


一、FFmpeg 簡介

FFmpeg 是一款開源的多媒體視頻處理工具,它有非常強大的功能包括視頻采集、視頻格式轉換、視頻抓圖、給視頻加水印等。
許多視頻播放處理軟件多是基於 FFmpeg 開發,包括暴風影音、QQ影音、PotPlaye 等。
注:FFmpeg 是以命令行的方式運行的,所以我們要在終端操作它。

二、音視頻基礎知識

1、封裝:封裝即我們常說的文件格式 mp4、avi、mkv、rmvb。它像是一個容器,里面會包含視頻、音頻、字幕等信息。
2、編碼:編碼的目的是為了存儲和壓縮。視頻和音頻會采用不同的編碼方式編碼后放進容器中。
常見的視頻編碼方式有h.264(HVC)、h.265(HEVC)、MPEG4、VC-1等,常見的音頻編碼方式有AAC、AC-3、MP3等。
注:封裝格式會限制編碼方式,如 rmvb 在視頻方面只支持 RealVideo 8, 9, 10 編碼的視頻,而 mkv 則支持所有編碼方式的音視頻。

三、FFmpeg 的安裝

我們到 FFmpeg 官網下載它,如下鏈接,它提供了 Linux、Windows、Mac OS 常見的三個平台的安裝包。
為了簡單我們選擇下載靜態編譯的包,這意味它可以放到任何位置多能正確的被執行。
但為了方便我們通常希望在任何位置打開終端都能運行 FFmpeg,這樣我們可以把 FFmpeg 的存放路徑添加至系統環境變量即可。
如在 Windows 平台,我們先將下載的靜態編譯包解壓放置到 C:\Program Files\FFmpeg 目錄,
然后將其可執行文件路徑 C:\Program Files\FFmpeg\bin 添加至系統環境變量里,添加方法如下鏈接介紹。
之后我們在任何位置打開終端都可以執行 FFmepg 命令了,Linux 和 Mac OS 平台類似,先下載,然后添加環境變量,即可完成安裝。
 
下面先進行軟件安裝。 
1.安裝x264庫
下載libx264包,如果在視頻轉碼時不指定libx264格式,可能會出現轉換后的視頻或音頻不正常
進行簡單配置,有些cpu不支持asm匯編語句,使能共享,使能多線程,使能pic
./configure --disable-asm --enable-shared --enable-pthread --enable-pic
編譯
make
安裝,其實就是移動了庫文件、可運行文件的位置
make install
2.安裝ffmpeg
http://www.ffmpeg.org/download.html下載軟件包,我下載的是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 -i ./e6a4aa70cb88294a364087ee98ecf502.avi -vcodec libx264 test.mp4
一般情況下,是會報錯的,提示找不到libx264.so之類的錯誤。

 

/usr/local/lib/添加到/etc/ld.so.conf 文件末尾或者直接修改/etc/ld.so.conf ,需要root權限
echo "/usr/local/lib" >> /etc/ld.so.conf 
使庫文件的配置生效
ldconfig
此時再試着運行命令,看是否可正確轉碼。可以看到服務器輸出轉碼成功。
ffmpeg -i ./e6a4aa70cb88294a364087ee98ecf502.avi -vcodec libx264 test.mp4
 

 

四、簡單的音視頻處理操作

4.1 視頻剪輯

任務:截取 A 視頻的 00:00 - 00:30 和 02:00 - 02:30 兩個片段重新拼接成新的視頻 B。
step1:截取 A 視頻 00:00 - 00:30 片段輸出為 A1
/*
* -ss 為指定起始時間
* -t 為指定持續的時長
* -i 為指定輸入的視頻文件
* -vcodec 為指定輸出視頻的編碼格式,這里為 copy 即不改變原來的編碼格式,可加快輸出速度
* -acodec 為指定輸出音頻的編碼格式,copy 意義同上
*/
ffmpeg -ss 00:00:00 -t 00:00:30 -i A.mp4 -vcodec copy -acodec copy A1.mp4
step2:截取 A 視頻 02:00 - 02:30 片段輸出為 A2
ffmpeg -ss 00:02:00 -t 00:00:30 -i A.mp4 -vcodec copy -acodec copy A2.mp4
setp3:拼接 A1 和 A2 輸出為 B
ffmpeg -f concat -i list.txt -c copy B.mp4
其中 list.txt 的內容如下:
file ./A1.mp4
file ./A2.mp4

4.2 提取或替換視頻背景音

任務:提取視頻 A 的背景音輸出為 B.mp3
ffmpeg -y -i A.mp4 -vn B.mp3
任務:用 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

4.3 視頻轉碼

這里有兩個轉換,一個封裝的轉換,一個編碼的轉換,我們常說的格式轉換即為封裝的轉換,
但編碼格式有時受限於封裝格式,所以有時也需要發生編碼格式的轉換。
若不想關心音視頻的編碼方式只想換種封裝格式,則可不指定編碼方式,如下將 mp4 轉為 mkv
ffmpeg -i input.mp4 output.mkv
當然我們知道 mkv 是支持任意的音視頻編碼方式,所以我們可以指定以 copy 的方式來轉換可以加快輸出速度,如下:
ffmepg -i input.mp4 -vcodec copy -acodec copy output.mkv
另外的要是我們的播放器受限只支持 h.264 編碼方式的視頻播放,那我們就可以指定輸出的視頻編碼方式,如下:
ffmpeg -i input.mp4 -vcodec h264 -acodec copy output.mkv
其他的我們不僅可以轉換視頻的封裝格式,和編碼方式,
我們也可以通過制定其他參數在改變視頻的分辨率、碼率、幀率等,了解更多可查看器幫助文檔。

五、小技巧

1、限制 ffmpeg 的 cpu 使用率
視頻處理是一件非常消耗計算力的事情,通常 ffmpeg 會消耗 100% 的 cpu 來做這些事情,
如果你使用的是筆記本,而視頻又比較大,100% 的 cpu 使用持續不了幾分鍾,筆記本的風扇就要狂轉,
所以我們情願多花點時間也不願意把電腦熱壞了,這可以通過限制 ffmpeg 的 cpu 使用率來降低筆記本的負擔。
我們通過加入 -threads 參數來實現這一點,如限制 cpu 使用率在 50%,則我們這樣做:
ffmpeg -i input.mp4 -threads 2 -vcodec h264 -acodec copy output.mkv
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM