AVIF 圖片格式完全指南:比 WebP 再小 30% 的下一代圖片格式
AVIF:圖片壓縮的新王者
AVIF(AV1 Image File Format)基於 AV1 視訊編碼技術,是 WebP 之後的下一代圖片格式。
| 格式 | 編解碼器 | 同品質體積 | 瀏覽器支援 |
|---|---|---|---|
| JPEG | libjpeg | 基準 | 全部 |
| WebP | VP8 | -25~35% | 97%+ |
| AVIF | AV1 | -50~60% | 92%+ |
| PNG | deflate | 3-5x JPEG | 全部 |
關鍵數據:同等 SSIM 品質下,AVIF 比 WebP 再小 20-30%,比 JPEG 小 50-60%。
為什麼 AVIF 這麼小?
AV1 編碼的優勢
- 畫面內預測:利用圖片內部的空間冗餘
- 變換編碼:支援 4×4 到 64×64 的變換區塊
- 量化矩陣:更精細的頻率域量化
- Film Grain 合成:分離膠片顆粒,用參數描述而非像素儲存
失真 vs 無失真
| 模式 | 體積對比 | 適用情境 |
|---|---|---|
| 失真 (CQ 30) | JPEG 的 40% | 照片、螢幕截圖 |
| 失真 (CQ 50) | JPEG 的 25% | 縮圖、預覽 |
| 無失真 | PNG 的 50-60% | 圖示、UI 素材 |
| 失真 + Alpha | PNG 的 30% | 需透明度的照片 |
瀏覽器相容性(2026 年)
| 瀏覽器 | AVIF 支援 | 版本 |
|---|---|---|
| Chrome | ✅ | 85+ |
| Firefox | ✅ | 93+ |
| Safari | ✅ | 16+ |
| Edge | ✅ | 85+ |
| Samsung Internet | ✅ | 15+ |
| IE | ❌ | 不支援 |
覆蓋率 92%+,可放心用於生產環境。
降級策略
<picture>
<source srcset="photo.avif" type="image/avif">
<source srcset="photo.webp" type="image/webp">
<img src="photo.jpg" alt="照片" loading="lazy">
</picture>
瀏覽器依順序選擇第一個支援的格式。
使用工具庫轉換 AVIF
操作步驟
- 開啟 圖片格式轉換工具
- 上傳圖片(支援 JPG、PNG、WebP、GIF)
- 選擇輸出格式為 AVIF
- 調整品質參數:
- 高品質 (CQ 20-30):幾乎無失真,體積減 40-50%
- 均衡 (CQ 35-50):適合大多數情境,體積減 50-60%
- 高壓縮 (CQ 55-70):縮圖/預覽,體積減 60-80%
- 下載轉換結果
轉換效果參考
| 原圖 | 原始大小 | AVIF (CQ 35) | 壓縮率 | SSIM |
|---|---|---|---|---|
| 風景照片 (4K) | 8.2MB | 1.1MB | 87% | 0.95 |
| 人像照片 | 3.5MB | 0.5MB | 86% | 0.94 |
| UI 截圖 | 1.2MB | 0.15MB | 88% | 0.97 |
| 圖示 (PNG+Alpha) | 45KB | 12KB | 73% | 1.00 |
AVIF 的特殊能力
Alpha 通道(透明度)
AVIF 支援失真壓縮 + Alpha 通道,這是 JPEG 不具備的:
PNG (透明) 45KB → AVIF (透明, CQ 35) 12KB → 體積減 73%
HDR / 廣色域
AVIF 支援 PQ 和 HLG 兩種 HDR 傳遞函式,以及 BT.2020 廣色域:
| 特性 | JPEG | WebP | AVIF |
|---|---|---|---|
| 色深 | 8-bit | 8-bit | 8/10/12-bit |
| 色域 | sRGB | sRGB | sRGB / BT.2020 |
| HDR | ❌ | ❌ | ✅ PQ/HLG |
| Alpha | ❌ | ✅ | ✅ |
動畫
AVIF 支援動畫序列(AVIS),類似動畫 WebP:
動畫 GIF 2.5MB → 動畫 WebP 0.8MB → 動畫 AVIF 0.5MB
命令列轉換
使用 libavif (avifenc)
# 安裝
# macOS: brew install libavif
# Ubuntu: apt install libavif-bin
# 基礎轉換
avifenc input.jpg output.avif
# 指定品質 (0-63, 越小品質越高)
avifenc -q 30 input.jpg output.avif
# 無失真壓縮
avifenc --lossless input.png output.avif
# 指定速度 (0-10, 越慢壓縮越好)
avifenc -q 35 -s 6 input.jpg output.avif
使用 ImageMagick
# 轉換為 AVIF
magick input.jpg -quality 65 output.avif
# 批次轉換
magick mogrify -format avif -quality 65 *.jpg
Nginx 自動轉換
# 動態將 JPEG 轉為 AVIF 回傳
map $http_accept $avif_suffix {
"~*image/avif" ".avif";
}
server {
location ~* ^/.+\.(png|jpg|jpeg)$ {
add_header Vary Accept;
try_files $uri$avif_suffix $uri =404;
}
}
用戶端支援 AVIF 時,自動回傳 .avif 版本(需預先產生)。
最佳實踐
- 使用
<picture>降級:AVIF → WebP → JPEG 三級降級 - 品質參數選 35-50:大多數情境的最佳平衡點
- 預先產生而非動態轉換:建置時產生,避免伺服器 CPU 開銷
- 照片用 AVIF,圖示用 SVG:向量圖不適合 AVIF
- 透明圖片用 AVIF:取代 PNG,體積減 70%+
- CDN 設定自動轉換:Cloudflare Image Resizing / CloudFront 支援依 Accept 標頭自動回傳 AVIF
#AVIF#图片格式#WebP#压缩#图片优化