Holen Sie sich nur die H + W-Geometrie meines Bildschirms ohne das spätere + x + y

9

Ich lese diesen Artikel . 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, wird eine Fehlermeldung mit dem folgenden Abschnitt angezeigt:

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ösung 1360x768anstelle von 1360x768+0+0?

Guest123ABC
quelle
1
Wenn Sie die Geometrie 1360x768 kennen, verwenden Sie einfach eine Variable
Panther
1
Ich erkenne das und habe es schon so erfolgreich gemacht. Aber ich habe versucht, die Erfahrung zu nutzen, um auch mein Wissen zu erweitern. :)
Guest123ABC
Ok viel Glück. Es gibt mehrere ausgezeichnete Tutorials auf awk im Internet.
Panther

Antworten:

10
  • 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 bestätigt (?<=geometry ), dass an der aktuellen Position in der Zeichenfolge die Zeichen "Geometrie" vorangestellt sind . Wenn die Zusicherung erfolgreich ist, stimmt die Engine mit dem Auflösungsmuster überein.

    Ein Lookbehind "verbraucht" keine Zeichen in der Zeichenfolge. Dies bedeutet, dass nach der schließenden Klammer die Regex-Engine an derselben Stelle in der Zeichenfolge steht, von der aus sie zu suchen begann: Sie hat sich nicht bewegt. Von dieser Position aus kann die Engine wieder mit der Zeichenübereinstimmung beginnen.

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

Sylvain Pineau
quelle
@ Guest123ABC Ich habe meine Antwort mit einer kürzeren Version des regulären Ausdrucks aktualisiert
Sylvain Pineau
6

Mein reiner awkAnsatz, die Zeichenfolge anhand von Leerzeichen und Pluszeichen in Felder aufzuteilen:

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'
Oli
quelle
5

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

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

Oder wenn Sie möchten, dass es auf jeden Fall funktioniert:

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

Ich hoffe das hilft.

Relikt
quelle
Oh ja! Vielen Dank! Der erste hat funktioniert! :) Der zweite liefert zwei Ergebnisse: eine 1 und dann die Auflösung, die in diesem Fall nicht funktionieren würde, aber dennoch eine coole Aussage für das Allgemeinwissen.
Guest123ABC
2
Sie sollten die Antwort von Sylvain verwenden. es ist schöner.
Relikt
1
Ich habe den grep-Teil in den Befehl awk verschoben (weil ich mir nicht helfen kann). Das Problem mit substr ist, dass feste Platzierungen verwendet werden. Auflösungen wie 1000x1000 werden es brechen, weil sie zu lang sind.
Oli
@Oli wow schöner Zug. Ich werde diesen Grep-Ersatz nicht vergessen. Danke für die Tipps. Sie haben völlig Recht mit dem Substrat, deshalb habe ich den zweiten Befehl hinzugefügt.
Relikt
2

Andere haben bereits Antworten für den gesamten Vorgang gegeben, aber nur um1360x768+0+01360x768 zu antworten. Wie komme ich von zu ? dann würde ich empfehlen, cutals einfachste Lösung zu verwenden, z

$ echo 1360x768+0+0 | cut -d+ -f1
1360x768
$
hlovdal
quelle
1

Ich habe vor einigen Wochen auch Beispiele für die Bildschirmaufnahme von Befehlszeilen ausprobiert. Als alternative Lösung können Sie verwenden

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

zum Erkennen der Bildschirmauflösung.

Sie können den Bildschirm mit internem Audio und Mikrofon aufnehmen

 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
kenn
quelle