나중에 +x+y 없이 내 화면의 H+W 형상만 가져옵니다.

나중에 +x+y 없이 내 화면의 H+W 형상만 가져옵니다.

나는 이것을 읽고 있다기사. 거기에는 다음과 같은 진술이 있습니다.

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

관련 정보