您是否曾在 Imgur 或 Gfycat 等服務上看到 GIF 動畫,並在開發人員工具中檢查,結果發現該 GIF 其實是影片?這是因為有充分的理由。GIF 動畫可能非常大。

幸好,在載入效能方面,您只要付出相對較少的心力,就能獲得巨大成效!將大型 GIF 轉換為影片,可大幅節省使用者的頻寬。
先測量
使用 Lighthouse 檢查網站,找出可轉換為影片的 GIF。在開發人員工具中,按一下「稽核」分頁,然後勾選「效能」核取方塊。接著執行 Lighthouse 並查看報表。如果系統偵測到可轉換的 GIF,就會顯示「使用影片格式的動畫內容」建議:

建立 MPEG 影片
您可以透過多種方式將 GIF 轉換為影片,本指南將使用 FFmpeg 工具。如要使用 FFmpeg 將 my-animation.gif 轉換為 MP4 影片,請在控制台中執行下列指令:
ffmpeg -i my-animation.gif -b:v 0 -crf 25 -f mp4 -vcodec libx264 -pix_fmt yuv420p my-animation.mp4
這會告知 FFmpeg 將 my-animation.gif 視為輸入 (以 -i 標記表示),並轉換為名為 my-animation.mp4 的影片。
libx264 編碼器僅適用於尺寸為偶數的檔案,例如 320 像素 x 240 像素。如果輸入的 GIF 尺寸為奇數,您可以加入裁剪篩選器,避免 FFmpeg 擲回「height/width not divisible by 2」錯誤:
ffmpeg -i my-animation.gif -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" -b:v 0 -crf 25 -f mp4 -vcodec libx264 -pix_fmt yuv420p my-animation.mp4
建立 WebM 影片
MP4 格式自 1999 年推出以來,已廣為人知,而 WebM 則是相對較新的檔案格式,於 2010 年首次發布。WebM 影片比 MP4 影片小得多,但並非所有瀏覽器都支援 WebM,因此同時產生這兩種格式的影片是合理的做法。
如要使用 FFmpeg 將 my-animation.gif 轉換為 WebM 影片,請在控制台中執行下列指令:
ffmpeg -i my-animation.gif -c vp9 -b:v 0 -crf 41 my-animation.webm
比較差異
GIF 和影片的費用差異可能相當大。

在本例中,初始 GIF 為 3.7 MB,相較之下,MP4 版本為 551 KB,WebM 版本則只有 341 KB!
將 GIF 圖片換成影片
GIF 動畫有三項影片必須複製的重要特徵:
- 系統會自動播放。
- 這些函式會持續迴圈 (通常是這樣,但可以防止迴圈)。
- 他們保持沉默。
幸好,您可以使用 <video> 元素重新建立這些行為。
<video autoplay loop muted playsinline></video>
具有這些屬性的 <video> 元素會自動播放、無限循環、不播放音訊,以及內嵌播放 (即非全螢幕),這些都是動畫 GIF 的預期行為!🎉
最後,<video> 元素需要一或多個 <source> 子元素,指向瀏覽器可選擇的不同影片檔案,具體取決於瀏覽器支援的格式。同時提供 WebM 和 MP4,這樣一來,如果瀏覽器不支援 WebM,就能改用 MP4。
<video autoplay loop muted playsinline>
<source src="my-animation.webm" type="video/webm">
<source src="my-animation.mp4" type="video/mp4">
</video>
對最大內容繪製 (LCP) 的影響
請注意,雖然 <img> 元素是 LCP 的候選元素,但沒有 poster 圖片的 <video> 元素並非 LCP 候選元素。如果是模擬 GIF 動畫,解決方法是「不要」在 <video> 元素中加入 poster 屬性,因為該圖片不會使用。
這對您的網站有什麼影響?建議您繼續使用 <video>,而非 GIF 動畫,但請注意,這類媒體不會成為 LCP 候選項目,系統會改用下一個最大的候選項目。由於 GIF 和 <video> 通常較大,下載速度較慢,因此改用其他 LCP 候選元素,可能還能改善網站的 LCP。