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#
Av1an支援Linux與Windows系統,本身需要使用命令行操作。參考 Github說明安裝之。
撰文當下測試的系統:Arch Linux 6.4.4,CPU Intel I5-7400,Av1an版本0.4.1。
2.1. 套件管理員#
Arch Linux可以直接用套件管理員安裝Av1an:
sudo pacman -S av1an
2.2. 圖形化界面#
Linux系統需要GUI圖形化界面的可使用 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
- 這裡的原始影片
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)
- 以下轉檔指令參考 作者文件,追求速度快和保持品質。影片部份使用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"
- 轉檔首先會分析畫面,接著開始轉換,看到檔案變大莫驚慌,預估的檔案大小和時間會逐步減少。
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分以上判定為人眼不易分辨的程度,代表轉檔後影片品質並無顯著下降。