Ubuntu安裝ffmpeg轉檔輸出AV1

因應4K與8K影音流行,傳統H.264編碼已不敷使用,進而出現H.265高效編碼格式來提高解析度與顏色深度支援,然而授權金高昂的問題,Google、Netflix等網路巨擎透過VP9延伸開源的先進影音編碼格式,有著比VP9更高的壓縮效率與畫質,先前習慣在本地Windows執行編碼,後來覺得資源實在不堪負荷轉向雲端主機來操作。

透過雲端運算方案輸出AV1

由於部分預設ffmpeg尚未將AV1編碼納入,需要在安裝時額外帶入設定檔來處理,過程稍微麻煩,好在網上已經有合適的腳本可以直接運行。

在ubuntu20.04終端介面安裝新版ffmpeg

從遠端載入安裝腳本到雲端主機

sudo wget https://gist.githubusercontent.com/sparrc/026ed9958502072dda749ba4e5879ee3/raw/212d434806bca11ec696c97199f6ad1ed00f9950/install-ffmpeg.sh

#或備用節點(上下兩個來源擇一下載即可)

sudo wget https://dl.dropboxusercontent.com/s/gcl6ai2wseefs8b/install-ffmpeg.sh


#改檔案權限

sudo chmod +x install-ffmpeg.sh


#執行腳本安裝

sudo ./install-ffmpeg.sh


#轉檔av1範例,先載入影片檔案到雲端主機

wget https://odysee.com/$/download/1080ph264/3e37d5c2aa0ac94c87f25cc115790accfa328785


#由於範例檔名稱有點問題,我們可以重新命名

mv 3e37d5c2aa0ac94c87f25cc115790accfa328785 h264.mp4


#轉檔av1指令,-threads為線程數,-crf質量介於0~63之間(27高畫質、33一般畫質、39低畫質)數值越大質量越低,h264.mp4為輸入範例檔,av1.mp4為輸出檔案命名

~/bin/ffmpeg -i h264.mp4 -c:v libaom-av1 -crf 39 -b:v 0 -threads 2 av1.mp4

#須注意~/bin/ffmpeg路徑如果顯示不存在,可能是配置到root帳戶底下,指令開頭應改成sudo /root/bin/ffmpeg,此時請留意檔案讀寫權限避免輸出後無法取回

接著比較看看兩台輸出的性能差異,分別啟用GCP的N2機種(intel)與N2D機種(AMD),資源均劃分雙核心與2GB記憶體、10GB的SSD空間,比較出純CPU轉檔來說N2D機種輸出AV1較為快速。

N2機種

N2D機種
同樣輸出前22影格,intel機器跑0.00372x,AMD機器跑0.0045x,相比之下性能提升約1.2倍(120%),但實際費用AMD的N2D卻比較便宜,希望GCP性價比能越來越好。

2022/3/28更新
FFmpeg 5.0版上線由Netflix與Intel開發多線程優化編碼的SVT-AV1套件,在Ubuntu可透過編譯方式啟用,或透過第三方ppa來源安啟用SVT-AV1套件的ffmpeg

經過嘗試將原指令
ffmpeg -i h264.mp4 -c:v libaom-av1 -crf 39 -b:v 0 -threads 16 av1.mp4

修改為
ffmpeg -i h264.mp4 -c:v libsvtav1 -crf 39 -b:v 0 -threads 16 av1.mp4

建議參數
ffmpeg -i h264.mp4 -c:a copy -c:v libsvtav1 -preset 5 -crf 30 -threads 16 av1.mp4

編碼速度約能提升25~50倍不等,4K影片在AMD平台8核心編碼能達到1X編碼性能(此時libaom-av1約0.02到0.04之間),每秒輸出一秒多的影片可用性大幅提高。

2022/3/29更新
28日提供的ppa安裝方案經測試無法輸出超過9分15秒的視頻,
測試多種一鍵安裝腳本在Ubuntu20.04都有安裝失敗的紀錄,
故整理ffmpeg官網與SVT-AV1編譯的指令如下。

先從ffmpeg官網安裝相關套件。
sudo apt-get update -qq && sudo apt-get -y install \
  autoconf \
  automake \
  build-essential \
  cmake \
  git-core \
  libass-dev \
  libfreetype6-dev \
  libgnutls28-dev \
  libmp3lame-dev \
  libsdl2-dev \
  libtool \
  libva-dev \
  libvdpau-dev \
  libvorbis-dev \
  libxcb1-dev \
  libxcb-shm0-dev \
  libxcb-xfixes0-dev \
  meson \
  ninja-build \
  pkg-config \
  texinfo \
  wget \
  yasm \
  zlib1g-dev
 
針對Ubuntu20.04系統版本安裝相關套件。 
sudo apt install libunistring-dev libaom-dev

創建資料夾
mkdir -p ~/ffmpeg_sources ~/bin

接著從SVT-AV1的GitLab編譯資源。
git clone --depth=1 https://gitlab.com/AOMediaCodec/SVT-AV1.git
cd SVT-AV1
cd Build
cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
make -j $(nproc)
sudo make install

編譯ffmpeg並啟用libsvtav1套件。
git clone --depth=1 https://github.com/FFmpeg/FFmpeg ffmpeg
cd ffmpeg
export LD_LIBRARY_PATH+=":/usr/local/lib"
export PKG_CONFIG_PATH+=":/usr/local/lib/pkgconfig"
./configure --enable-libsvtav1
make -j $(nproc)

測試家目錄底下的視頻輸出為av1視頻。
~/SVT-AV1/Build/ffmpeg/ffmpeg -i h264.mp4 -c:v libsvtav1 -crf 39 -b:v 0 -threads 16 av1.mp4

留言

這個網誌中的熱門文章

紅米手機MIUI設置SD卡為延伸儲存空間