画面のH + Wジオメトリのみを取得し、後で+ x + yを取得しない


9

私はこの記事を読んでいます。そこに行く声明があります:

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 

コマンドを実行すると、次のセクションでエラーが発生します。

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

その理由は、私のコンピューターでこのコマンドを使用すると、次のように出力されるためです。

1360x768+0+0 

1360x768代わりに、画面解像度出力の最後の部分を削除するにはどうすればよい1360x768+0+0ですか?


1
1360x768のジオメトリがわかっている場合は、変数ではなく変数を使用します
Panther

1
私はこれに気づき、すでにこの方法で成功しています。しかし、私は私の経験をawkの知識を増やすためにも使用しようとしていました。:)
Guest123ABC 2014

わかった、うまくいくといいね。インターネット上のawkには、いくつかの優れたチュートリアルがあります。
Panther

回答:


10
  • perl解像度のみを取得するために使用できます。

    xwininfo -root | perl -lne 's/.*geometry (\w+).*/$1/ or next; print'
    1360x768
    
  • またはGNUだけでさらに短くするgrep

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

    説明:後読み(?<=geometry )は、文字列の現在の位置で先行するのは文字「geometry」であることを表明しています。アサーションが成功した場合、エンジンは解決パターンに一致します。

    後読みは文字列の文字を「消費」しません。つまり、閉じ括弧の後、正規表現エンジンは、文字列内で検索を開始した場所とまったく同じ場所に立ったままになります。つまり、移動していません。その位置から、エンジンは文字のマッチングを再開できます。

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


@ Guest123ABC正規表現の短いバージョンで回答を更新しました
シルヴァンピノー14

6

awkスペースとプラス記号に基づいて文字列をフィールドに分割する私の純粋なアプローチ:

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

シルヴァンのPerlの式にはなくと同様の方法sed

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

5

あなたは多分使用できますawk substr。あなたの特定のケースでは:

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

または、どのような場合でも機能させたい場合:

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

この助けを願っています。


そうそう!どうもありがとうございました!最初のものはうまくいきました!:) 2番目の結果は2つの結果を生成します。1と、この場合は機能しない解決策ですが、一般的な知識のためのクールなステートメントです。
Guest123ABC 2014

2
あなたはシルヴァンからの答えを使うべきです。それはより良いです。
Relic

1
私はgrepの部分をawkコマンドに移動しました(私は自分自身を助けることができないため)。substrの問題は、固定配置を使用していることです。1000x1000のような解像度は、長すぎるため壊れます。
Oli

@オリうわー素敵な動き。そのgrepの置き換えについては忘れません。ヒントをありがとう。あなたはsubstrについて完全に正しいです、これが私が2番目のコマンドを追加した理由です。
Relic

2

その他は、すでに完全な操作のための答えを提供してきたが、唯一答えるために、私はから入手できますどのよう1360x768+0+01360x768次に、私はcut可能な限り簡単な解決策として使用することをお勧めします、例えば

$ echo 1360x768+0+0 | cut -d+ -f1
1360x768
$

1

また、数週間前にコマンドラインの画面キャプチャの例を試しました。使用できる代替ソリューションとして

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

画面の解像度を検出します。

内蔵オーディオとマイクで画面をキャプチャするには、次を使用できます

 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.