Linuxでニコニコ生放送(or録画)をする方法

2014/12/21

Tweet

環境

世の中にWindowsやらMacやらのやりかたは書いてあるが,Linuxはあんまりないのでメモしておく.特にloopbackとマイク音声のマージとか.

できること

インストール

Arch Linux上にて

なお,マイクを繋げる場合には,USBサウンドデバイスとかを使うと良い.自分の環境では,内蔵のものはノイズが酷すぎて使いものにならなかった.

ffmpegのバージョン

最近,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
URL/Stream

止まったときには

ビットレートが高すぎると止まる.ちゃんと止まらないようにはしてるけど.

止まった
止まった

対処法

一度リフレッシュボタンを押した後,生放送をしているウィンドウをリロードする. すると,URLとStreamが更新されるので,それを使って再接続を行う

リフレッシュボタン
リフレッシュボタン

スクリプトに追加する

止まったときには,スクリプトも停止する.よって,停止した場合に断末魔を上げてほしい.

$ ./niconico_namahousou.sh "URL" "STREAM" ; aplay "nanika"

としたらよさそう