Я читаю эту статью. Существует оператор там, который идет:
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
?
можно использовать 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
Мое чистое awk
подход, разделяя строку на поля на основе пробелов и знаков "плюс":
xwininfo -root | awk -F'[+| ]' '/geometry/ {print $4}'
похожий метод А для выражения Perl Sylvain, но с sed
:
xwininfo -root | sed -nr 's/.*geometry ([0-9x]+).*/\1/p'
Вы могли, возможно, использовать awk
substr
. В Вашем особом случае:
xwininfo -root | awk '/geometry/ {print substr($2,1,8);}'
Или если Вы хотите, чтобы он работал в любом случае:
xwininfo -root | awk '/geometry/ {print $2;}' | cut -d'+' -f1
надежда эта справка.
Другие уже предоставили ответы для полной операции, но ответить [только 114], Как я добираюсь от 1360x768+0+0
до 1360x768
? тогда я повторно прокомментировал бы использование cut
как самое простое возможное решение, например,
$ echo 1360x768+0+0 | cut -d+ -f1
1360x768
$
Я также попробовал примеры снимка экрана командной строки несколько недель назад. Как альтернативное решение можно использовать
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