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 1360x768
lugar de 1360x768+0+0
?
Respuesta1
Puede utilizar
perl
para 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 awk
enfoque 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