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

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

estou lendo issoartigo. 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 $2;}') -r 25 -i :0.0 -sameq -f mpeg -ar 48000 -s wvga -y sample.mp4 

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

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

A razão é que quando você usa este 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 em 1360x768vez de 1360x768+0+0?

Responder1

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

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

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

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

    Um lookbehind não "consome" nenhum caractere da string. Isso significa que após o parêntese de fechamento, o mecanismo regex permanece exatamente no mesmo local da string de onde começou a procurar: ele não se moveu. A partir dessa posição, o mecanismo pode começar a combinar os caracteres novamente.

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

Responder2

Minha awkabordagem pura, dividindo a string em campos baseados em espaços e sinais de mais:

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

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

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

Responder3

Você talvez pudesse usar awk substr. No seu caso particular:

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

Ou se você quiser que funcione de qualquer maneira:

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

espero que isso ajude.

Responder4

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

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

para detectar a resolução da tela.

Para capturar 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 $2 } ' ) -i :0.0+0,0 -acodec libmp3lame -vcodec libx264  $(date +"%m%d%Y_%H%M%S_$HOSTNAME")_screencast.mp4

informação relacionada