Bekomme nur die H+W Geometrie meines Bildschirms ohne das spätere +x+y

Bekomme nur die H+W Geometrie meines Bildschirms ohne das spätere +x+y

Ich lese diesArtikel. Dort gibt es eine Aussage, die lautet:

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 

Wenn ich den Befehl ausführe, erhalte ich eine Fehlermeldung mit folgendem Abschnitt:

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

Der Grund dafür ist, dass bei Verwendung dieses Befehls auf meinem Computer Folgendes ausgegeben wird:

1360x768+0+0 

Wie entferne ich den letzten Teil der Bildschirmauflösungsausgabe, sodass er 1360x768anstelle von lautet 1360x768+0+0?

Antwort1

  • Sie können verwenden perl, um nur die Auflösung zu erhalten:

    xwininfo -root | perl -lne 's/.*geometry (\w+).*/$1/ or next; print'
    1360x768
    
  • Oder noch kürzer mit nur GNU grep:

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

    Erläuterung: Der Lookbehind (?<=geometry )behauptet, dass an der aktuellen Position in der Zeichenfolge die Zeichen „geometry“ vorangestellt sind. Wenn die Behauptung erfolgreich ist, stimmt die Engine mit dem Auflösungsmuster überein.

    Ein Lookbehind „verbraucht“ keine Zeichen in der Zeichenfolge. Das bedeutet, dass die Regex-Engine nach der schließenden Klammer an genau derselben Stelle in der Zeichenfolge stehen bleibt, von der aus sie mit der Suche begonnen hat: Sie hat sich nicht bewegt. Von dieser Position aus kann die Engine erneut mit dem Abgleichen von Zeichen beginnen.

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

Antwort2

Mein einfacher awkAnsatz, bei dem die Zeichenfolge basierend auf Leerzeichen und Pluszeichen in Felder aufgeteilt wird:

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

Eine ähnliche Methode wie Sylvains Perl-Ausdruck, jedoch mit sed:

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

Antwort3

Sie könnten vielleicht verwenden awk substr. In Ihrem speziellen Fall:

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

Oder wenn es auf jeden Fall funktionieren soll:

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

Ich hoffe das hilft.

Antwort4

Ich habe vor ein paar Wochen auch Beispiele für die Bildschirmaufnahme über die Befehlszeile ausprobiert. Als alternative Lösung können Sie verwenden

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

zur Erkennung der Bildschirmauflösung.

Um den Bildschirm mit internem Audio und Mikrofon aufzunehmen, können Sie verwenden

 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

verwandte Informationen