Получить только геометрию H+W моего экрана без более поздних +x+y

Получить только геометрию H+W моего экрана без более поздних +x+y

Я читаю этостатья. Там есть такое заявление:

ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -r 25 -i :0.0 -sameq -f mpeg -ar 48000 -s wvga -y sample.mp4 

При запуске команды я получаю сообщение об ошибке в разделе, в котором говорится:

xwininfo -root | grep 'geometry' | awk '{print $2;}' 

Причина в том, что при использовании этой команды на моем компьютере она выводит:

1360x768+0+0 

Как удалить последнюю часть вывода разрешения экрана, чтобы 1360x768вместо нее было 1360x768+0+0?

решение1

  • Вы можете использовать perlтолько для получения разрешения:

    xwininfo -root | perl -lne 's/.*geometry (\w+).*/$1/ or next; print'
    1360x768
    
  • Или еще короче, просто с GNU grep:

    xwininfo -root | grep -oP '(?<=geometry )\w+'
    1360x768
    

    Объяснение: Взгляд назад (?<=geometry )утверждает, что в текущей позиции в строке предшествуют символы "geometry". Если утверждение успешно, движок сопоставляет шаблон разрешения.

    Взгляд назад не «потребляет» никаких символов в строке. Это означает, что после закрывающей скобки движок регулярных выражений остается на том же самом месте в строке, с которого он начал поиск: он не сдвинулся с места. С этой позиции движок может снова начать сопоставление символов.

    Источник:http://www.rexegg.com/regex-disambiguation.html#lookbehind

решение2

Мой чистый awkподход, разбивающий строку на поля на основе пробелов и знаков плюс:

xwininfo -root | awk -F'[+| ]' '/geometry/ {print $4}'

Похожий метод выражения Perl Сильвена, но с sed:

xwininfo -root | sed -nr 's/.*geometry ([0-9x]+).*/\1/p'

решение3

Вы могли бы использовать awk substr. В вашем конкретном случае :

xwininfo -root | awk '/geometry/ {print substr($2,1,8);}'

Или, если вы хотите, чтобы это работало в любом случае:

xwininfo -root | awk '/geometry/ {print $2;}' | cut -d'+' -f1

надеюсь, это поможет.

решение4

Я также пробовал примеры захвата экрана командной строки несколько недель назад. В качестве альтернативного решения вы можете использовать

 xdpyinfo  | grep dimensions | awk -F ' ' ' { print $2 } ' 

для определения разрешения экрана.

Для захвата экрана с помощью внутреннего звука и микрофона вы можете использовать

 avconv -f   pulse -i default -f x11grab -r 15 -s $(xdpyinfo  | grep dimensions | awk -F ' ' ' { print $2 } ' ) -i :0.0+0,0 -acodec libmp3lame -vcodec libx264  $(date +"%m%d%Y_%H%M%S_$HOSTNAME")_screencast.mp4

Связанный контент