Vimeo針對GIF性能和質量的改進

文 / Raphaël Zumervim

原文連接 / https://medium.com/vimeo-engi...瀏覽器

如今是2021年,視頻編碼徹底被AV1等現代編解碼器所主導。好吧,也不徹底是。一個小小的,不屈不撓的格式仍然可以抵抗入侵者。對於那些想要提升視頻質量的工程師來講,生活並不容易……ide

Vimeo針對GIF性能和質量的改進
Sintel by the Blender Institute/CC BY. 在Vimeo上製做的GIF性能

即便在今天,建立於1987年的Graphics Interchange Format(圖形交換格式),或稱 GIF (發音爲「 JIF」) ,仍然是傳輸短動畫或視頻的最便攜、最普遍支持的方式。儘管它每幀最多隻支持256種顏色,壓縮性能不好,並且不能包含音軌,但該格式的簡單使其在電子郵件、論壇、社交媒體等應用中,以及在不支持現代替代品的傳統系統中仍佔據主導地位。因爲該格式的限制,許多聲稱支持 GIF的平臺實際上使用的是 h.264,這種格式被配置爲在沒有音頻的狀況下循環播放,以模擬實際的GIF。瀏覽器和移動設備能夠輕鬆回放這些文件,它們在相同或更好的質量下提供更低的文件大小。然而GIF在支持方面仍然有優點。優化

在Vimeo,咱們最近發佈了一個功能,容許會員從他們的視頻中建立GIF,嵌入到電子郵件中,並在任何平臺上分享。與任何視頻編碼系統同樣,咱們須要考慮如何在保持合理的文件大小和編碼時間的同時儘量保持高質量。但因爲壓縮格式的能力有限,咱們必須解決一些特有的相關問題,涉及圖像量化、時間優化、速率控制和性能。動畫

後臺是一個由libimagequant和FFmpeg組成的系統。咱們使用libimagequant對圖像進行量化——減小每幀中使用的顏色數量,以知足格式的限制——同時最小化這一過程對質量的影響。這個優化步驟是複雜的,也是編碼器中最耗時的部分。libimagequant還應用了抖動,它看起來相似於膠片的顆粒,並在生成的GIF中隱藏了量化可能產生的任何色帶。而後,FFmpeg獲取量化和抖動圖像及其調色板,並將它們編碼爲實際的GIF格式。編碼

爲了提升量化質量和壓縮性能,咱們採用了預處理步驟來減小時間冗餘。GIF能夠有透明像素,在動畫GIF中,能夠利用這一點在不一樣幀之間只改變部分像素,保持其餘像素的靜態。若是視頻中的背景在幀之間沒有變化,咱們能夠經過對比連續幀的每一個像素來避免對其顏色進行屢次編碼,當它們很是類似時,在後一幀中使其透明。咱們使用一個簡單的感知顏色距離測量來肯定要成爲透明的像素,這樣就不會影響人眼看到的質量。spa

這套系統可讓咱們用一些控制幀速率和大小的質量參數、量化質量和像素透明度的像素距離閾值來對GIF文件進行編碼,可是還有一個咱們須要解決的問題:速率控制。因爲GIF是一種舊的格式,並無針對視頻編碼進行優化,因此咱們不能用一樣的設置對每個視頻進行不加區分的編碼,並指望合理的大小用於有硬性大小限制的電子郵件和平臺。現代視頻編碼器一般包括內部速率控制機制,以調整質量以達到目標大小,但對於GIF,管理文件大小的方法有限:減小每幀顏色的數量,減小幀數,減小幀的大小。爲了保持文件大小合理而不犧牲質量(除非必要),咱們運行多個編碼,根據須要逐步下降默認參數的質量,直到咱們達到一個適當水平,儘量少地損害質量。orm

對同一視頻進行屢次編碼確實會致使總體響應時間更長,所以咱們在多個級別上對它們進行並行處理,以保持合理的等待時間。目前,咱們在收集結果並挑選出最終結果以前,以固定規模的批次運行編碼,而且每一個編碼同時在多個幀上運行主要瓶頸,顏色量化。下面的活動示意圖描述了系統的整體結構和程序流程。視頻

Vimeo針對GIF性能和質量的改進
GIF 建立系統的活動示意圖

因爲年代久遠和格式的低複雜性,GIF永遠不會像它們的源視頻那樣好看,但咱們仍然有一些針對質量和性能的改進工做。經過電子郵件或社交媒體分享GIF片斷是在朋友或關注者中建立視頻興趣的好方法。

如今咱們全部的成員均可以使用這個功能,因此若是你想經過電子郵件或社交媒體在Vimeo上分享視頻,在你的視頻設置中找到GIF選項,並試一試!

相關文章
相關標籤/搜索