webp encoding note
因最近工作上遇到輸出webp格式的需求
故在此紀錄學習過程及結論
===========================
---何謂webp?---
一種影像格式,檔案較JPG、PNG小,但畫質差不多
動態模式與GIF相比,表現好非常多
詳細可以自行google,不多贅述
---轉檔方式---
*只列出個人使用可行之方式
*連結放最下方
1.BX-WebpApngExporter
AE插件
可直接在AE中選定comp輸出
可設定幀數、循環次數、壓縮品質
基本上原理同樣是先轉出png序列再合成webp
只是過程幫你省略了,一鍵完成
但剛按下去會有幾秒鐘AE沒有回應
看得心很慌,但還是能順利完成輸出
2.ffmpeg
需搭配cmd使用
可選擇 png序列 > webp 或 影片格式 > webp
沒有圖形化介面只能敲命令,學習成本較高
可直接 mp4 轉 webp 很方便
需要控制的參數不多,也比較直覺好理解
(fps、循環次數、解析度 ...)
至於png序列的部分,沒有比較方便,還是用libwebp吧
3.libwebp
原生命令工具,同樣需搭配cmd使用
只能使用 png序列 > webp
可設定參數多
個人覺得學習成本比ffmpeg更高
主要是資料相對少很多
無損模式下畫質保持最好,當然檔案也最大
有損和混和模式則出現局部馬賽克化,不可用
整體操作起來是最繁瑣的一個
1.輸出png序列
2.製作一個批次檔取得所有檔案的名稱,輸出至txt文件
3.用替換字元的功能為每一幀加上想要的參數設定
4.複製到命令中執行
當然如果是對批次檔很熟悉的程式大佬
以上步驟可以寫成單個批次檔,一鍵搞定
但對我來說太難了,研究半天最後還是土炮解決
雖然能逐幀設定算是優點吧
但因為能逐幀設定的參數就只能逐幀設定
導致整個命令變得超級長
雖然原本要每張檔名都寫進去這點就讓它夠長了
但它還能更長
例如要設定fps24(約每幀41ms)
就得重複在檔名後面寫 -d 41
img2webp A1.png -d 41 A2.png -d 41 A3.png -d 41 ...
如果要輸出時間長的片段,或是逐幀設定多一些
命令長度應該會突破天際吧...
---測試---
三種方式分別輸出720p 24fps 1s的循環動畫
紀錄用時即檔案大小
1.BX-WebpApngExporter
1m6s
9.95mb
時間相對長,但畢竟是一鍵完成
只要檔案可用都很OK
就是AE會短暫沒有回應總覺得很抖
2.ffmpeg
4s
644kb
從 2k 30fps 的 mp4 轉檔
用時最短,檔案也最小
稍微認真看就會發現畫質有差
但因為差的很平均,我覺得還是可用
如果很需要壓縮檔案大小的情況會優先使用
3.libwebp
因為沒有設定解析度的參數
所以直接輸出720p 24fps的png序列做合併
有三種模式 無損 有損 混和
losses
20s
13.29mb
無損畫質最好,檔案也最大
lossy
5s
974kb
mixed
6s
672kb
有損和混合會局部馬賽克化,完全不可用
ffmpeg的狀況還可以應該是因為它是從2k壓縮到720p
但這邊直接用720p合併再設定有損等於二次壓縮
畫質爆炸也是情有可原
--結語--
其實除了以上三種之外
還有查到 isparta 和 webp-angle
另外線上轉檔也是一種方式
但isparta會機率性失敗,而且時間超級長
webp-angle則是會跳錯誤訊息不給用
有NDA的檔案也不適合傳到網上
不過基本上不管哪一套都還是基於libwebp做出來的
所以若不嫌麻煩還是用原生工具是最保險
可用的三種方式今後還是會交叉做使用
做更多壓力測試後若有新的發現再來分享
以上 希望會幫到將來有需要的人
--連結--