仅获得屏幕的H + W几何,而无需后面的+ x + y


9

我正在读这篇文章。那里有一条声明:

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
如果您知道的几何形状,1360x768的,只是使用而不是一个变量

1
我意识到了这一点,并且已经成功地做到了这一点。但是我也试图利用这些经验来增加我的awk知识。:)
Guest123ABC 2014年

好的祝你好运。互联网上有一些关于awk的优秀教程。

Answers:


10
  • 您可以使用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


@ Guest123ABC我用正则表达式的较短版本更新了我的答案
Sylvain Pineau 2014年

6

我的纯awk方法是根据空格和加号将字符串分成多个字段:

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

与Sylvain的Perl表达类似的方法,但具有sed

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

5

您可能会使用awk substr。在您的特定情况下:

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

或者,如果您希望它在任何情况下都可以工作:

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

希望对您有所帮助。


哦,是的!非常感谢你!第一个成功了!:)第二个结果产生两个结果:a 1,然后是在这种情况下不起作用的解决方案,但是对于一般知识仍然是一个很酷的陈述。
Guest123ABC

2
您应该使用西尔万的答案。更好
文物

1
我已经将grep部分移到了awk命令中(​​因为我无法帮助自己)。substr的问题在于它使用固定的展示位置。诸如1000x1000的分辨率会因为时间太长而将其破坏。
奥利(Oli)

@Oli哇哇好动。我不会忘记那个grep替换。感谢您的提示。您完全了解substr,这就是为什么我添加了第二个命令。
文物

2

其他人已经提供了完整的操作答案,但只回答我如何从获取1360x768+0+01360x768那么我建议使用cut最简单的解决方案,例如

$ echo 1360x768+0+0 | cut -d+ -f1
1360x768
$

1

几周前,我还尝试了命令行屏幕捕获示例。作为替代解决方案,您可以使用

 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.