avatar
1 год назад

Почему новые форматы мультимедиа лучше старых

И почему GIF должен умереть.

И начну я, собственно, с...

Данный формат был создан аж в 1987 году. Это чтобы вы понимали, почему настолько древний формат не подходит для использования в 21 веке.

GIF - мусор, потому что:

Такие ограничения были нормальными много лет назад, но сейчас они уже никуда не годятся.

Да, ограничение на количество цветов можно обойти путём долгого пердолинга с палитрами. Но зачем это делать, если есть более эффективные форматы?

На всякий случай стоит пояснить, что MP4 - это контейнер (как и MKV), а H.264 и H.265 (а также VP8, VP9 и прочие) - это кодеки, которые хранятся в этом контейнере.

Так вот. Если посмотреть, какие версии браузеров поддерживают MP4, то можно увидеть, что Chrome начал поддерживать его в 2010, Firefox - в 2015, а Safari аж в 2008. Но это на десктопе. На мобильных устройствах поддержка появилась позже.

Видеокодеки лучше GIF тем, что:

Подробнее про второй пункт.

У видеокодеков есть следующие типы кадров: I, P и B. У MPEG-1 были ещё D-кадры, использующиеся для генерации превью, но в более поздних кодеках их нет.

Картинка из Википедии
Картинка из Википедии<br>

I-кадры - это обычные кадры. Просто картинка. А вот P-кадры - это, если совсем просто, куски, образованные между P-кадрами. Кодировщик вычисляет, насколько велика разница между P-кадрами (т.е. чтобы это была одна сцена, например), и какие части в кадре двигаются. Вычисляются векторы движений.

Визуализация векторов движений

Т.е., к примеру, если вы подвигаете рукой на фоне статичной стены - то видео не будет хранить все кадры. Кодировщик поймёт, что что-то в видео не меняется, и несколько кадров будут сохранены лишь в виде вашей руки.

Кстати, удаляя I-кадры, и дублируя P-кадры, можно добиться подобного эффекта<br>

B-кадры - это просто результат интерполяции между кадрами.

Сжатие без потерь - это когда информацию можно восстановить в той же точности, что и до сжатия. Например, вы что-то сжимаете архиватором, потом достаёте это что-то из архива, и это что-то оказывается точно таким же, как и до сжатия.

Сжатие с потерями - это когда информацию восстановить в точности невозможно.

JPEG, например, с его шакализацией - это сжатие с потерями. Все видеокодеки - это сжатие с потерями. GIF, PNG - это сжатие без потерь. Я не буду в этом посте касаться аудио.

Тут стоит пояснить, что GIF - это такой формат Шрёдингера. С одной стороны, у него ограничение 256 цветов на кадр, с другой - никаких других оптимизаций, которые влияют на качество кадра, нет. Ограничение на количество цветов - это не сжатие.

Откуда берутся эти квадраты? Всё просто. Когда кодировщик проходится по изображению, то он его делит на участки, вычисляя, в каких из них разница по цветам минимальная. Это делается, чтобы не хранить всё изображение "как есть". Скажем, если 50% изображения занимает один цвет, то можно сэкономить занимаемое место за счёт этих 50%.

Квадраты появляются, когда увеличивается разница цветов, которой можно пожертвовать. Т.е. всё сводится к тому, что в одном участке хранится один цвет. Ну это если совсем грубо, на самом деле там всё несколько сложнее.

Так вот. Добавим это к тому, что в видео не хранятся все кадры "как есть". И в итоге выходит, что шакальное видео занимает гораздо меньше места, чем шакальная гифка, ибо шакализация в GIF ни на что не влияет!

Время шло, количество контента росло с какой-то немыслимой скоростью. Веб-страницы в среднем весят больше, чем размер оригинального Doom. Прямиком из ада появились Vine, а затем и TikTok. Встал вопрос хранения всего этого добра на серверах, ведь место не резиновое.

Стала заметна устарелость старых форматов. JPEG шакальный, и не поддерживает прозрачность, а PNG слишком тяжёлый. GIF слишком ограничен и тоже тяжёлый.

Именно поэтому появились все эти WEBP и прочие вещи, которые вы так ненавидите. Ведь их использование позволяет:

Новые форматы гораздо эффективнее старых. При сопоставимом качестве они занимают гораздо меньше места. Новые кодеки при том же битрейте (bit rate, количество бит в секунду) позволяют хранить видео более высокого качества. Когда в последний раз вы видели фильм в формате AVI?

И если WEBP и WEBM уже стали популярными, то вот небольшие пояснения про другие форматы.

JPEG XL - это такой ультимативный формат для статических изображений. Поддерживает вплоть до 4099 каналов (а не только 4 (красный, зелёный, синий, альфа)), возможность использования сжатия как с потерями, так и без потерь, поддержка HDR. Подходит как для фото, так и для других типов изображений. Обеспечивает более высокое качество при том же размере файла, чем JPEG.

AV1 - видеокодек нового поколения. Кодирование проходит очень долго и требует очень много ресурсов, зато размер итогового видео гораздо меньше даже чем у WEBM (VP9), вплоть до 30%. Сейчас уже появляются видеокарты с аппаратной поддержкой кодирования и декодирования AV1, а также специализированные платы.

AVIF - формат изображений на основе кодека AV1.

Также есть H.265. Он эффективнее H.264, но проприетарный (впрочем, H.264 тоже, но что там конкретно по лицензиям - я не помню), и требует отчислений за использование. Into the trash it goes.

Если JPEG XL и AVIF такие эффективные, то почему до сих пор нет поддержки в браузерах? Можете поблагодарить Google. Ведь у них уже есть свой формат (WEBP). Однако в последнее время ситуация меняется, и поддержка AVIF уже есть во всех основных браузерах, а поддержка JPEG XL появится в Firefox.

Установите сторонний просмотрщик изображений. Нет, ну правда. Вас никто за это не будет ругать.

Всегда так было, и всегда так будет, что сторонние приложения умели куда больше стандартных. Они поддерживают больше форматов. А ждать, пока в вашу шиндошс завезут поддержку современных форматов - это какой-то аутизм.

Вот мои рекомендации: nomacs для изображений, и VLC (или MPV, если хочется попердолиться) для видео. Говорят, что VLC плохо воспроизводит аниме, и MPV справляется с ним лучше.

Я сам обычно ставлю nomacs вместо стандартного просмотрщика в Windows. Что самое забавное, при большем количестве поддерживаемых форматов, он открывается гораздо быстрее. Да, разница в трёх сотнях миллисекунд, но всё равно приятнее.

Я надеюсь, что из поста вы усвоили, что:

Если вы - владелец какого-либо сайта, то добавьте поддержку WEBM и MP4. В идеале - сделайте конвертацию GIF в эти форматы (но это займёт больше ресурсов).

С новыми форматами вы сможете добавить к своему тексту анимированное превью, и оно не будет жрать ресурсы. А когда таких постов десятки, и у них превью в GIF, по 10 МБ каждое - ну вы же понимаете, насколько это плохо?

GIF больше не заслуживает того, чтобы жить дальше.

55комментариев
Ваш опыт на этом сайте будет улучшен за счет использования cookies. Принимая все cookies, вы соглашаетесь с нашим использованием cookies для предоставления и поддержания наших услуг и сайта.