Задался целью создать скрипт захвата экрана, с управлением через диалог Yad.
Результатом работы стал скрипт xgrab доступный в git репозитории.
Скачать можно командой:
[console]$ git clone https://github.com/ormorph/xgrab.git[/console]
Управление осуществляется через графический диалог Yad.
Для захвата экрана скрипт использует либо ffmpeg либо avconv.
Причиной создания послужило то что уже существующий recordmydesktop, и графические интерфейсы не обеспечивают нормальной работы, то время не соответствует, то при запущенном compton экран просто темный, не работает с pulseaudio.
В качестве зависимостей скрипт использует следующие программы:
xrandr — для получения информации о текущем разрешении экрана, когда в настройках выбран режим display;
xwininfo — для получения информации о текущем положении и разрешении выбранного окна, когда в настройках выбран режим window;
xrectsel — для выделения области экрана и получения информации, когда выбран режим size.
В настройках опции захвата видео используется строчки на место которых скрипт подставляет значения переменных:
$SCR_SIZE — подставляется значение вида 1366x768, означает разрешение области захвата.
$DISPLAY — на место этой строчки подставляется значение системной переменной DISPLAY, и смещение позиции захватываемой области.
В настройках опции сжатия используются строчки на место которых подставляются значения переменных, это:
TARGET_WIDTH — ширина сжимаемого видео;
TARGET_HEIGHT — высота сжимаемого видео.
Так как кодек libx264 не во все разрешения может производить конвертацию, было принято решение сделать данные параметры кратными 2, т. е. если разрешение исходного файла 1366x767 то эти данные параметры принимают вид:
TARGET_WIDTH=1366
TARGET_HEIGHT=766
Близко к оригиналу, но незначительно отличается. Это сделано чтобы обеспечить автоматическое сжатие при захвате выделенных областей, без падения программы(ffmpeg,avconv). Ранее эти параметры были кратными 10, но протестировал, кратные двум тоже норм, хотя есть предположение что можно еще уменьшить этот разброс(типа четное к четному, нечетное к нечетному), но это уже не существенная разница.
При первом запуске скрипт копирует конфигурационные файлы в каталог $HOME/.xgrab, соответственно выполняемую его часть можно поместить в директорию с правами root, а запускать под обычным пользователем.
За автоматический выбор конвертируемой программы отвечает файл command, наиболее высокий приоритет имеет команда avconv, обычно в нынешних ос не присутствует одновременно ffmpeg и libav, так как эти пакеты конфликтуют с друг другом.
Параметры пытался подобрать так чтобы с одними и теми же параметрами можно было работать как с avconv так и с ffmpeg.
По умолчанию захват в настройках прописан через pulseaudio, но параметр скорее всего придется отредактировать что бы не было падений из за отсутствующего устройства.
Параметр:
-f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -acodec pcm_s16leпараметр alsa_output.pci-0000_00_1b.0.analog-stereo.monitor берется из вывода:
[console]$ pactl list short sources[/console]
При первом запуске следует отредактировать этот параметр, так как ваше устройство может отличаться.
Полная команда захвата при разрешении 1366x768 получается:
[console]$ ffmpeg -f pulse -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -acodec pcm_s16le -f x11grab -s 1366x768 -r 10 -i $DISPLAY -vcodec mpeg4 -q:v 0 /home/USER/screenshot/53572030.mp4[/console]
Это сразу для тестирования если нет падений то все ок…
Скрипт должен выполняется в директории со скриптом, по этому рекомендуется запускать его скриптом вида:
#!/bin/bash
cd PATH/xgrab
./xgrab.sh
Все управление осуществляется через иконку в системном трее, но тут должно быть интуитивно понятно что и как делать. По умолчанию файлы сохраняются в каталог $HOME/screenshot, название генерируется автоматически(случайное цифры).
При установленной в настройках галочке compress, по окончанию захвата производится конвертирование файла в более сжатый формат с отображением в индикаторе прогресса, сколько процентов конвертирования уже выполнено.
Хотелось бы что бы узнать что еще в данном скрипте не работает нормально.
Для пользователей gentoo можно сразу загрузить ебилды для yad и xgrab из git, верхняя ссылка Блоги на этом форуме. Там я уже писал о выкладываемых ебилдах(git). Если что то изменю то изменения будут доступны сразу после повторной пере установки. При установке xgrab будут подтянуты все зависимости и скрипт будет доступен сразу через меню.
Анимированное окно настроек:
