將影片用Av1an轉檔成AV1編碼,可在維持影片品質的情況下,大大減少影片容量。
影片壓縮後有助於網際網路傳輸,參考VMAF的分數下,轉檔後的畫面品質也沒有降低很多。
本文將講解Av1an轉檔指令的用法,段落#4有實際例子,並用VMAF分數評比轉檔的影片品質好壞。
1. 選擇AV1理由
AV1(AOMedia Video 1)是新一代的影片編碼格式,由AOMedia組織開發,開源且免授權金,主要跟H.265(HEVC)競爭。目前有Youtube和Netflix使用,可有效減少串流影片的檔案大小。
手機和電腦上的VLC、MPV、Chromium系瀏覽器皆支援硬體解碼播放AV1編碼的影片。

為簡化AV1影片的轉檔流程,Av1an出現了。這是一套用Rust寫成的命令行影片轉檔框架,支援各大作業系統。提供超可適性視訊編碼,支援以VMAF評估輸出影片品質和套用VapourSynth指令稿,還可以中途暫停日後繼續轉檔。
Av1an內建的編碼器有AOM、SVT-AV1、rav1e、VP8、VP9、H.264(AVC)、H.265(HEVC)。
2. 安裝Av1an
Av1an需要使用命令行操作。從下面擇一方法安裝之。
2.1. Windows執行檔
Windows版exe可到Github relsease下載,在exe所在位置按Shift右鍵開啟終端機即可執行指令。
2.2. Linux套件管理員
Arch Linux可以直接用套件管理員安裝Av1an:
|
|
2.3. 用Rust cargo安裝
電腦必須先裝有Rust環境,才能執行此指令:
|
|
2.4. 用Docker跑
安裝Docker後。在目前的目錄建立Videos
目錄,並將input.mp4
放進去,再切換至該目錄拉取masterofzen/av1an
的映像。
|
|
3. Av1an轉檔指令
Av1an轉檔後的影片一律會變成.mkv格式。
Av1an指令基本用法如下,只提供影片檔的參數,其他使用預設值轉檔。
|
|
可以進一步使用其他參數指定要使用的編碼器、輸出目錄等。
詳細的參數用法請參考原作者寫的文件,下面說明比較重要的參數。
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:
|
|
3.2. Target Quality模式
不事前猜想適合的CQ/CRF數值,而以Netflix提出的VMAF影片品質評估工具為依歸,指定一個分數,再讓演算法計算出適合CQ/CRF數值的轉檔模式。
VMAF預設是以1920x1080解析度下去計算,分數越高代表影片品質越好,93~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秒。
|
|
- 以下轉檔指令參考作者文件,追求速度快和保持品質。影片部份使用Q模式,cq-level為22;使用6核CPU和64執行緒確保速度;音訊則轉換為開源的opus格式,取樣率48000Hz,啟用VBR。
|
|
- 轉檔首先會分析畫面,接著開始轉換,看到檔案變大莫驚慌,預估的檔案大小和時間會逐步減少。
4核心的Intel i5-7400 CPU轉檔花了3小時。原始影片692.8MB → 轉檔後489.1MB,影片格式一律會轉為MKV。
|
|
從其他的測試結果來看,檔案越大縮小效果越明顯。比方說3GB影片檔可以縮小到1GB以內。
不過,AV1的編碼器跟H264/H.265比起來仍比較慢,這是目前市面上AV1編碼器的通病。
最後用ffmpeg 5.1.2配合VMAF評比分數:
|
|
得到97分成績。VMAF在93~95分以上判定為人眼不易分辨的程度,代表轉檔後影片品質並無顯著下降。