Obtenha apenas a geometria H + W da minha tela sem o posterior + x + y

8

Estou lendo este artigo . Há uma declaração lá que diz:

ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print ;}') -r 25 -i :0.0 -sameq -f mpeg -ar 48000 -s wvga -y sample.mp4 

Quando executo o comando, recebo um erro com a seção que diz:

xwininfo -root | grep 'geometry' | awk '{print ;}' 

O motivo é que quando você usa esse comando no meu computador, ele gera:

1360x768+0+0 

Como faço para remover a última parte da saída da resolução da tela para ser 1360x768 em vez de 1360x768+0+0 ?

    
por Guest123ABC 03.09.2014 / 19:53

5 respostas

10

  • Você pode usar perl para obter apenas a resolução:

    xwininfo -root | perl -lne 's/.*geometry (\w+).*// or next; print'
    1360x768
    
  • Ou ainda mais curto com apenas GNU grep :

    xwininfo -root | grep -oP '(?<=geometry )\w+'
    1360x768
    

    Explicação : O lookbehind (?<=geometry ) afirma que na posição atual na string, o que precede são os caracteres "geometry". Se a afirmação for bem-sucedida, o mecanismo corresponderá ao padrão de resolução.

    Um lookbehind não "consome" nenhum caractere na string. Isso significa que, após o parêntese de fechamento, o mecanismo de regex é deixado no mesmo local da sequência a partir da qual começou a procurar: ele não foi movido. A partir dessa posição, o mecanismo pode iniciar os caracteres correspondentes novamente.

    Fonte: link

por Sylvain Pineau 03.09.2014 / 20:15
6

Minha abordagem awk pura, dividindo a string em campos com base em espaços e sinais de adição:

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

Um método semelhante à expressão Perl de Sylvain, mas com sed :

xwininfo -root | sed -nr 's/.*geometry ([0-9x]+).*//p'
    
por Oli 03.09.2014 / 23:35
5

Você pode usar awk substr . No seu caso particular:

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

Ou se você quiser que funcione em qualquer caso:

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

espere esta ajuda.

    
por Relic 03.09.2014 / 20:08
2

Outros já forneceram respostas para a operação completa, mas para responder somente Como obtenho de 1360x768+0+0 a 1360x768 ? , recommentaria usando cut como a solução mais simples possível , por exemplo

$ echo 1360x768+0+0 | cut -d+ -f1
1360x768
$
    
por hlovdal 04.09.2014 / 12:09
1

Eu também tentei exemplos de captura de tela de linha de comando há algumas semanas. Como uma solução alternativa, você pode usar

 xdpyinfo  | grep dimensions | awk -F ' ' ' { print  } ' 

para detectar a resolução da tela.

Para capturar a tela com áudio interno e microfone, você pode usar

 avconv -f   pulse -i default -f x11grab -r 15 -s $(xdpyinfo  | grep dimensions | awk -F ' ' ' { print  } ' ) -i :0.0+0,0 -acodec libmp3lame -vcodec libx264  $(date +"%m%d%Y_%H%M%S_$HOSTNAME")_screencast.mp4
    
por kenn 04.09.2014 / 18:00