我正在讀這個文章。那裡有一個聲明是這麼說的:
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
解釋:lookbehind
(?<=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