快轉到主要內容

如何將圖片影片轉檔成AVIF / AVIFS

Linux系統 Linux好用軟體 AOMedia Video 1
🗓️ 民國111年 壬寅年
✍ 切換正體/簡體字
目錄

🇺🇸 English version

Convert images or videos to AVIF/AVIFS。

本文列出一些轉檔XX格式為AVIF/AVIFS的指令供參考教學,文末提供將AVIF轉回JPEG/PNG的指令。

下面是一張AVIF動圖,用Chromium系瀏覽器應可正常瀏覽。

AVIF (副檔名.avif)是新一代的圖片壓縮格式,提供更高效壓縮率和更好的圖像品質,並且有效減少檔案容量,支援透明圖層。此外AVIF也支援無損壓縮。

AVIF另支援動圖(animated pictures),稱之為image sequence,跟AV1編碼淵源頗深。有時候AVIF動圖副檔名會用.avifs.avis,但瀏覽器和圖片檢視器應會自動判別,因此使用.avif當副檔名就好。

目前2022年,所有瀏覽器與主流作業系統皆支援AVIF。以Chromium為基礎開發的Google Chrome、Microsoft Edge瀏覽器皆支援AVIF動圖;使用Gecko排版引擎的Firefox還無法顯示。

1. 需要的工具
#

作業系統:Arch Linux

以下是本篇文章會用到的軟體,全都是開源跨平台的,Arch請直接用pacman安裝。

名稱說明下載點
libavifAVIF函式庫Github
rav1eAV1編碼器Github
aomAV1編碼器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不支援動圖轉影片。所以要繞點圈子,步驟如下。

  1. 將webp的畫格抽取成一張張的png:
magick convert input.webp -coalesce input%05d.png
  1. 再將PNG合成為MP4,使用AV1編碼
ffmpeg -framerate 30 -pattern_type glob -i '*.png' -c:v libxaom -pix_fmt yuv420p output.mp4
  1. 最後用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動圖。

  1. 如果不是AV1編碼,使用Av1an將影片轉成AV1編碼(提高cq-level數值以換取更小檔案), 詳細討論
av1an -i "input.mp4" -v "--end-usage=q --cpu-used=6 --threads=8 --cq-level=30"
  1. 再用FFMPEG將MKV原封不動轉成MP4並刪除音訊
ffmpeg -i input_aom.mkv -c copy -an output.mp4
  1. 用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

相關文章

GIMP圖片去背教學,智慧型選取的應用
Linux系統 Linux好用軟體 GIMP Background Remover
FreeBSD安裝Steam + Steam Proton遊戲相容層教學
Linux系統 Linux好用軟體 Wine FreeBSD Steam
安裝Alpine Linux為桌面系統教學 (XFCE4 + 中文輸入法)
Linux系統 Linux系統安裝教學 Alpine Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。