错过 B 站上心爱的直播?试试这个”录播姬“!

广告

明明加了特别关注,Bilibili 却从不提醒;明明天天刷 B 站,却总是刷不到正在直播的 TA……

你,是否有这样的烦恼?你,是否为此感到困惑?

现在,录播姬来了!让你不再错过任何一场直播!就算一时有事,也能记录下这美好时刻!

录播姬打钱

前言

咳咳,说回正题。

老是错过哔哩哔哩上的直播,为此我很是苦恼。

都说遇事不决量子力学就上 Github。于是,我找到了这款优秀的开源项目:录播姬 | BiliBili Stream Recorder

这个开源项目完整度极高,多平台支持,所以没有服务器的同学也不用担心用不了,只是稍微麻烦点。

那就简单说说如何使用和配置通知服务吧~

安装、配置&使用(仅简要说明,官方文档更详细)

下载

录播姬官方网站 提供可以自动更新的编译版本。自行根据系统架构选择即可 (Github 上录播姬 Linux amd64 版本安装包)

安装

本教程默认下载后的安装包名为BililiveRecorder-CLI-linux-x64.zip, 安装目录为brec, 程序目录为brec/work, 工作目录为brec/file

使用 Systemd 作为后台运行服务,为保证安全以用户brec运行

本教程中运行系统为Debian

准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apt update
apt upgrade
apt install zip -y #安装后续所需软件

useradd brec #创建用户 brec

mkdir -p brec/file brec/work
chown -R brec:brec brec #将 brec 目录所有权转移给用户 brec
su brec #切换到用户 brec

cd brec/work
unzip BililiveRecorder-CLI-linux-x64.zip
mv BililiveRecorder.Cli brec
chmod +x brec
./brec --version #检查录播姬是否能正常运行
exit #退出用户 brec

配置 Systemd 运行

1
nano /etc/systemd/system/brec.service #创建 Systemd 服务文件

brec.service 文件模板如下:

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=BililiveRecorder
After=network.target

[Service]
User=brec
ExecStart=<dir>/brec/work/brec run --bind "http://*:23567" --http-basic-user "<username>" --http-basic-pass "<password>" "<dir>/brec/file"

[Install]
WantedBy=multi-user.target

模板内共有四个占位符,两个重复:

  1. <dir>表示brec文件夹所在目录
  2. <username>表示开启 http 访问后认证的用户名
  3. <password>表示开启 http 访问后认证的密码

编辑完 systemd 服务文件并保存后,别忘了systemctl daemon-reload来重载 Systemd

接下来开启 brec 服务systemctl start brec, http 服务将会在 23567 端口开放

如果需要开机启动就
systemctl enable brec

担心安全问题或者想开启域名访问,用Caddy反代开启tls即可

配置

录播姬的配置说明非常简单且详尽,不需要更多的解释和说明

自动脚本实现通知、转码、上传

虽然我们已经配置好录播姬,也可以很轻松地添加房间号、自动录制了。但作为一个懒人,没有提醒、自动上传分类、弹幕转码怎么行!

这个板块主要分享一个小脚本,涵盖 Telegram 提醒、弹幕转码、Rclone 自动上传网盘等功能

代码开源在 Github,本文内容可能不会及时更新,以托管在 GitHub 内的最新版本为准

下载

1
git clone https://github.com/Morax-xyc/Bililiveauto

基本原理

首先需要监听录播姬的 Webhook, 所以选 JavaScript 为语言,Nodejs 为运行时环境

使用 express web 框架作为接受服务器,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const dotenv = require(”dotenv“)
dotenv.config()
const express = require(’express‘);
const app = express();

app.use(express.json({ extended: false }));
app.post(’/bililive‘, function (req, res) {
res.sendStatus(200);
})

