나중에 + x + y없이 화면의 H + W 지오메트리 만 가져옵니다. :0.0 -sameq

기사를 읽고 있습니다. 다음과 같은 진술이 있습니다.

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?



답변

  • 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”가 앞에옵니다. 어설 션이 성공하면 엔진이 해상도 패턴과 일치합니다.

    lookbehind는 문자열의 문자를 “소비”하지 않습니다. 이것은 닫는 괄호 뒤에 정규식 엔진이 문자열을 찾은 곳과 같은 지점에 서 있다는 것을 의미합니다. 그 위치에서 엔진은 문자 일치를 다시 시작할 수 있습니다.

    출처 : http://www.rexegg.com/regex-disambiguation.html#lookbehind


답변

내 순수한 awk접근 방식은 공백과 더하기 기호를 기반으로 문자열을 필드로 분할합니다.

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

Sylvain의 Perl 표현식과 비슷한 방법이지만 다음을 사용합니다 sed.

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

답변

당신은 아마 사용할 수 있습니다 awk substr. 특별한 경우 :

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

또는 어떤 경우에도 작동하려면 :

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

이 도움을 바랍니다.


답변

다른 사람은 이미 전체 작업에 대한 답을 제공하고 있지만 대답 내가로부터 얻는 방법 1360x768+0+01360x768? 그런 다음 cut가장 간단한 해결책으로 사용 하는 것이 좋습니다.

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

답변

또한 몇 주 전에 명령 줄 화면 캡처 예제를 시도했습니다. 대체 솔루션으로 사용할 수 있습니다

 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