LinuxForum.Fans
Тема

Скрипт захвата видео с экрана через диалог YAD

Автор: ormorph 6 сообщений 2399 просмотров
30.12.2016 10:16 · отредактировано #418454

Задался целью создать скрипт захвата экрана, с управлением через диалог 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, но параметр скорее всего придется отредактировать что бы не было падений из за отсутствующего устройства.
Параметр:

text
-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]
Это сразу для тестирования если нет падений то все ок…

Скрипт должен выполняется в директории со скриптом, по этому рекомендуется запускать его скриптом вида:

text
#!/bin/bash

cd PATH/xgrab ./xgrab.sh

Все управление осуществляется через иконку в системном трее, но тут должно быть интуитивно понятно что и как делать. По умолчанию файлы сохраняются в каталог $HOME/screenshot, название генерируется автоматически(случайное цифры).

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

Хотелось бы что бы узнать что еще в данном скрипте не работает нормально.

Для пользователей gentoo можно сразу загрузить ебилды для yad и xgrab из git, верхняя ссылка Блоги на этом форуме. Там я уже писал о выкладываемых ебилдах(git). Если что то изменю то изменения будут доступны сразу после повторной пере установки. При установке xgrab будут подтянуты все зависимости и скрипт будет доступен сразу через меню.

Анимированное окно настроек:

30.12.2016 14:42 #418466
"ormorph" написал:
в переменной PATH

можно спутать с системной переменой PATH. Перефразировать бы...

30.12.2016 14:54 #418467

Описание, лучше на github в Readme.md продублировать.

30.12.2016 15:53 · отредактировано #418469
"bormant" написал:
можно спутать с системной переменой PATH. Перефразировать бы...

Ок изменил, теперь более просто.

"Marley" написал:
Описание, лучше на github в Readme.md продублировать.

Потом как нибудь, когда захочу картинки добавить.

Меня то больше интересует работа этой программы. Нет ли сбоев в работе, в частности индикатора прогресса (когда прогресс обрывается а файл вида VID_xxxxxxxx.mp4 появляется но его нельзя запустить в плеере).

Вроде довел функцию обработки, у меня на обоих компах пока не было краха, но может быть в зависимости от версий ffmpeg и avconv, их вывод немного отличается...

31.12.2016 15:03 #418476

Добавил файлик с описанием README.ru.md.

12.01.2017 19:01 #418907

Последние изменения, немного изменены функции обработки прогресса. Теперь работают быстрее, отсутствуют сторонние конструкции c grep.

Войдите или зарегистрируйтесь, чтобы ответить.