このスクリプトを書いた経緯
Linux環境で艦これのプレイ動画を撮りたかったけど、やり方の解説が全然見つからない。
ffmpegの"x11grab"オプションを使えば撮れそうなので、ウィンドウの座標を取得してffmpegを実行するだけのスクリプトを書きました。
同じ事をやりたい人が居るかも知れないので、ココに置いときます。
環境
- arch Linux
- bash 4.4.12(1)
- xwininfo 1.1.3-1
- gawk 4.1.4
- ffmpeg 3.3.3
使い方
$window_titleに対象ウィンドウの名前を設定する
- 艦これを起動する
- ターミナルを起動して、"xwininfo"(オプション無し)を実行
- マウスカーソルが"+"(十字マーク)になるので艦これのウィンドウをクリック
- ターミナルにウィンドウの情報が表示されるので、Window id の後ろにある名前をコピーする
- スクリプトの"window_title="の名前を書き換える
Y座標のオフセットを設定する
xwininfoの座標はウィンドウタイトルバーのすぐ下、ブラウザ画面領域の左上隅の位置なので、タイトルバーと艦これの画面の間にアドレスバーやメニューバーなどがあるとその分画面の下が見切れます。
その場合は各種バーを非表示にするか、バーの幅(ピクセル数)をoffset=の行に指定して下さい。
実行
kancolle_movie_capture.sh [保存先ファイルパス]
注意点
- 各種エラー処理は全く入ってません
- ffmpegはの全く分からないのでパラメータは適当です
ソース
kancolle_movie_capture.sh
#!/bin/bash
# 艦これプレイ動画キャプチャ用スクリプト
# 使い方:kancolle_movie_capture.sh [保存先ファイルパス]
# ウィンドウ座標取得用関数
# xwininfoに指定するウィンドウの名前はxwininfoをオプション無しで実行して艦これの画面をクリックすれば確認できるので、
# $window_titleの値をその名前に編集する
get_position(){
local window_title=$1
xwininfo -name "${window_title}" |\
gawk '
BEGIN{
FS = ":";
}
{
num = gensub(" ","", "g", $2);
}
$1 ~ /Absolute upper-left X/{
x = num;
}
$1 ~ /Absolute upper-left Y/{
y = num;
exit;
}
END{
print(x, y);
}
'
}
# 録画用関数
# get_position()で取得した位置座標、サイズ、保存先ファイルのパスをffmpegに渡して実行する
# ffmegの設定は良く分からないので適当
rec(){
local size=$1
local pos_x=$2
local pos_y=$3
local file_path=$4
ffmpeg \
-video_size ${size} \
-rtbufsize 100M \
-r 24 \
-draw_mouse 0 \
-vsync passthrough \
-f x11grab \
-i :0.0+${pos_x},${pos_y} \
-f alsa \
-ac 2 \
-i pulse \
-acodec copy \
-c:v libx264 \
-crf 20 \
-auto-alt-ref 0 \
-y \
${file_path}
}
#Main
file_path=$1
window_title="艦隊これくしょん -艦これ- - オンラインゲーム - DMM GAMES"
size="800x480"
offset=0
declare -a pos=($(get_position "${window_title}"))
pos[1]=$((${pos[1]} + ${offset}))
rec ${size} ${pos[0]} ${pos[1]} ${file_path}
exit