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 1360x768
anstelle 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 awk
Ansatz, 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