Table of Contents
ffmpeg
と xwininfo
コマンドでスクリンキャストを取るシェールスクリプトを作成してみた。
1 特定のウィンドウを録画する
第一引数に録画ビデオファイルの保存パスを指定する。
#!/bin/sh ########################################################################### # fsc-window.sh - take screen video cast for selected window # # Authors: Luo Zengbin <jalen.cn@gmail.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Usage: # $fsc-window.sh $1 第一引数に録画ビデオファイルの保存パスを指定する。 ########################################################################### #################################### # 奇数を偶数に変換する処理 #################################### function even_round { if [ `expr $1 % 2` == 0 ]; then echo $1 else echo $(($1 - 1)) fi } echo "録画対象Windowをカーソルで選択してください。" VFILE=$1 INFO=$(xwininfo -frame) WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+') WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' ) # Windowsの横サイズと縦サイズを偶数にする WIN_GEO_X=$(echo $WIN_GEO | cut -d 'x' -f 1) WIN_GEO_Y=$(echo $WIN_GEO | cut -d 'x' -f 2) WIN_GEO="$(even_round $WIN_GEO_X)x$(even_round $WIN_GEO_Y)" echo "画面サイズ:$WIN_GEO" echo "画面位置 :$WIN_XY" # 録画開始 ffmpeg -show_region 1 -f x11grab -framerate 25 -video_size $WIN_GEO -i :0.0+$WIN_XY \ -dcodec copy -pix_fmt yuv420p -c:v libx264 -preset veryfast -qscale 1 -y $VFILE
ハマッたところ
- ビデオの横と縦のサイズを偶数にしないと、iphoneで再生時に真っグリンな画面しか見れない
- shell関数の戻り値は
return
じゃなくて、echo
を使うべき。return
はプロセスの 実行結果ステータスと同じ使い方、ステータスを示すに使う
コマンドの便利なオプション
xwininfo -frame
対象のウィンドウをカーソルで選択できるオプションffmpeg -show_region 1
録画対象範囲を点線で囲んで分かりやすくするオプション、1は点 線の太さを示す
2 全画面を録画する
xwininfo -root
でフルスクリーンの情報を取得することができます。
#!/bin/sh ########################################################################### # fsc-full.sh - take full screen video cast # # Authors: Luo Zengbin <jalen.cn@gmail.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Usage: # $fsc-full.sh $1 第一引数に録画ビデオファイルの保存パスを指定する。 ########################################################################### WIN_GEO=$(xwininfo -root | grep 'geometry' | awk '{print $2;}' | cut -d '+' -f 1) # 録画開始 ffmpeg -show_region 1 -f x11grab -framerate 25 -video_size $WIN_GEO -i :0.0 \ -dcodec copy -pix_fmt yuv420p -c:v libx264 -preset veryfast -qscale 1 -y $1
3 録画サンプル
録画テストサンプル
ばっちりだね。 めでたしめでたし。