只取得螢幕的 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
    

    解釋: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

相關內容