仅获取屏幕的 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}'

与 Sylvain 的 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

相关内容