世の中にWindowsやらMacやらのやりかたは書いてあるが,Linuxはあんまりないのでメモしておく.特にloopbackとマイク音声のマージとか.
Arch Linux上にて
なお,マイクを繋げる場合には,USBサウンドデバイスとかを使うと良い.自分の環境では,内蔵のものはノイズが酷すぎて使いものにならなかった.
最近,ffmpegがバージョンアップして録画がおかしくなっている. 具体的には,
の環境では問題が発生していた.
では問題ない.
具体的には,
とか良さそう.
自分は
を使っている.
#!/bin/sh
if [ $# -ne 1 ];then
echo "引数たりないよ"
exit 1
fi
ffmpeg -f x11grab -s 1920x1080 -r 15 -i :0.0 \
-f pulse -ac 2 -i alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-stereo.monitor \
-f pulse -ac 1 -i alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-mono \
-filter_complex amix=inputs=2 \
-c:v libx264 -preset fast -pix_fmt yuv420p -strict -2 -c:a aac \
-ab 96k -ar 22050 -threads 0 -f mp4 $1
使いかたは,
$ ./niconico_rokuga.sh /tmp/hoge.mp4
解像度は自分で設定してほしい デバイス名は,
$ pactl list sources
で検索したときのName:である.つまり
$ pactl list sources | grep Name:
Name: alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-stereo.monitor
Name: alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-mono
すれば良い
同じ方法でやれば良い.ただし,すこし違う
#!/bin/sh
if [ $# -ne 2 ];then
echo "引数たりないよ"
exit 1
fi
INRES=1920x1080
OUTRES=640x360
MAXRATE=288k
FPS=15
ffmpeg -f x11grab -s $INRES -r $FPS -i :0.0 \
-f pulse -ac 2 -i alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-stereo.monitor \
-f pulse -ac 1 -i alsa_input.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00-Device.analog-mono \
-filter_complex amix=inputs=2 \
-c:v libx264 -preset fast -f flv -bufsize $MAXRATE -b:v $MAXRATE -minrate $MAXRATE -maxrate $MAXRATE -s $OUTRES -pix_fmt yuv420p -strict -2 -c:a aac \
-ab 96k -ar 22050 -threads 0 -f flv "$1/$2"
使いかたは,
$ ./niconico_namahousou.sh "URL" "Stream"
ここでのURL,Streamとは,生放送画面のここである.
ビットレートが高すぎると止まる.ちゃんと止まらないようにはしてるけど.
一度リフレッシュボタンを押した後,生放送をしているウィンドウをリロードする. すると,URLとStreamが更新されるので,それを使って再接続を行う
止まったときには,スクリプトも停止する.よって,停止した場合に断末魔を上げてほしい.
$ ./niconico_namahousou.sh "URL" "STREAM" ; aplay "nanika"
としたらよさそう