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


9

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

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
지오메트리 (1360x768)를 알고 있다면 변수 대신 변수를 사용하십시오
Panther

1
나는 이것을 깨달았고 이미이 방법으로 성공적으로 수행했습니다. 그러나 나는 경험을 사용하여 어색한 지식을 키우려고했습니다. :)
Guest123ABC 2014 년

그래 행운을 빌어. 인터넷에서 awk에 대한 몇 가지 훌륭한 자습서가 있습니다.
Panther

답변:


10
  • 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


@ Guest123ABC 나는 더 짧은 버전의 정규식으로 내 대답을 업데이트했습니다.
Sylvain Pineau

6

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

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

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

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

5

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

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

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

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

이 도움을 바랍니다.


아, 네! 대단히 감사합니다! 첫 번째 일했다! :) 두 번째 결과는 두 가지 결과를 생성합니다. 1과 해상도는이 경우에는 효과가 없지만 여전히 일반적인 지식에 대한 멋진 진술입니다.
Guest123ABC

2
실바 인의 답변을 사용해야합니다. 더 좋습니다.
Relic

1
grep 부분을 awk 명령으로 옮겼습니다 (나 자신을 도울 수 없기 때문에). substr의 문제점은 고정 게재 위치를 사용한다는 것입니다. 1000x1000과 같은 해상도는 너무 길어서 손상됩니다.
Oli

@Oli 와우 좋은 움직임. 그렙 교체를 잊지 않을 것입니다. 팁 주셔서 감사합니다. 당신은 substr에 대해 완전히 옳았습니다. 이것이 두 번째 명령을 추가 한 이유입니다.
Relic

2

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

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

1

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

 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.