Solo obtengo la geometría H+W de mi pantalla sin el posterior +x+y

Solo obtengo la geometría H+W de mi pantalla sin el posterior +x+y

estoy leyendo estoartículo. Hay una declaración allí que dice:

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 

Cuando ejecuto el comando me sale un error con la sección que dice:

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

La razón es que cuando usas este comando en mi computadora, genera:

1360x768+0+0 

¿Cómo elimino la última parte de la salida de resolución de pantalla en 1360x768lugar de 1360x768+0+0?

Respuesta1

  • Puede utilizar perlpara obtener sólo la resolución:

    xwininfo -root | perl -lne 's/.*geometry (\w+).*/$1/ or next; print'
    1360x768
    
  • O incluso más corto con solo GNU grep:

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

    Explicación: La búsqueda hacia atrás (?<=geometry )afirma que en la posición actual de la cadena, lo que precede son los caracteres "geometría". Si la afirmación tiene éxito, el motor coincide con el patrón de resolución.

    Una búsqueda hacia atrás no "consume" ningún carácter en la cadena. Esto significa que después del paréntesis de cierre, el motor de expresiones regulares queda en el mismo lugar de la cadena desde donde empezó a mirar: no se ha movido. Desde esa posición, el motor puede comenzar a hacer coincidir los caracteres nuevamente.

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

Respuesta2

Mi awkenfoque puro, dividir la cadena en campos basados ​​en espacios y signos más:

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

Un método similar a la expresión Perl de Sylvain pero con sed:

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

Respuesta3

Quizás podrías usar awk substr. En tu caso particular:

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

O si quieres que funcione en cualquier caso:

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

espero que esto ayude.

Respuesta4

También probé ejemplos de captura de pantalla de línea de comando hace unas semanas. Como solución alternativa puedes utilizar

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

para detectar la resolución de la pantalla.

Para capturar la pantalla con audio y micrófono internos, puede 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

información relacionada