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

8

Ich lese diesen Artikel . Dort gibt es eine Aussage, die besagt:

ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print ;}') -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 dem Abschnitt:

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

Der Grund ist, dass wenn Sie diesen Befehl auf meinem Computer verwenden:

1360x768+0+0 

Wie entferne ich den letzten Teil der Bildschirmauflösung, um 1360x768 anstelle von 1360x768+0+0 zu erhalten?

    
Guest123ABC 03.09.2014, 19:53

5 Antworten

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

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

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

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

    Ein Lookbehind "konsumiert" keine Zeichen in der Zeichenfolge. Das bedeutet, dass die Regex-Engine nach der schließenden Klammer an derselben Stelle in der Zeichenfolge stehen bleibt, von der aus sie angefangen hat, zu suchen: sie hat sich nicht bewegt. Von dieser Position aus kann die Engine die übereinstimmenden Zeichen erneut starten.

    Quelle: Link

Sylvain Pineau 03.09.2014 20:15
6

Mein Ansatz pure awk , der die Zeichenfolge in Felder basierend auf Leerzeichen und Pluszeichen aufteilt:

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

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

xwininfo -root | sed -nr 's/.*geometry ([0-9x]+).*//p'
    
Oli 03.09.2014 23:35
5

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

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

Oder wenn Sie möchten, dass es in jedem Fall funktioniert:

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

hoffe diese Hilfe.

    
Relic 03.09.2014 20:08
2

Andere haben bereits Antworten für die vollständige Operation gegeben, aber um nur zu antworten Wie bekomme ich von 1360x768+0+0 nach 1360x768 ? dann würde ich empfehlen, cut als die einfachste mögliche Lösung zu verwenden zB

$ echo 1360x768+0+0 | cut -d+ -f1
1360x768
$
    
hlovdal 04.09.2014 12:09
1

Ich habe vor ein paar Wochen auch versucht, Screenshots aus dem Kommandozeilen-Bildschirm zu machen. Als eine alternative Lösung können Sie

verwenden
 xdpyinfo  | grep dimensions | awk -F ' ' ' { print  } ' 

zur Erkennung der Bildschirmauflösung.

Um Bildschirm mit internem Audio und Mikrofon zu erfassen, können Sie

verwenden
 avconv -f   pulse -i default -f x11grab -r 15 -s $(xdpyinfo  | grep dimensions | awk -F ' ' ' { print  } ' ) -i :0.0+0,0 -acodec libmp3lame -vcodec libx264  $(date +"%m%d%Y_%H%M%S_$HOSTNAME")_screencast.mp4
    
kenn 04.09.2014 18:00

Tags und Links