快轉到主要內容

使用開源工具將圖片影片轉檔成AVIF或AVIFS

分類   Linux系統 Linux好用軟體
標籤   AOMedia Video 1
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

🇺🇸 English version

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安裝。

名稱說明下載點
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

相關文章

Av1an:將影片轉檔成AV1編碼的工具
分類   Linux系統 Linux好用軟體
標籤   AOMedia Video 1 Video Transcoding VapourSynth
嘗試在Linux使用手寫輸入中文字
分類   Linux系統 Linux好用軟體
標籤   Input Method
Mkchromecast,投放Linux電腦螢幕和影片到Chromecast的方法
分類   Linux系統 Linux好用軟體
標籤   Chromecast PipeWire

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。