Ottieni solo la geometria H + W del mio schermo senza il + successivo + x + y

8

Sto leggendo questo articolo . C'è una dichiarazione che dice:

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 eseguo il comando ottengo un errore con la sezione che dice:

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

Il motivo è che quando usi questo comando sul mio computer emette:

1360x768+0+0 

Come faccio a rimuovere l'ultima parte dell'output della risoluzione dello schermo per essere 1360x768 invece di 1360x768+0+0 ?

    
posta Guest123ABC 03.09.2014 - 19:53

5 risposte

10
  • Puoi utilizzare perl per ottenere solo la risoluzione:

    xwininfo -root | perl -lne 's/.*geometry (\w+).*// or next; print'
    1360x768
    
  • O ancora più corto con appena GNU grep :

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

    Spiegazione : il lookbehind (?<=geometry ) asserisce che nella posizione corrente nella stringa, ciò che precede è il carattere "geometry". Se l'asserzione ha successo, il motore corrisponde al modello di risoluzione.

    Un lookbehind non "consuma" alcun carattere sulla stringa. Ciò significa che dopo la parentesi di chiusura, il motore regex viene lasciato in piedi nello stesso punto della stringa da cui ha iniziato a cercare: non si è mosso. Da quella posizione, il motore può iniziare nuovamente a confrontare i caratteri.

    Fonte: link

risposta data Sylvain Pineau 03.09.2014 - 20:15
6

Il mio approccio% awk , suddividendo la stringa in campi basati su spazi e segni più:

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

Un metodo simile all'espressione Perl di Sylvain ma con sed :

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

Potresti forse usare awk substr . Nel tuo caso particolare:

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

O se vuoi che funzioni in ogni caso:

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

spero che questo aiuto.

    
risposta data Relic 03.09.2014 - 20:08
2

Altri hanno già fornito risposte per l'operazione completa, ma per rispondere solo Come ottengo da 1360x768+0+0 a 1360x768 ? quindi consiglierei di usare cut come la soluzione più semplice possibile ad es.

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

Ho anche provato alcuni esempi di cattura schermo a riga di comando alcune settimane fa. Come soluzione alternativa puoi usare

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

per rilevare la risoluzione dello schermo.

Per acquisire lo schermo con audio e microfono interni, puoi usare

 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
    
risposta data kenn 04.09.2014 - 18:00

Leggi altre domande sui tag