Найти в Дзене
Герман Геншин

Лайфхак, как делать эффектные GIF-анимации своих Linux-команд — всего две команды, а выглядит как магия!

Видел когда-нибудь стильные и лаконичные GIF-ки из командной строки и задумывался, как их создают? На самом деле, всё проще некуда: понадобится всего две команды — сейчас покажу, как это сделать. VHS — утилита для создания GIF-анимаций на основе сценариев, а Gifsicle — мощный инструмент для их сжатия. Вместе они позволяют делать крутые и крохотные GIF-файлы, которые выглядят по-настоящему профессионально. Я расскажу, что такое VHS, как им пользоваться, и как уменьшить размер готовой анимации, чтобы она занимала меньше места, чем обычный PNG. Лучше один раз увидеть, чем сто раз услышать, — вот тебе анимация, говорящая сама за себя: Эта анимация из моей статьи про fzf. Для полноты — вот ещё один пример на ту же тему: Согласись, выглядит эффектно! Всё на самом деле просто: никаких заморочек, а сами GIF-ки занимают минимум места. Например, первая — всего 223 КБ, вторая — всего 22 КБ. Вся магия — в связке VHS, Gifsicle и немного хитростей в командной строке. Если ты ещё не пробовал fzf, со
Оглавление

Видел когда-нибудь стильные и лаконичные GIF-ки из командной строки и задумывался, как их создают? На самом деле, всё проще некуда: понадобится всего две команды — сейчас покажу, как это сделать.

VHS — утилита для создания GIF-анимаций на основе сценариев, а Gifsicle — мощный инструмент для их сжатия. Вместе они позволяют делать крутые и крохотные GIF-файлы, которые выглядят по-настоящему профессионально. Я расскажу, что такое VHS, как им пользоваться, и как уменьшить размер готовой анимации, чтобы она занимала меньше места, чем обычный PNG.

Демонстрация работы VHS

Лучше один раз увидеть, чем сто раз услышать, — вот тебе анимация, говорящая сама за себя:

-2

Эта анимация из моей статьи про fzf. Для полноты — вот ещё один пример на ту же тему:

-3

Согласись, выглядит эффектно! Всё на самом деле просто: никаких заморочек, а сами GIF-ки занимают минимум места. Например, первая — всего 223 КБ, вторая — всего 22 КБ. Вся магия — в связке VHS, Gifsicle и немного хитростей в командной строке.

Если ты ещё не пробовал fzf, советую сначала почитать, как установить и запустить этот инструмент — так ты сможешь повторить показанные примеры.

Главные фишки работы с VHS

В основе VHS — так называемый “tape-файл”. Это просто сценарий с командами, которые будут проиграны одна за другой прямо в терминале. Вот супер-простой пример:

Этот сценарий делает три элементарных действия:

Когда запускаешь этот tape-файл, видишь, как команда появляется в терминале, выполняется, а затем анимация повторяется с небольшой задержкой.

Чтобы получить GIF, просто напиши в терминале: vhs my-file.tape

-4

Вот как выглядит результат:

-5

Пишем свой сценарий!

Покажу чуть более сложный пример и поделюсь парой лайфхаков.

Что внутри tape-файла?

Этот tape-файл создаёт тот самый GIF с “иголкой в стоге сена”, который ты видел выше. Сейчас разберём каждую строчку:

Инструкция "Require" — просто проверяет, что у тебя установлен fzf. Если нет, сценарий не запустится.

"Output" — здесь всё просто: указываешь, во что сохранить результат — GIF, MP4, WebM или даже отдельные кадры для ручной обработки.

“Set” стоит написать в самом начале: здесь задаются настройки — ширина, высота, используемая оболочка, частота кадров и скорость печати текста. Всё прозрачно и понятно. Скорость печати можно менять где угодно, а остальные настройки — только в начале файла.

Я специально снизил частоту кадров — так размер картинки намного меньше, но иногда это портит анимацию. Если что-то пошло не так — увеличь Framerate или просто убери этот параметр.

Блок "Hide" — сюда добавляешь команды, которые не должны попасть в итоговый GIF. В нашем случае мы подготавливаем окружение для fzf и очищаем терминал, чтобы на GIF не было лишнего. Потом команда "Show" — именно после неё VHS начнёт записывать всё, что происходит.

С 17-й строки начинается show: команда cat показывает содержимое файла Lorem Ipsum — это наш стог сена. Команда Sleep нужна для плавности.

На 22-й строке снова выводим файл через cat и сразу передаём его в fzf, жмём Enter и начинаем набирать слово needle. Сценарий заканчивается длинной паузой, чтобы можно было все рассмотреть.

Итого: сначала показываем файл, потом ищем в нём нужное слово с помощью fzf.

Как сделать свой tape-файл

Перед тем как творить GIF по своему сценарию, убедись, что у тебя установлен fzf. Также потребуется текстовый файл (например, Lorem Ipsum). Для этого выполни команду:

Создай tape-файл c именем fzf-demo.tape, вставь в него свой сценарий и запусти команду для генерации GIF:

В итоге получишь GIF c названием "unoptimized.gif" — дальше его будем уменьшать.

Как сделать GIF ещё меньше

“Unoptimized.gif” у меня вышел на 1,2 МБ — маловато радости. Уменьшить файл поможет Gifsicle. Вот как его установить:

Если у тебя Fedora, введи:

На Debian — эта команда:

Для Arch Linux подойдёт такая:

Когда Gifsicle установишь, сожми “unoptimized.gif” командой:

После этого GIF будет весить около 228 КБ.

Мой главный трюк — использовать палитру на 8 бит, чтобы максимально уменьшить размер. На него больше всего влияет именно количество цветов, а не разрешение. Если у тебя в анимации много ярких или разных цветов, смело увеличивай палитру до 256, но тогда и вес GIF’а станет больше.

Можно дополнительно уменьшить GIF, если снизить fps. Я выставил 5 кадров в секунду — картинка остаётся чёткой, а файл реально небольшой. При низком fps получается много одинаковых кадров — Gifsicle их сам удаляет (флаг "-O3" или "-O2"), оставляя только необходимые и расставляя правильные задержки между ними.

Чекни сам: у оптимизированной версии кадров заметно меньше, а паузы между ними стали разными — это и есть супер-оптимизация.

Если твой GIF быстро меняется (например, печать текста молниеносная), при удалении одинаковых кадров размер падает просто в разы! В простых анимациях эффект не такой феноменальный, но разница всё равно чувствуется.

Кстати, VHS может сам записывать сценарии — просто повтори свои действия в терминале, выполнив vhs record > my.tape. Как только закончишь, напиши exit — ты не выйдешь из терминала, а VHS сохранит твой tape-файл. Останется только слегка его подредактировать.

Советую глянуть официальную документацию (она на GitHub). Бывают баги, но обычно всё работает без проблем — и главный плюс: всё гораздо проще, чем записывать полноценное видео с экрана. Не веришь? Проверь сам: один seans "record", минимальная правка сценария — и запускай свои две магические команды.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: