이 기사를 읽고 있습니다. 다음과 같은 진술이 있습니다.
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+0
에 1360x768
? 그런 다음 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