Дизеринг: Floyd–Steinberg против Bayer
В GIF не больше 256 цветов на кадр, поэтому плавные градиенты приходится имитировать узором из соседних цветов. Это и есть дизеринг. Способов много, но на практике выбор сводится к двум семействам.
Диффузия ошибки
Floyd–Steinberg, Sierra и родственники распределяют ошибку округления каждого пикселя на соседей. Картинка выглядит максимально близко к оригиналу, но узор получается случайным и меняется от кадра к кадру даже на неподвижных участках.
Для LZW, которым сжимается GIF, это худший случай: повторяющихся последовательностей почти нет, а дрожащий фон ещё и ломает оптимизацию «перерисовываем только изменения».
Упорядоченный дизеринг
Bayer использует фиксированную матрицу порогов. Узор заметнее — та самая «сеточка», — зато он одинаковый в каждом кадре и хорошо сжимается.
Правило, которое у меня прижилось: фото и видео с живой камеры — диффузия; интерфейсы, плоская графика и пиксель-арт — Bayer или вообще без дизеринга.
Цифры
| Метод | Запись экрана, 10 с | Видео с камеры, 5 с |
|---|---|---|
| floyd_steinberg | 3,1 МБ | 4,4 МБ |
| sierra2_4a | 2,9 МБ | 4,2 МБ |
| bayer, scale 3 | 1,8 МБ | 3,6 МБ |
| none | 1,2 МБ | 3,1 МБ (полосы) |
На видео с камеры разница меньше и визуально Bayer там проигрывает. На записях экрана — почти двукратный выигрыш без заметной потери.