快轉到主要內容

Av1an:將影片轉檔成AV1編碼的工具

Linux系統 Linux好用軟體 AOMedia Video 1 Video Transcoding VapourSynth
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

Av1an是由Zen開發的開源影片轉檔框架,可將影片用多種編碼器轉檔成AV1編碼的影片。

將影片用Av1an轉檔成AV1編碼,可在維持影片品質的情況下,大大壓縮並減少影片容量,有助於網際網路傳輸;此外在參考VMAF的分數下,轉檔成AV1的影片畫面品質也沒有降低很多。

本文將講解Av1an轉檔指令的用法,段落#4有實際例子,並用VMAF分數評比轉檔的影片品質好壞。

1. 選擇AV1理由
#

AV1(AOMedia Video 1)是新一代的影片編碼格式,由AOMedia組織開發,開源且免授權金,主要跟H.265(HEVC)競爭。目前有Youtube和Netflix使用,可有效減少串流影片的檔案大小。

手機和電腦上的VLC、MPV、Chromium系瀏覽器皆支援硬體解碼播放AV1編碼的影片。

為簡化AV1影片的轉檔流程,Av1an出現了。這是一套用Rust寫成的命令行影片轉檔框架,支援各大作業系統。提供超可適性視訊編碼(Scalable Video Coding),支援套用VapourSynth指令稿,還可以中途暫停日後繼續轉檔。

要評比轉檔後品質好壞的話,使用VMAF評估輸出影片品質。

Av1an內建的編碼器有AOM、SVT-AV1、rav1e、VP8、VP9、H.264(AVC)、H.265(HEVC)。

2. 安裝Av1an
#

撰文當下測試的系統:Arch Linux 6.4.4,CPU Intel I5-7400,Av1an版本0.4.1。

Av1an支援Linux與Windows系統,本身需要使用命令行操作。參考 Github說明安裝之。

2.1. 套件管理員
#

Arch Linux可以直接用套件管理員安裝Av1an:

sudo pacman -S av1an

2.2. 圖形化界面
#

Linux系統需要GUI圖形化界面的可使用 rAV1ator Aviator,本質上是av1an的前端封裝,可以加入自訂轉檔參數。

rAV1ator使用Av1an,Aviator使用SVT-AV1。

二者需要透過 Flatpak安裝。

2.3. 用Docker跑
#

安裝 Docker後。在目前的目錄建立Videos目錄,並將input.mp4放進去,再切換至該目錄拉取masterofzen/av1an的映像。

sudo docker run --privileged -v "$(pwd)" --user $(id -u):$(id -g) -it --rm masterofzen/av1an:latest -i input.mp4 [參數]

3. Av1an轉檔指令
#

Av1an轉檔後的影片一律會變成.mkv格式。

Av1an指令基本用法如下,只提供影片檔的參數,其他使用預設值轉檔。

av1an [參數] -i <影片檔案>

可以進一步使用其他參數指定要使用的編碼器、輸出目錄等。

詳細的參數用法請參考 原作者寫的文件,下面說明比較重要的參數。

3.1. 參數解說
#

-i <影片檔案>的參數之後,使用--encoder參數指定要使用的編碼器,不填寫的話預設為aom。


--video-params參數設定影片編碼的細部參數,以引號""框起來。由於參數是直接傳給編碼器,故不相容ffmpeg的語法。

以aom編碼器來說,影片的參數--end-usage壓縮模式有CBR、VBR、Quality、Constrained Quality。

--end-usage壓縮模式預設是cbr(固定位元速率)。

--end-usage另一個壓縮模式為vbr(可變數位元速率),預設是2 pass mode。

VBR 2 pass能進一步減少檔案大小,然而VBR比CBR長很多,不建議使用。

Quality和Constrained Quality壓縮模式下又有cq-level參數,預設為30,cq-level數值越高檔案越小,但畫質越差。

此外,可用--target-bitrate設定位元率(kbps),--bit-depth設定位元深度,預設為aom從原始影片判斷得來,建議值為10(bit)。--cpu-used指定要使用的CPU核心數目,--threads指定使用的CPU線程數。


除了影片之外,尚有--audio-params參數可以設定轉檔音訊的參數。不填的話則是從原始影片直接複製。

參數同樣需要用引號框起來。此處的參數相容ffmpeg的語法。

例如將輸入影片的音訊轉為開源的opus格式,取樣率為常見的48000Hz:

--audio-params="-c:a libopus -b:a 48000"

3.2. Target Quality模式
#

不事前猜想適合的CQ/CRF數值,而以Netflix提出的 VMAF影片品質評估工具為依歸,指定一個分數,再讓演算法計算出適合CQ/CRF數值的轉檔模式。

