第二章 編譯FFmpeg並開啟H.264編碼

CyunZing發表於2024-07-17

目錄
  • 前言
  • 1. 下載x264
  • 2. 編譯x264
  • 3. 編譯FFmpeg
    • 3.1 可能出現的問題和解決方法
      • 3.1.1 ERROR: x264 not found using pkg-config
        • 解決方法:
      • 3.1.2 libx264 is gpl and --enable-gpl is not specified.
        • 解決方法:
  • 4. 檢查編譯結果

這裡我預設大家已經看過 第一章 FFmpeg初體驗:在Centos7.9下編譯FFmpeg!【如果沒有那還不趕緊去看!】

前言

FFmpeg本身並不支援H.264編碼器,而是採用整合第三方模組的方式來支援。要想在FFmpeg中開啟H.264編碼,可以採用x264和OpenH264這兩個編碼器。二者各有千秋,不過目前主流的H.264編碼器還是x264。

安裝環境:

作業系統 OpenEuler 22.03 LTS SP4
硬體記憶體 8G記憶體
硬碟大小 128G硬碟

1. 下載x264

git clone http://git.videolan.org/git/x264.git

2. 編譯x264

cd x264
./configure --enable-static --prefix=/usr/local/x264
  • --enable-static:這個選項告訴配置指令碼,在編譯x264庫時,應該生成靜態庫。靜態庫是包含在最終可執行檔案中的,這意味著當你的程式執行時,不需要單獨的庫檔案。
  • --prefix=/usr/local/x264是指定x264庫安裝後的根目錄。這意味著所有的檔案(包括庫檔案、標頭檔案、文件等)都會被安裝到/usr/local/x264目錄下。這樣做的好處是,可以將軟體安裝到非標準位置,從而避免與系統自帶軟體發生衝突或者在不影響系統其他部分的情況下輕鬆地解除安裝軟體。

3. 編譯FFmpeg

./configure --enable-libx264 --enable-gpl
  • --enable-libx264:這個選項告訴配置指令碼,在編譯過程中包含對x264編碼庫的支援。
  • --enable-gpl:這個選項表明你接受GNU通用公共許可證(GPL)。x264是按照GPL許可證釋出的,啟用這個選項是為了確保你的專案與x264庫的許可證相容。
make -j$(nproc) && make install
  • -j:這是 make 命令的一個選項,用於指定併發執行的任務數。-j 後面通常跟著一個數字,表示同時執行的作業數。
  • $(nproc) :這是一個 shell 命令替換,它會展開為當前系統上的處理器核心數。例如,如果系統有4個核心,那麼 -j$(nproc) 將展開為 -j4,告訴 make 同時執行4個編譯任務。這樣做可以顯著加快編譯速度,因為它充分利用了多核處理器的優勢。

3.1 可能出現的問題和解決方法

3.1.1 ERROR: x264 not found using pkg-config

image

解決方法:

由於我們使用--prefix指定了路徑,那麼我們已經知道了x264的安裝路徑是在/usr/local/x264

/usr/local/x264/lib/pkgconfig/目錄下有個x264.pc檔案,只需要將它複製到/usr/share/pkgconfig/下即可。(pkg-config預設會搜尋這個路徑)

cp /usr/local/x264/lib/pkgconfig/x264.pc /usr/share/pkgconfig/

3.1.2 libx264 is gpl and --enable-gpl is not specified.

image

解決方法:

只需要在configure後面再加上--enable-gpl就可以了。

如:

./configure --enable-libx264 --enable-gpl

因為x264是按照GPL許可證釋出的,啟用這個選項是為了確保能與x264庫的許可證相容。

4. 檢查編譯結果

ffmpeg -h encoder=libx264

返回結果:

Encoder libx264 [libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10]:
    General capabilities: dr1 delay threads
    Threading capabilities: other
    Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21 yuv420p10le yuv422p10le yuv444p10le nv20le gray gray10le
libx264 AVOptions:
....................................
....................................

如果返回結果是這樣就說明你的FFmpeg已經支援H.264編碼啦~

image

相關文章