跳至主要内容

FFmpeg:轉 AV1

AV1 在同樣畫質下檔案比 H.264 小很多,但不是每支影片轉了都會變小,建議先取樣試轉再決定。

1. 安裝​

需要有 libsvtav1(SVT-AV1)的 FFmpeg,只有 libaom-av1 會很慢。

Windows:要裝 full 版(essentials 版沒有),winget 的 Gyan.FFmpeg 就是 full 版。

winget install Gyan.FFmpeg
ffmpeg -hide_banner -encoders | findstr av1

Linux:用套件管理員安裝。較舊的發行版可能沒有 SVT-AV1,可改用 BtbN 靜態編譯版(linux64-gpl)。

sudo apt install ffmpeg
ffmpeg -hide_banner -encoders | grep av1

有看到 libsvtav1 就對了。

2. 轉檔​

ffmpeg -i input.mp4 ^
-c:v libsvtav1 -preset 5 -crf 26 -pix_fmt yuv420p -g 240 ^
-c:a copy -movflags +faststart ^
output.mp4
參數用途
-preset 50–13,越小越慢、壓得越好,5–6 是平衡點
-crf 260–63,越小畫質越好,預設 35,收藏用 24–26
-pix_fmt yuv420p輸出 8-bit,相容性最好
-g 240關鍵影格間隔,24fps 約 10 秒一個,拖曳比較跟手
-c:a copy音訊直接沿用

實測 Ryzen 5 3600、1080p,約 2 倍即時速度(2 小時影片約 50 分鐘)。

3. 先取樣,再決定要不要轉​

來源不同,結果差很多(crf 26):

來源H.264AV1
演唱會(高碼率)約 6 Mbps只剩 9–19%
花絮(雜訊多)約 1.7 Mbps反而大 5 成
網路影片(低碼率)約 0.75 Mbps大了約 15%

高碼率的 H.264 最值得轉;低碼率、雜訊多,或已經是 AV1 / HEVC 的就別轉了。

取 30 分鐘處的 60 秒,分別轉 AV1 和直接剪出原檔,比較兩個檔案大小:

ffmpeg -ss 1800 -i input.mp4 -t 60 -map 0:v:0 -c:v libsvtav1 -preset 5 -crf 26 sample_av1.mp4
ffmpeg -ss 1800 -i input.mp4 -t 60 -map 0:v:0 -c copy sample_src.mp4

再用 VMAF 檢查畫質,93 分以上肉眼就很難分辨:

ffmpeg -ss 1800 -t 60 -i input.mp4 -i sample_av1.mp4 ^
-lavfi "[0:v]setpts=PTS-STARTPTS[ref];[1:v]setpts=PTS-STARTPTS[dist];[dist][ref]libvmaf" ^
-f null -

VMAF 對雜訊被抹平比較不敏感,分數之外最好還是自己看一下樣本。