VMAF預設是以1920x1080解析度下去計算,分數越高代表影片品質越好,93~95分以上人眼就會難以分辨轉檔後的品質差異。

範例指令如下:

av1an -i input.mkv --target-quality 95

3.3. 如何選擇AV1編碼器
#

AV1編碼器關乎轉檔速度與壓縮品質,目前主要有這三個:aomenc、SVT-AV1、rav1e。

名稱簡介
aomenc又稱libaom,最早基於Google的libvpx開發,是AV1官方的參考實作。
SVT-AV1由Intel與Netfelix共同研發的編碼器,已被AOMedia所接納,作為未來編碼器的發展方向。
rav1e原由Mozilla開發,現由VLC維護的編碼器,基於Xiph的編碼器所開發,注重簡潔。

根據Reddit r/AV1板上網友的總結:

壓縮品質最佳到最差(壓縮太差會丟失影片細節):
#1 rav1e
#2 aomenc
#3 SVT-AV1

編碼速度最快到最慢:
#1 SVT-AV1
#2 aomenc
#3 rav1e

ffmpeg的Wiki也說即使rav1e宣稱是最快速的AV1編碼器,但其實很吃設定檔。

所以我個人會選擇速度與品質居於中間的aomenc。

4. 實測將H.264影片轉檔成AV1
#

我想將一部影片轉檔成方便用於串流播放的AV1格式,並保持音訊高音質。

  • 作業系統:Arch Linux
  • CPU: 4核心Intel i5-7400

  1. 這裡的原始影片input.mkv資訊如下,採用H.264編碼,解析度1920x1080,影片大小692.8MB,時間長度23分鐘59秒。
General
Complete name                            : input.mp4
Format                                   : MPEG-4
File size                                : 693 MiB
Overall bit rate mode                    : Variable
Overall bit rate                         : 4 036 kb/s

Video
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Bit rate                                 : 3 936 kb/s
Maximum bit rate                         : 28.3 Mb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS

Audio
Format                                   : AAC LC
Bit rate mode                            : Variable
Bit rate                                 : 96.0 kb/s
Maximum bit rate                         : 120 kb/s
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
  1. 以下轉檔指令參考 作者文件,追求速度快和保持品質。影片部份使用Q模式,cq-level為22;使用6核CPU和64執行緒確保速度;音訊則轉換為開源的opus格式,取樣率48000Hz,啟用VBR。
av1an -i "input.mp4" --video-params="--end-usage=q --cq-level=22 --bit-depth=10 --lag-in-frames=35 --enable-fwd-kf=1 --enable-qm=1 --enable-chroma-deltaq=1 --quant-b-adapt=1 --mv-cost-upd-freq=2 --tile-columns=2 --tile-rows=1 --cpu-used=6 --threads=64" --audio-params="-c:a libopus -b:a 48000 -vbr:a on"
  1. 轉檔首先會分析畫面,接著開始轉換,看到檔案變大莫驚慌,預估的檔案大小和時間會逐步減少。

4核心的Intel i5-7400 CPU轉檔花了3小時。原始影片692.8MB → 轉檔後489.1MB,影片格式一律會轉為MKV。

Complete name                            : input_aom.mkv
Format                                   : Matroska
File size                                : 489 MiB
Overall bit rate                         : 2 849 kb/s

Video
ID                                       : 1
Format                                   : AV1
Format/Info                              : AOMedia Video 1
Format profile                           : [email protected]
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 10 bits

Audio
ID                                       : 2
Format                                   : Opus
Codec ID                                 : A_OPUS
Channel(s)                               : 2 channels
Channel layout                           : L R
Sampling rate                            : 48.0 kHz
Bit depth                                : 32 bits

從其他的測試結果來看,檔案越大縮小效果越明顯。比方說2GB影片檔可以縮小到1GB以內。

不過,AV1的編碼器跟H264/H.265比起來仍比較慢,後者可能一小時就轉檔好了,這是目前市面上AV1編碼器的通病。

最後用ffmpeg 5.1.2配合VMAF評比分數:

ffmpeg -i input_aom.mkv -i input.mkv -filter_complex libvmaf -f null -

得到97分成績。VMAF在93~95分以上判定為人眼不易分辨的程度,代表轉檔後影片品質並無顯著下降。

參考資料
#

相關文章

如何將圖片影片轉檔成AVIF / AVIFS
Linux系統 Linux好用軟體 AOMedia Video 1
Linux系統安裝Google Chrome瀏覽器的方法
Linux系統 Linux好用軟體 Linux
Linux系統安裝QQ電腦版3.0
Linux系統 Linux好用軟體 Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。