Convert images or videos to AVIF or animated AVIF (AVIFS)。
本文Ivno列出一些轉檔XX格式為AVIF/AVIFS的開源工具供參考,並提供將AVIF轉回JPEG/PNG的方法。
AVIF (副檔名.avif
) 是2019年出現的新一代網路圖片格式,圖片壓縮後比JPEG品質要好,且壓縮效率更高,有效減少檔案容量。AVIF尚支援透明圖層、無損壓縮、10-bit位元深度。
例如下面是一張AVIF圖片,用Chromium系瀏覽器應可正常瀏覽。
AVIF另支援製作動圖(animated AVIF),稱之為image sequence,跟AV1影片編碼淵源頗深。有時候AVIF動圖副檔名會用.avifs
或.avis
,但瀏覽器和圖片檢視器應會自動判別,因此使用.avif
當副檔名就好。
下面是一張AVIF動圖,用Chromium系瀏覽器開新視窗應可正常播放。
目前所有瀏覽器與主流作業系統皆支援AVIF。最新版Chromium系和Firefox都可以顯示AVIF動圖了。
1. 圖形轉檔工具#
GIMP 2.10支援處理AVIF格式的圖片,可以匯入AVIF與輸出AVIF,或是將AVIF轉檔成PNG/JPEG格式。但是不支援AVIF動圖。
點選檔案 → 開啟,選取圖片,再點選匯出(Export),選取HEIF/AVIF格式即可。
同上, Krita 5.2.3也可以處理AVIF格式的圖片。但是不支援AVIF動圖。
瀏覽器擴充功能 WebP / Avif image converter則是可以在下載網頁圖片的時候自動把AVIF轉成JPEG格式。
若要處理AVIF動圖,建議使用指令轉檔。
2. 指令轉檔工具#
1. 前置條件#
作業系統:Ubuntu
以下是本篇文章會用到的軟體,全都是開源跨平台的,Ubuntu請直接用APT安裝。
名稱 | 說明 | 下載點 |
---|---|---|
libavif | AVIF函式庫 | Github |
rav1e | AV1編碼器 | Github |
aom | AV1編碼器 | Google git |
imagemagick | 影像處理工具 | 官網 |
ffmpeg | 視訊處理工具 | 官網 |
gpac | 視訊處理工具 | Github |
av1an | 視訊處理工具 | Github |
2. GIF轉AVIF#
用ffmpeg將GIF轉成未壓縮的yuv,再丟給avifenc編碼成AVIF。
ffmpeg -i input.gif -strict -1 -f yuv4mpegpipe -pix_fmt yuva444p - | avifenc --stdin output.avif
3. JPEG / PNG 轉AVIF#
Image Magick支援轉換靜態圖片為AVIF,並且可以設定品質。
因為JPEG(JPG)圖片多半有壓縮過,轉AVIF維持90%品質。
magick convert input.jpeg -quality 90% output.avif
PNG轉AVIF可使用50%品質,能大幅縮小檔案容量
magick convert input.png -quality 50% output.avif
批次大量轉檔的指令:
magick mogrify -format avif -quality 90 -type truecolor -alpha on *.png
4. WebP (靜態) 轉AVIF#
WebP轉AVIF使用50%品質,容量縮小不明顯
magick convert input.webp -quality 50% output.avif
5. WebP (動圖) 轉AVIF#
WebP轉AVIF可以縮小圖片容量。
目前沒有工具能直接轉換,FFMPEG不支援動圖轉影片。所以要繞點圈子,步驟如下。
- 將webp的畫格抽取成一張張的png:
magick convert input.webp -coalesce input%05d.png
- 再將PNG合成為MP4,使用AV1編碼
ffmpeg -framerate 30 -pattern_type glob -i '*.png' -c:v libxaom -pix_fmt yuv420p output.mp4
- 最後用MP4Box將MP4轉成AVIF
MP4Box -add-image output.mp4:id=1:primary -new output.avifs
MP4Box -ab avis -ab msf1 -ab miaf -ab MA1B -rb mif1 -brand avis output.avifs
MP4Box -add output.mp4:hdlr=pict:ccst:name="GPAC avifs" output.avifs
6. MP4/WebM 影片轉AVIF動圖#
AVIF(S)的動圖編碼器為AV1,跟MP4一樣只是影片容器,所以有些瀏覽器會直接把它認成MP4。
任何影片格式(mp4、mkv、webm、avi、mov…) 需要先確認影片編碼器是AV1,才可以用MP4Box轉成AVIF動圖。
- 如果不是AV1編碼,使用Av1an將影片轉成AV1編碼(提高
cq-level
數值以換取更小檔案), 詳細討論
av1an -i "input.mp4" -v "--end-usage=q --cpu-used=6 --threads=8 --cq-level=30"
- 再用FFMPEG將MKV原封不動轉成MP4並刪除音訊
ffmpeg -i input_aom.mkv -c copy -an output.mp4
- 用MP4Box將MP4轉成AVIF(S)
MP4Box -add-image output.mp4:id=1:primary -new output.avifs
MP4Box -ab avis -ab msf1 -ab miaf -ab MA1B -rb mif1 -brand avis output.avifs
MP4Box -add output.mp4:hdlr=pict:ccst:name="GPAC avifs" output.avifs
7. AVIF轉檔為JPEG/PNG#
AVIF要轉為JEPG和PNG很簡單,把Image Magick的指令倒轉即可。
AVIF轉JPEG:
magick convert input.avif -quality 90% output.jpeg
AVIF轉PNG可保留透明度:
magick convert input.avif -quality 90% output.png