Hanya dapatkan geometri H + W dari layar saya tanpa + x + y yang lebih baru

9

Saya membaca artikel ini . Ada pernyataan di sana yang berbunyi:

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 

Ketika saya menjalankan perintah saya mendapatkan kesalahan dengan bagian yang mengatakan:

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

Alasannya adalah bahwa ketika Anda menggunakan perintah ini di komputer saya itu output:

1360x768+0+0 

Bagaimana cara menghapus bagian terakhir dari output resolusi layar menjadi 1360x768bukan 1360x768+0+0?

Guest123ABC
sumber
1
Jika Anda mengetahui geometri, 1360x768, gunakan saja variabel
Panther
1
Saya menyadari ini, dan sudah berhasil melakukannya dengan cara ini. Tetapi saya mencoba menggunakan pengalaman itu untuk menambah pengetahuan awk saya juga. :)
Guest123ABC
OK, semoga berhasil. Ada beberapa tutorial bagus tentang awk di internet.
Panther

Jawaban:

10
  • Anda dapat menggunakan perlhanya untuk mendapatkan resolusi:

    xwininfo -root | perl -lne 's/.*geometry (\w+).*/$1/ or next; print'
    1360x768
    
  • Atau bahkan lebih pendek hanya dengan GNU grep:

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

    Penjelasan : Lookbehind (?<=geometry )menyatakan bahwa pada posisi saat ini dalam string, apa yang mendahului adalah karakter "geometri". Jika pernyataan berhasil, mesin cocok dengan pola resolusi.

    Tampilan di belakang tidak "mengonsumsi" karakter apa pun di string. Ini berarti bahwa setelah tanda kurung tutup, mesin regex dibiarkan berdiri di tempat yang sama dalam string dari mana ia mulai mencari: itu tidak bergerak. Dari posisi itu, maka engine dapat mulai mencocokkan karakter lagi.

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

Sylvain Pineau
sumber
@ Guest123ABC Saya telah memperbarui jawaban saya dengan versi yang lebih pendek dari ekspresi reguler
Sylvain Pineau
6

awkPendekatan saya yang murni , memisahkan string menjadi bidang berdasarkan spasi dan tanda tambah:

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

Metode yang mirip dengan ekspresi Perl Sylvain tetapi dengan sed:

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

Anda mungkin bisa menggunakan awk substr. Dalam kasus khusus Anda:

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

Atau jika Anda ingin itu berfungsi dalam hal apa pun:

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

semoga ini membantu.

Peninggalan
sumber
Oh ya! Terima kasih banyak! Yang pertama berhasil! :) Yang kedua menghasilkan dua hasil: a 1 dan kemudian resolusi yang tidak akan berfungsi dalam kasus ini, tetapi masih merupakan pernyataan keren untuk pengetahuan umum.
Tamu123ABC
2
Anda harus menggunakan jawaban dari sylvain. ini lebih baik.
Relic
1
Saya telah memindahkan bagian grep ke perintah awk (karena saya tidak bisa menahan diri). Masalah dengan substr adalah ia menggunakan penempatan tetap. Resolusi seperti 1000x1000 akan mematahkannya karena terlalu panjang.
Oli
@Oli wow langkah yang bagus. saya tidak akan melupakan penggantian grep itu. Terima kasih atas tipsnya. Anda benar tentang substr, ini sebabnya saya menambahkan perintah kedua.
Relic
2

Lainnya sudah menyediakan jawaban untuk operasi lengkap, tapi untuk menjawab hanya Bagaimana saya dapatkan dari 1360x768+0+0ke 1360x768? maka saya akan merekomendasikan menggunakan cutsebagai solusi yang paling sederhana, misalnya

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

Saya juga mencoba contoh tangkapan layar command line beberapa minggu yang lalu. Sebagai solusi alternatif yang bisa Anda gunakan

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

untuk mendeteksi resolusi layar.

Untuk menangkap layar dengan audio dan mikrofon internal, Anda dapat menggunakan

 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
sumber