Создание GIF из терминала Linux с помощью VHS

Важно: VHS предназначен для сценариев, где интерфейс — чистый текст в терминале. GUI-приложения и некоторые интерактивные программы работать не будут.
Почему VHS может быть лучше обычной записи экрана
Традиционные записи экрана и видеофайлы занимают много места, требуют транскодирования и управления хостингом. GIFы компактнее для коротких демонстраций и лучше встраиваются в документы и статьи. В отличие от ручной съёмки мобильным телефоном, VHS автоматически проигрывает ввод команд и фиксирует результат в одном аккуратном файле.
Примеры альтернатив:
- Простая запись экрана → большие MP4-файлы.
- Конвертация видео в GIF → шаги и качество обычно неудобны.
- Инструменты вроде Peek → подходят для записи области, но менее автоматизуемы.
Что потребуется для работы
- ttyd — для виртуального tty (если требуется для некоторых способов рендера). Устанавливается через snap на системах с поддержкой snap.
- ffmpeg — для финального рендера (обычно доступен в репозиториях).
- Доступ к терминалу и базовое умение редактировать текстовые файлы (nano, vim и т. п.).
Ниже описаны установки под распространённые дистрибутивы.
Установка VHS на Linux
Примечание: команды приводятся точь-в-точь, их нужно вводить в терминале. Если вы не уверены в безопасности репозитория — проверьте ключи и сайт разработчика.
Установка ttyd (если доступен snap)
sudo snap install ttyd --classicПакеты ffmpeg обычно доступны в стандартных репозиториях вашего дистрибутива, установите их через пакетный менеджер.
На дистрибутивах на базе Debian/Ubuntu
Добавьте ключ репозитория в keyring:
curl -fsSL https://repo.charm.sh/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/charm.gpgДобавьте источник Charm в APT:
echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ " | sudo tee /etc/apt/sources.list.d/charm.listОбновите APT и установите VHS:
sudo apt update && sudo apt install vhsНа Arch Linux
Установите VHS из AUR (пример с yay):
yay -S vhs-binНа Fedora и RHEL
Добавьте репозиторий Charm:
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(На современных Fedora можно использовать dnf вместо yum.)
Как работать с VHS: базовый рабочий процесс
- Создайте новую «ленту» (.tape):
vhs new demo.tape- Откройте файл в редакторе, например, nano:
nano demo.tape- В файле найдёте конфигурацию и комментарии. Измените необходимые параметры: имя выходного файла, размеры окна, размер шрифта и т. п. Пример минимального содержимого:
Output demo.gif
Set FontSize 14
Set Width 1200
Set Height 600
Type "neofetch --ascii muo_ascii.txt"
Sleep 500ms
Enter
Sleep 5sСохраните файл (Ctrl+O) и выйдите (Ctrl+X).
Запустите VHS, подавая ленту на stdin:
vhs < demo.tapeVHS выполнит команды по очереди и сформирует указанный выходной файл (demo.gif).
Важно: команда Type ведёт к реальному выполнению команд в терминале — не включайте пароли/секреты в ленту.
Основные команды VHS и примеры использования
- Type “<строка>” — вводит строку как набор символов (симулирует набор с задержкой).
- Enter — имитирует нажатие Enter и выполнит команду.
- Sleep 200ms — пауза между действиями (можно указывать миллисекунды или секунды).
- Hide / Show — скрывает и показывает последующие команды в записи.
- Backspace
— удаляет n символов, имитируя Backspace. - Ctrl+l — эквивалент очистки экрана (введите как Ctrl+l).
- PlaybackSpeed <число> — изменяет скорость воспроизведения итоговой анимации (0.5 — в 2 раза медленнее).
- Output <имя файла> — задаёт имя выходного файла (gif/mp4/webm).
- Set FontSize <число> — размер шрифта в терминах VHS.
- Set Width <число> / Set Height <число> — размеры окна терминала в пикселях.
Пример использования Hide/Show, чтобы выполнить команду без вывода её текста на экран:
Hide
Type "neofetch --ascii muo_ascii.txt"
Sleep 500ms
Enter
ShowЧит-лист: быстрые пресеты для типичных задач
- Демонстрация одной команды
Output demo.gif
Set FontSize 16
Set Width 900
Set Height 300
Type "ls -la"
Enter
Sleep 2s- Снимок последовательности команд с замедлением
Output walkthrough.gif
Set FontSize 14
Set Width 1200
Set Height 640
PlaybackSpeed 0.75
Type "git status"
Enter
Sleep 800ms
Type "git add ."
Enter
Sleep 300ms
Type "git commit -m \"feat: add demo\""
Enter
Sleep 2sДругие подходы и когда VHS полезен, а когда — нет
Альтернативы:
- Asciinema: записывает терминал в JSON (asciicast), легко встраивается в сайты, интерактивен и мал по размеру. Можно конвертировать asciicast в GIF через asciicast2gif или svg-term, но это добавляет шаги.
- Peek: небольшая GUI-утилита для записи области экрана в GIF, удобна для быстрых записей GUI и терминала, но менее воспроизводима в автоматизации.
- Прямой захват экрана через ffmpeg: гибко, но требует ручной обрезки и синхронизации.
Когда VHS работает плохо:
- Интерактивные приложения, требующие пользовательского ввода в реальном времени (например, ncurses-приложения с особым управлением), могут вести себя иначе.
- Программы, запрашивающие пароли через безопасный ввод (sudo, ssh) — ввод пароля в ленте нежелателен и небезопасен.
- GUI-приложения и видеоплееры — VHS не подходит.
В таких случаях используйте либо asciinema (когда нужен пошаговый экспорт), либо запись экрана.
Безопасность и конфиденциальность
- Не включайте в .tape секреты, токены или пароли. Type вызывает реальное выполнение команд.
- Внимательно проверяйте вывод перед публикацией — он может содержать пути, имена пользователей или конфигурации.
Мини‑методология для создания качественных GIF
- Спланируйте сценарий: список команд и желаемый вывод.
- Подготовьте статические заглушки вывода, если реальный вывод раскрывает конфиденциальную информацию.
- Настройте FontSize и размеры окна для хорошей читаемости на целевой платформе.
- Используйте PlaybackSpeed и Sleep для удобного темпа воспроизведения.
- Протестируйте и поправьте тайминги, затем отрендерьте финальную версию.
- Оптимизируйте размер файла: при необходимости используйте форматы MP4/WebM для меньшего размера.
Рекомендации для авторов туториалов (чек‑лист)
- Проверьте читаемость: размер шрифта и ширина окна.
- Убедитесь, что все команды воспроизводятся без зависания.
- Не показывайте секреты и ключи.
- Дайте альтернативные шаги для пользователй других дистрибутивов.
- Предоставьте текстовые блоки команд отдельно в статье (для копирования).
Пример: готовая лента demo.tape
# Настройки
Output demo.gif
Set FontSize 14
Set Width 1000
Set Height 480
PlaybackSpeed 1
# Демонстрация neofetch
Type "neofetch --ascii muo_ascii.txt"
Sleep 400ms
Enter
Sleep 3s
# Заключение
Type "echo 'Готово'"
Enter
Sleep 1sКритерии приёмки
- GIF чётко показывает ввод и вывод команд.
- Текст читаем при стандартной ширине страницы.
- В GIF нет секретных данных.
- Продолжительность и скорость соответствуют ожиданиям аудитории.
Советы по оптимизации и совместимости
- Выберите MP4/WebM, если нужен меньший размер и высокая совместимость с современными сайтами.
- Для интеграции в CMS используйте WebM/MP4, если система плохо поддерживает GIF большого размера.
- Проверяйте цветовую схему терминала — контраст важен для читаемости.
Частые ошибки и способы их обхода
- Слишком маленький шрифт → увеличьте Set FontSize.
- Слишком быстрое воспроизведение → уменьшите PlaybackSpeed или увеличьте Sleep между командами.
- Команды, требующие интерактивности, зависают → замените на статический вывод или используйте Hide/Show и подготовленные результаты.
Краткий глоссарий
- VHS: утилита для записи последовательности команд терминала в GIF/MP4/WebM.
- .tape: текстовый файл, описывающий шаги записи.
- ttyd: прокси для терминала, служит для удалённого доступа/стриминга tty.
- ffmpeg: инструмент для обработки и конвертации мультимедиа.
Социальный текст и объявления
Социальный превью (кратко): “Создавайте демонстрации терминала в GIF с помощью VHS — быстро, компактно и удобно для туториалов.”
Короткое объявление (для рассылки, 100–200 слов):
VHS — простая и удобная утилита для создания наглядных GIF-демонстраций команд в терминале. Вместо тяжёлых видео и сложной обработки вы пишете сценарий в .tape, задаёте шрифт и размеры окна — и получаете готовый GIF. Отлично подходит для документации, блогов и обучающих материалов. Установите через репозиторий Charm, настройте PlaybackSpeed и используйте Hide/Show, чтобы не показывать чувствительные команды. Альтернативы: Asciinema для интерактивных записей и Peek для быстрых GUI-записей. Попробуйте VHS, чтобы ускорить создание понятных и компактных демонстраций.
Заключение
VHS — отличный инструмент для авторов технической документации и преподавателей, которые хотят быстро и аккуратно показать работу команд в терминале. Он требует немного подготовки, но даёт управляемый и повторяемый результат. Если вы готовите уроки или статьи, попробуйте VHS как альтернативу видео: это экономит место и упрощает встраивание примеров.
Сводка ключевых рекомендаций:
- Планируйте сценарий и защищайте секреты.
- Настраивайте FontSize и разрешение для читабельности.
- Тестируйте и подгоняйте PlaybackSpeed и Sleep.