幀率: 越高 = 越流暢但檔案越大
最大寬度: 自動縮放並保持寬高比
調色盤顏色數: 顏色越少 = 檔案越小、質量略降
動畫 GIF 轉換:按所選幀率提取幀、縮放到最大寬度、併為迴圈構建最佳化的調色盤。音訊軌(若有)會被丟棄。
為什麼 GIF 這麼大?調色盤、抖動和幹著影片活兒的 1987 年格式
GIF(Graphics Interchange Format,1987)本是帶一點動畫彩蛋的靜態影像格式,這一點處處可見。兩個特性決定本頁的一切:每幀最多隻能用從一個儲存調色盤中選出的 256 色,幀用 LZW 壓縮——一個來自 zip 時代的通用位元組壓縮器——完全不知道自己裝的是影片。沒有運動補償,沒有真實影片編解碼器那種"這幀基本和上一幀一樣"的算術;每幀本質上是一張單獨壓縮的圖片。理解調色盤是做出又小又好看 GIF 的關鍵。
五個錨定全頁的事實:
• 每幀最多攜帶 256 色(28)的調色板;真彩視頻必須量化降色
• 抖動 用散佈相鄰調色板色點的方式偽造缺失顏色——文件更大、漸變更平滑
• 幀計時以 10 ms 為單位存儲:10 fps → delay 10(100 ms);實用下限是 delay 2(20 ms = 50 fps)
• 幀各自獨立 LZW 壓縮——沒有幀間壓縮是體積殺手第一名
• 更少顏色、更少幀、更小尺寸:每個旋鈕都縮減 LZW 輸入,效果相乘
256 色調色盤與色帶
真彩影片的一個畫素需要 24 位(1670 萬種可能);GIF 畫素是一個 8 位索引,指向最多 256 色的表。因此影片轉 GIF 要跑調色盤量化:選出最能代表內容的 256 色,再把每個畫素吸附到最近的一色。漸變付出代價——一片需要 4000 種略有差異的藍色的天空只剩 30 種,平滑的斜坡塌縮成可見的條紋,即色帶(banding)。高對比扁平圖形(logo、遊戲精靈、圖表)幾乎無感;照片和影片受傷最重。轉換器的調色盤質量是其輸出質量的大頭。
抖動:用噪聲換平滑
抖動是色帶的經典解法:與其把每個畫素吸附到最近的調色盤色,不如把最近的兩個顏色散佈混合,讓小面積上的平均值匹配原始色調。漸變看起來平滑得多——條紋溶解成眼睛在正常觀看距離下會自動融合的細噪聲。代價是檔案大小:噪聲是高頻細節,LZW 壓規則條紋遠好過散點。這正是本頁暴露的 GIF 根本取捨:關抖動得帶色帶的小檔案,開抖動得花體積的平滑漸變。
幀計時:20 ms 下限
GIF 以 1/100 秒為單位儲存幀間延遲。10 fps 意味著 delay 10(每幀 100 ms);20 fps 意味著 delay 5(50 ms)。最小實用值是 2(20 ms,即 50 fps),而實際上多數瀏覽器把低於此值的延遲鉗到 100 ms——要 60 fps 會悄悄產生更慢的播放。越過下限後,每提高 1 fps 都成倍增加幀數:同一段素材 15 fps → 50 fps 意味著三倍多的幀,GIF 大小大致隨幀數線性增長。10 秒素材 15 fps 是 150 幀;50 fps 就是 500 幀。
為什麼 GIF 比真影片膨脹那麼多
現代影片編解碼器把大部分位元花在描述幀間變化上——鎖定的機位意味著後面的幀幾乎不花錢。GIF 的 LZW 把每幀當全新影像(唯一的幀間技巧是一個跳過與前幀相同畫素的透明標誌,遠不如真正的運動補償)。經驗法則:同一段素材,GIF 會是同分辨率精心編碼的 WebM 的許多倍。如果目標位置接受真影片,優先真影片;GIF 只在通用性和自動播放/迴圈行為重要的地方獲勝。
常見誤區
- "GIF 是壓縮的,所以適合存影片。"LZW 是 1987 年的無運動模型位元組級壓縮器;對動態畫面它是 Web 上效率最低的常用格式。
- "我的源是 60 fps,GIF 也應該是。"20 ms 延遲下限把 GIF 封頂在 50 fps,而且瀏覽器會把低於下限的延遲向上鉗。逐幀保真不是 GIF 能給的。
- "抖動只是噪聲,應該關掉。"它是深思熟慮的質量/體積取捨:關掉得帶色帶的小檔案,開啟得花位元組的平滑漸變。
- "顏色少了肯定難看。"對扁平圖形和高對比動畫,64 色也能和 256 色看起來一樣——還能讓檔案更小。
相關工具:影片轉 WebP/APNG(帶真壓縮的真彩動畫)、GIF 轉影片(反方向:調色盤回真彩)、影片轉 WebM(同一段素材的真影片)、影片剪下器(轉換前先修剪源)。