Создание GIF из терминала Linux с VHS
VHS — это простая утилита командной строки для рендеринга сценариев терминала (.tape) в анимированные GIF (или MP4/WebM). Установите зависимые пакеты (ttyd, ffmpeg), напишите .tape с последовательностью команд, сохраните и запустите vhs < demo.tape. Этот подход даёт качественные, компактные демонстрации команд и удобнее обычной записи экрана.
Терминал Linux — мощный инструмент, но новичку его поведение часто кажется абстрактным: строки текста, команды, выводы и иногда ASCII-арт. Лучший способ объяснить — показать. Видео отлично подходят, но они тяжёлые и неудобные для встраивания. GIF — компактная и универсальная альтернатива. VHS помогает создавать такие GIF, проигрывая заранее описанные команды и захватывая их вывод.
Зачем использовать VHS
- Лёгкость воспроизведения — GIF встраивается в документацию и блоги.
- Репродуцируемость — сценарий (.tape) — это документируемая последовательность команд.
- Настраиваемость — регулируется размер окна, размер шрифта, задержки набора.
Важно: GIF не заменяет полноформатное видео, если вы показываете графические интерфейсы. VHS предназначен для демонстрации консольных действий.
Как работает VHS — короткая модель умозаключения
Ментальная модель: представьте .tape как сценарий для актёра (терминала). Команды в файле выполняются последовательно, VHS симулирует ввод (Type, Enter), имитирует паузы и редактирование, снимает вывод, а затем рендерит анимацию.
Ключевые понятия:
- .tape — файл-сценарий с командами и настройками.
- Type — симулирует набор текста (и выполняет команды).
- Hide/Show — скрывают или показывают вводимые команды в итоговом GIF.
- PlaybackSpeed — регулировка скорости воспроизведения.
Установка VHS на Linux
VHS требует ttyd и ffmpeg для рендеринга. В разных дистрибутивах способы установки отличаются.
Если в вашей системе поддерживается snap, установите ttyd так:
sudo snap install ttyd --classic
Пакеты ffmpeg обычно доступны в стандартных репозиториях вашего дистрибутива.
На Debian-подобных дистрибутивах
Добавьте ключ репозитория в keyring:
curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpgecho "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ " | sudo tee /etc/apt/sources.list.d/charm.listОбновите источники и установите VHS:
sudo apt update && sudo apt install vhsНа Arch Linux
Через AUR с помощью yay:
yay -S vhs-binНа Fedora и Red Hat Enterprise Linux
Скопируйте и вставьте весь фрагмент ниже, затем нажмите Enter:
echo '[charm]
name=Charm
baseurl=https://repo.charm.sh/yum/
enabled=1
gpgcheck=1
gpgkey=https://repo.charm.sh/yum/gpg.key' | sudo tee /etc/yum.repos.d/charm.repoЗатем установите VHS:
sudo yum install vhsБыстрый пример: создание первого .tape
VHS использует расширение .tape. Создадим базовый файл и откроем его в nano:
vhs new demo.tape
nano demo.tape
Внутри файла вы увидите настройки как комментарии: имя выходного файла, формат, размер шрифта и задержки. Пример содержимого .tape:
Output demo.gif
Set FontSize 14
Set Width 1200
Set Height 600
Type "neofetch --ascii muo_ascii.txt"
Sleep 500ms
Enter
Sleep 5sПояснения к часто используемым командам:
- Type “…” — вводит строку и (если затем следует Enter) выполняет её.
- Enter — эквивалент клавиши Return.
- Sleep 200ms — пауза в 200 миллисекунд (в тексте мы будем писать «мс» для удобства).
- Hide / Show — скрывают вводимые строки между ними.
Сохраните (Ctrl+O) и выйдите (Ctrl+X), затем выполните:
vhs < demo.tapeVHS срендерит GIF по указанным в файле настройкам.
Полезные приёмы и настройки
- Размер шрифта и размеры окна. Для публикаций часто разумно использовать ширину 1200px и высоту 600px вместе с удобочитаемым FontSize (12–16).
- Задержки: Sleep 500ms или Sleep 5s помогают выделить момент выполнения команды.
- PlaybackSpeed: снизьте скорость, если анимация выглядит слишком быстрой:
PlaybackSpeed 0.5- Backspace: симулирует нажатие Backspace. Добавьте число, чтобы удалить N символов.
- Ctrl+l: большинство дистрибутивов очистит экран при вводе Ctrl+l.
Список всех команд и деталей форматирования доступен в репозитории VHS на GitHub.
Примеры шаблонов .tape (шаблоны для быстрых задач)
- Короткая демонстрация команды:
Output quick-demo.gif
Set FontSize 14
Type "ls -la"
Enter
Sleep 2s- Скринкаст с хитрым скрытым вызовом (скроет ключи/пароли):
Output secure-demo.gif
Set Width 1000
Set Height 500
Type "echo 'Запуск теста'"
Enter
Sleep 300ms
Hide
Type "cat secret.txt"
Enter
Show
Sleep 2s(Не храните реальные секреты в репозиториях или в публичных .tape-файлах.)
Когда VHS не подходит
- Если демонстрируем GUI-приложения — VHS не снимет окна GUI.
- При интерактивных, длительных сессиях, где требуется ввод от пользователя в реальном времени — лучше записать видео.
- Для очень длинных уроков, где нужна озвучка и аннотации, видео остаётся удобнее.
Альтернативы и сравнение
- Asciinema: записывает сессии терминала в собственный формат (asciicast). Его можно воспроизвести в браузере и конвертировать в видео/анимацию.
- Terminalizer (Node.js): похож на VHS по идее, позволяет генерировать GIF и видео.
- ttyrec / script: низкоуровневые утилиты для записи терминала, требуют дополнительного инструментария для рендера.
Выбор зависит от целей: если нужна интерактивная веб-плеер-репродукция — Asciinema; если нужен файл-артефакт (GIF) и сценарии — VHS удобен.
Практические советы по оптимизации и публикации
- Размер GIF: GIF может быть громоздким. Для экономии используйте разумную ширину/высоту и минимизируйте цветовую палитру в пост-обработке.
- Формат: если вы целитесь на малый размер, рассмотрите WebM/MP4 (VHS поддерживает). Эти форматы обычно значительно легче, чем GIF.
- Хостинг: храните GIF на CDN или в облачном хранилище (GitHub Releases, S3) для быстрой отдачи.
- Доступность: всегда добавляйте понятный ALT для GIF в публикации — это поможет пользователям с ограниченными возможностями и улучшит SEO.
Совет: в документации указывайте команду, которая выполняется в GIF, чтобы читатель мог скопировать и воспроизвести результат локально.
Роль-ориентированный чек-лист перед публикацией
Для автора туториала:
- Проверить, что .tape не содержит секретов.
- Убедиться в читаемости шрифта и размере окна.
- Добавить инструкции и команды, воспроизводимые на целевой ОС.
Для инженера DevOps:
- Проверить воспроизводимость на целевых образах/контейнерах.
- Проверить наличие и правильность ffmpeg/ttyd на CI или в среде сборки.
Для менеджера контента:
- Подготовить ALT и краткий текст под изображение.
- Решить формат публикации (GIF vs WebM).
Отладка и распространённые ошибки
- Странные символы/кодировка: убедитесь, что .tape сохранён в UTF-8.
- Команды не выполняются: проверьте PATH и права выполнения в среде, где рендерите.
- Неверный размер окна/обрезанный вывод: скорректируйте Set Width/Set Height или используйте перенос строк в выводе.
Пример рабочего процесса (мини-SOP)
- Подготовьте окружение: установите ttyd и ffmpeg.
- Создайте demo.tape с настройками и командами.
- Локально прогоните vhs < demo.tape и проверьте результат.
- При необходимости отредактируйте задержки и шрифт.
- Сконвертируйте в WebM/MP4 при необходимости для публикации.
- Опубликуйте артефакт и добавьте ALT/описание.
Критерии приёмки
- GIF воспроизводит ожидаемые команды и их вывод.
- Текст читабелен при нормальном размере экрана.
- В .tape нет секретов или чувствительных данных.
Краткий глоссарий терминов
- .tape — файл-сценарий VHS.
- Type — команда для имитации ввода текста.
- Sleep — пауза между действиями (в миллисекундах).
- Hide / Show — скрытие/показ вводимых строк.
Итог
VHS — удобный инструмент для создания наглядных, воспроизводимых демонстраций командной строки. Он подходит для документации, блогов и образовательных материалов, где важно показать пошаговые действия без тяжести видеофайлов. Если ваша цель — интерактивность в браузере, рассмотрите Asciinema; если нужен компактный файл для встраивания — попробуйте VHS и настройте параметры рендера под свою аудиторию.
Важно: перед публикацией просмотрите .tape на предмет секретов и проверьте результат на целевой платформе.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone