Запись экрана в Linux с FFmpeg
Зачем использовать FFmpeg
FFmpeg — это универсальный набор библиотек и утилит для работы с аудио и видео. Он даёт максимальный контроль и минимальные накладные расходы по сравнению с графическими программами. Определение: x11grab — модуль FFmpeg для захвата X11-дисплея.
Важно: терминальные записи обычно быстрее и потребляют меньше ресурсов, чем GUI-инструменты, особенно при захвате игр.
Установка FFmpeg
Обновите кеш пакетов и установите ffmpeg через менеджер пакетов вашей дистрибуции. В Ubuntu-подобных системах это делается так:
sudo apt-get update
sudo apt-get install ffmpegДля других дистрибутивов используйте соответствующий менеджер пакетов (dnf, pacman и т.п.).
Запись первой сессии — базовый синтаксис
Основные параметры, которые нужно задать: размер видео, частота кадров, вход x11grab, имя выходного файла и (опционально) звук.
Общий шаблон:
ffmpeg -video_size 1280x720 -framerate 30 -f x11grab -i :0.0+X,Y output.mp4Пояснения:
- -video_size 1280x720 — область захвата ширина×высота.
- -framerate 30 — частота кадров.
- -f x11grab — используем x11grab как источник видео.
- -i :0.0+X,Y — дисплей :0.0, смещение от верхнего левого угла X и Y.
- output.mp4 — имя выходного файла и формат.
Пример: захват квадрата 500×500, смещённого на X=300, Y=300, в AVI:
ffmpeg -video_size 500x500 -framerate 25 -f x11grab -i :0.0+300,300 output.aviОстановка записи: в терминале нажмите клавишу q — FFmpeg корректно завершит и сохранит файл.

Примечание: изображение показывает пример вывода FFmpeg в терминале во время записи.
Запись звука
Чтобы захватить звук вместе с видео, добавьте аудиовход. В Linux чаще используются PulseAudio или ALSA. Примеры:
PulseAudio (обычный вариант):
ffmpeg -video_size 1280x720 -framerate 30 -f x11grab -i :0.0 -f pulse -ac 2 -i default output.mp4ALSA (если вы используете ALSA напрямую):
ffmpeg -video_size 1280x720 -framerate 30 -f x11grab -i :0.0 -f alsa -ac 2 -i default output.mp4Полезные аудио-параметры:
- -ac — число каналов (1 моно, 2 стерео).
- -ar — частота дискретизации (например, 44100 или 48000).
- -ab — битрейт аудио (например, 128k).
Кодеки и производительность
Если вы записываете и кодируете одновременно, это увеличит нагрузку. Для минимизации влияния:
- Записывайте в лёгкий кодек или контейнер, затем кодируйте отдельно.
- При онлайн-кодировании используйте быстрые пресеты, например -preset ultrafast для libx264.
Пример быстрой кодировки H.264:
ffmpeg -video_size 1920x1080 -framerate 60 -f x11grab -i :0.0 -f pulse -i default -vcodec libx264 -preset ultrafast -crf 23 output.mp4Если цель — минимальное влияние на игру, запись в сырой формат или копирование потока для дальнейшей обработки предпочтительнее.
Опции x11grab: follow_mouse и show_region
x11grab умеет следовать за курсором и показывать рамку захвата.
- -follow_mouse centered — центрирует зону захвата по курсору.
- -follow_mouse 500 — курсор может двигаться внутри 500 пикселей до сдвига рамки.
- -show_region 1 — показывает рамку области захвата (полезно для отладки).
Пример: следовать за мышью и показывать регион:
ffmpeg -video_size 800x600 -framerate 30 -f x11grab -follow_mouse centered -show_region 1 -i :0.0 output.mp4Рекомендации при записи игр
- Лучше сначала захватить видео в минимальной обработке, затем производить постобработку и кодирование.
- Используйте -preset ultrafast, если кодирование идёт одновременно с записью.
- Закройте лишние фоновые задачи, отключите тяжёлые эффекты рабочего стола.
- Разрешение и частота кадров сильно влияют на загрузку CPU/GPU — уменьшайте по необходимости.
Шпаргалка команд (cheat sheet)
Записать весь экран 1920×1080, 30 fps без звука:
ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 output.mp4Записать экран + звук (PulseAudio):
ffmpeg -video_size 1280x720 -framerate 30 -f x11grab -i :0.0 -f pulse -ac 2 -i default -c:v libx264 -preset ultrafast -crf 23 output.mp4Записать область 500×500, смещение 300,300:
ffmpeg -video_size 500x500 -framerate 25 -f x11grab -i :0.0+300,300 output.aviЗапись в сырой контейнер для последующей обработки:
ffmpeg -video_size 1280x720 -framerate 30 -f x11grab -i :0.0 -c:v rawvideo -pix_fmt yuv420p raw_output.mkvТипичные ошибки и их устранение
- Ничего не записывается: проверьте правильность индекса дисплея в -i :0.0; в некоторых системах дисплей может быть :0 или :1.
- Нет звука: убедитесь, что вы указали правильный драйвер (-f pulse или -f alsa) и правильный источник (-i default, -i alsa_output.pci-… и т.д.).
- Высокая загрузка CPU: снизьте разрешение или фреймрейт, используйте -preset ultrafast или сначала записывайте без кодирования.
Критерии приёмки
- Видеофайл воспроизводится без ошибок.
- Персональная область или весь экран захвачены в нужном размере и месте.
- Аудио синхронизировано с видео (если требовалось).
- Ресурсы системы остаются в допустимых пределах во время записи.
Глоссарий: 1 строка
- x11grab — вход FFmpeg для захвата X11-дисплея.
- PulseAudio — сервер звука в Linux.
- ALSA — низкоуровневый звуковой слой в Linux.
- crf — параметр качества при кодировании H.264 (меньше = лучше качество).
Короткое резюме
FFmpeg даёт гибкий и эффективный способ записи экрана в Linux: установите ffmpeg, выберите область через -video_size и -i :0.0+X,Y, добавьте звук через -f pulse или -f alsa, и используйте -preset ultrafast для минимизации нагрузки при кодировании. Проверяйте результат и корректируйте настройки по нагрузке и качеству.
Важно: всегда тестируйте команду перед длительной записью и делайте короткие пробные записи, чтобы убедиться в корректности звука и видео.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента