Obtenir uniquement la géométrie H + W de mon écran sans le dernier + x + y

9

Je lis cet article . Il y a une déclaration qui dit:

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 

Lorsque j'exécute la commande, j'obtiens une erreur avec la section qui dit:

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

La raison en est que lorsque vous utilisez cette commande sur mon ordinateur, elle génère:

1360x768+0+0 

Comment supprimer la dernière partie de la sortie de la résolution d'écran à la 1360x768place de 1360x768+0+0?

Guest123ABC
la source
1
Si vous connaissez la géométrie, 1360x768, utilisez plutôt une variable
Panther
1
Je m'en rends compte et je l'ai déjà fait avec succès. Mais j'essayais d'utiliser l'expérience pour augmenter mes connaissances en awk également. :)
Guest123ABC
D'accord bonne chance. Il existe plusieurs excellents tutoriels sur awk sur Internet.
Panther

Réponses:

10
  • Vous pouvez utiliser perlpour obtenir uniquement la résolution:

    xwininfo -root | perl -lne 's/.*geometry (\w+).*/$1/ or next; print'
    1360x768
    
  • Ou encore plus court avec juste GNU grep:

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

    Explication : Le lookbehind (?<=geometry )affirme qu'à la position actuelle dans la chaîne, ce qui précède est le caractère "géométrie". Si l'assertion réussit, le moteur correspond au modèle de résolution.

    Un lookbehind ne "consomme" aucun caractère de la chaîne. Cela signifie qu'après la parenthèse fermante, le moteur d'expression régulière reste au même endroit de la chaîne à partir de laquelle il a commencé à chercher: il n'a pas bougé. À partir de cette position, le moteur peut recommencer à faire correspondre les caractères.

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

Sylvain Pineau
la source
@ Guest123ABC J'ai mis à jour ma réponse avec une version plus courte de l'expression régulière
Sylvain Pineau
6

Mon awkapproche pure , divisant la chaîne en champs basés sur des espaces et des signes plus:

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

Une méthode similaire à l'expression Perl de Sylvain mais avec sed:

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

Vous pourriez peut-être utiliser awk substr. Dans votre cas particulier:

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

Ou si vous voulez qu'il fonctionne dans tous les cas:

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

j'espère que cette aide.

Relique
la source
Oh oui! Merci beaucoup! Le premier a fonctionné! :) Le second produit deux résultats: un 1, puis la résolution qui ne fonctionnerait pas dans ce cas, mais toujours une déclaration cool pour les connaissances générales.
Guest123ABC
2
vous devriez utiliser la réponse de sylvain. c'est plus joli.
Relique du
1
J'ai déplacé la partie grep dans la commande awk (car je ne peux pas m'en empêcher). Le problème avec substr est qu'il utilise des emplacements fixes. Des résolutions comme 1000x1000 le casseront car elles sont trop longues.
Oli
@Oli wow nice move. je n'oublierai pas ce remplacement grep. Merci pour les conseils. Vous avez tout à fait raison sur le substrat, c'est pourquoi j'ai ajouté la deuxième commande.
Relic
2

D'autres ont déjà fourni des réponses pour l'opération complète, mais pour répondre uniquement Comment puis-je aller de 1360x768+0+0à 1360x768? alors je recommanderais d'utiliser cutcomme la solution la plus simple possible, par exemple

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

J'ai également essayé des exemples de capture d'écran en ligne de commande il y a quelques semaines. Comme solution alternative, vous pouvez utiliser

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

pour détecter la résolution d'écran.

Pour capturer l'écran avec l'audio et le microphone internes, vous pouvez utiliser

 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
la source