Только получите геометрию 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?

8
задан 4 September 2014 в 07:36

5 ответов

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

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

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

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

    А lookbehind не "использует" символов на строке. Это означает, что после закрывающей скобки, regex механизм оставляют, стоя на том же самом пятне в строке, от которой это начало смотреть: это не переместилось. От того положения тогда механизм может начать соответствовать символам снова.

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

10
ответ дан 16 November 2019 в 16:44

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

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

похожий метод А для выражения Perl Sylvain, но с sed:

xwininfo -root | sed -nr 's/.*geometry ([0-9x]+).*/\1/p'
6
ответ дан 16 November 2019 в 16:44

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

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

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

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

надежда эта справка.

5
ответ дан 16 November 2019 в 16:44

Другие уже предоставили ответы для полной операции, но ответить [только 114], Как я добираюсь от 1360x768+0+0 до 1360x768? тогда я повторно прокомментировал бы использование cut как самое простое возможное решение, например,

$ echo 1360x768+0+0 | cut -d+ -f1
1360x768
$
2
ответ дан 16 November 2019 в 16:44

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

 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
1
ответ дан 16 November 2019 в 16:44

Другие вопросы по тегам:

Похожие вопросы: