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

AI 摘要
文章介绍了一个开源项目“录播姬 | BiliBili Stream Recorder”,该项目可以帮助用户自动录制、转码和上传B站直播,并提供通知服务。文章首先介绍了如何安装和配置录播姬,并使用Systemd作为后台运行服务。然后介绍了一个自动脚本实现通知、转码和上传的方法,该脚本使用Node.js和Express框架实现,同时使用Telegram进行通知、使用DanmakuFactory进行弹幕转码、使用FFmpeg进行自动转封装、使用rclone进行自动上传。最后,文章提供了使用pm2进行持久化运行和开机自启的方法。
警告
本文最后更新于 2023-02-06,文中内容可能已过时。
更新日志
2023-02-06 替换systemd持久化运行方式为pm2

明明加了特别关注,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
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) {
        case "FileClosed":
           <>
            break;
        case "StreamStarted":
           <>
            break;
        case "SessionStarted":
           <>
            break;
        case "StreamEnded":
           <>
            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即可

安装pm2

1
npm install pm2 -g

运行bililiveauto

1
pm2 start server.js --name bililiveauto

配置pm2开机自启 root用户全自动,非root用户请执行命令后根据提示复制命令执行

1
pm2 startup

储存当前服务列表并加入自启

1
pm2 save

此致,你的bililiveauto将自动在后台运行并在重启时自启。可使用pm2 status查看服务状态,pm2 logs bililiveauto查看日志,pm2 monit打开状态监视器。

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