我正在读这个文章那里有这样一段话:
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