私はこれを読んでいます記事そこには次のような記述があります。
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
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
答え2
私の純粋なawk
アプローチは、スペースとプラス記号に基づいて文字列をフィールドに分割することです。
xwininfo -root | awk -F'[+| ]' '/geometry/ {print $4}'
Sylvain の Perl 式に似た方法ですが、次の点が異なりますsed
。
xwininfo -root | sed -nr 's/.*geometry ([0-9x]+).*/\1/p'
答え3
おそらく を使用できますawk
substr
。あなたの特定のケースでは:
xwininfo -root | awk '/geometry/ {print substr($2,1,8);}'
あるいは、どんな場合でも動作させたい場合:
xwininfo -root | awk '/geometry/ {print $2;}' | cut -d'+' -f1
これが役に立つことを願っています。
答え4
数週間前にもコマンドラインのスクリーンキャプチャの例を試しました。代替の解決策として、
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