var server = app.listen(process.env.port, function () {

var host = server.address().address
var port = server.address().port

console.log(”BiliLiveAuto脚本正在运行, 地址为 http://%s:%s“, host, port);
})

其中引入了dotenv库来读取.env作为配置文件

接收完录播姬传递的webhook,根据其中EventType的值来判断录播姬传递的事件类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch(req.body.EventType) {
caseFileClosed“:
<略>
break;
caseStreamStarted“:
<略>
break;
caseSessionStarted“:
<略>
break;
caseStreamEnded“:
<略>
break;
default:
console.log(”Webhook: 判断类型: “ + req.body.EventType + ” => 提醒未发送“);
};

如果接收到开播、下播、录制的webhook,就通过tgnotice.js模块通知;接收到“文件关闭”的webhook,就启动runbash.js模块来运行bash指令转码、上传

配置

此脚本使用.env文件作为配置文件,模板如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# .env

#run
port=8081
rclonedir=od:/Bililive # rclone中配置的上传地址
danmufc=/home/danmu/DM # danmakufactory编译后的二进制文件
workdir=/home/bililiveauto # 脚本所在文件夹
bilifile=/home/brec/file # 录播姬的工作目录

#Telegram
TG_CHAT_ID=12345678 # Telegram ID
TG_TOKEN=9876543:abcdeffhijklmnopqrstuvwxyz # Telegram Bot Token

#功能开关

#是否上传原始文件?true/false
uploadorigin=false

#是否删除本地文件?true/false
deletelocal=true

通知

本脚本使用Telegram来通知,只需要向@userinfobot发送任意消息即可得到Telegram ID; 向@BotFather申请Bot获得Bot Token

最后将两者填入配置文件即可

当然要记得私聊一下你的bot

弹幕处理

弹幕处理使用了一个叫DanmakuFactory的项目

配置文件中的danmufc就需要自行编译DanmakuFactory后填入编译好的二进制文件地址

请在编译完成后自行配置并加上--save参数保存json文件以便使用。也可以使用下面我的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"resolution": [1920, 1080],
"scrolltime": 12.000000,
"fixtime": 5.000000,
"density": -1,
"fontname": "Microsoft YaHei",
"fontsize": 38,
"opacity": 180,
"outline": 0,
"shadow": 1,
"displayArea": 0.300000,
"scrollArea": 0.300000,
"bold": false,
"showUsernames": false,
"showMsgbox": false,
"msgboxSize": [500, 1080],
"msgboxPos": [10, 0],
"msgboxFontsize": 35,
"giftMinPrice": 0.00,
"blockmode": ["Btm","Special","Repeat"],
"statmode": []
}

保存在编译好的二进制文件所在目录下的DanmakuFactoryConfig.json即可

本配置去除所有特殊弹幕、只在30%的屏幕上显示弹幕、共显示12秒、去除重复弹幕

自动转封装

本脚本使用FFmpeg来处理视频文件

录播姬录制下来的文件为flv格式,但编码却是h264,所以可以很方便地转封装为mkv格式

自动上传

自动上传使用rclone

安装脚本:

1
curl https://rclone.org/install.sh | sudo bash

配置及使用建议Google一下,教程太多就不反复造轮子了

运行

运行本脚本需要先安装nodejs

建议使用nvm脚本快速安装

1
2
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
nvm install --lts

然后在此脚本目录运行node server.js即可

Systemd运行

直接使用node运行可能因为其他原因中断,建议用systemd保持常态化运行

1
nano /etc/systemd/system/bililiveauto.service #创建 Systemd 服务文件

systemd模板:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=兼容Bililive录播姬的自动提醒以及自动转码、上传脚本

[Service]
ExecStart=/usr/bin/node /home/Bililiveauto/server.js
Restart=always
User=brec
Group=brec
WorkingDirectory=/home/Bililiveauto

[Install]
WantedBy=multi-user.target

请修改上方路径为脚本所在路径

别忘了权限问题!
切换到脚本所在目录的父目录,然后运行chown -R brec:brec Bililiveauto

编辑完Systemd服务文件后运行systemctl daemon-reload重载Systemd,然后systemctl start bililiveauto开始运行,通过systemctl status bililiveauto确认运行没有问题后就可以安心享受自动化带来的便利了!

如果需要开机启动就
systemctl enable bililiveauto

最后一步

在录播姬的设置里, 将地址填入”webhook v2”即可, 如”http://127.0.0.1:8081"


错过 B 站上心爱的直播?试试这个”录播姬“!
https://www.morax-xyc.com/post/30ef1dc1/
作者
Morax-xyc
发布于
2022年8月16日
许可协议