7 x 24 小时无人监守录制、渲染弹幕、识别字幕、自动切片、自动上传、兼容超低配机器,启动项目,人人都是录播员。
📄 Documentation | ⚙️ Installation | 🤔 Reporting Issues
支持模型
如果您觉得项目不错,欢迎 ⭐ 也欢迎 PR 合作,如果有任何疑问,欢迎提 issue 交流。
自动监听并录制B站直播和弹幕(含付费留言、礼物等),根据分辨率转换弹幕、语音识别字幕并渲染进视频,根据弹幕密度切分精彩片段并通过视频理解大模型生成有趣的标题,自动投稿视频和切片至B站,兼容无GPU版本,兼容超低配置服务器与主机。
- 速度快:采用
pipeline
流水线处理视频,理想情况下录播与直播相差半小时以内,没下播就能上线录播,目前已知 b 站录播最快版本! - 多房间:同时录制多个直播间内容视频以及弹幕文件(包含普通弹幕,付费弹幕以及礼物上舰等信息)。
- 占用小:自动删除本地已上传的视频,极致节省空间。
- 模版化:无需复杂配置,开箱即用,通过 b 站搜索建议接口自动抓取相关热门标签。
- 检测片段并合并:对于网络问题或者直播连线导致的视频流分段,能够自动检测合并成为完整视频。
- 自动渲染弹幕:自动转换xml为ass弹幕文件,该转换工具库已经开源 DanmakuConvert 并且渲染到视频中形成有弹幕版视频并自动上传。
- 硬件要求极低:无需GPU,只需最基础的单核CPU搭配最低的运存即可完成录制,弹幕渲染,上传等等全部过程,无最低配置要求,10年前的电脑或服务器依然可以使用!
- ( 🎉 NEW)自动渲染字幕(如需使用本功能,则需保证有 Nvidia 显卡):采用 OpenAI 的开源模型
whisper
,自动识别视频内语音并转换为字幕渲染至视频中。 - ( 🎉 NEW)自动切片上传:根据弹幕密度计算寻找高能片段并切片,该自动切片工具库已开源 auto-slice-video
,结合多模态视频理解大模型
GLM-4V-PLUS
自动生成有意思的切片标题及内容,并且自动上传。 - ( 🎉 NEW)持久化登录/下载/上传视频(支持多p投稿):bilitool已经开源,实现持久化登录,下载视频及弹幕(含多p)/上传视频(可分p投稿),查询投稿状态,查询详细信息等功能,一键pip安装,可以使用命令行 cli 操作,也可以作为api调用。
- ( 🎉 NEW)自动多平台循环直播推流:该工具已经开源 looplive 是一个 7 x 24 小时全自动循环多平台同时推流直播工具。
项目架构流程如下:
graph TD
User((用户))--record-->startRecord(启动录制)
startRecord(启动录制)--保存视频和字幕文件-->videoFolder[(Video 文件夹)]
User((用户))--scan-->startScan(启动扫描 Video 文件夹)
videoFolder[(Video 文件夹)]<--间隔两分钟扫描一次-->startScan(启动扫描 Video 文件夹)
startScan <--视频文件--> whisper[whisperASR模型]
whisper[whisperASR模型] --生成字幕-->parameter[查询视频分辨率]
subgraph 启动新进程
parameter[查询分辨率] -->ifDanmaku{判断}
ifDanmaku -->|有弹幕| DanmakuConvert[DanmakuConvert]
ifDanmaku -->|无弹幕| ffmpeg1[ffmpeg]
DanmakuConvert[DanmakuConvert] --根据分辨率转换弹幕--> ffmpeg1[ffmpeg]
ffmpeg1[ffmpeg] --渲染弹幕及字幕 --> Video[视频文件]
Video[视频文件] --计算弹幕密度并切片--> GLM[多模态视频理解模型]
GLM[多模态视频理解模型] --生成切片信息--> slice[视频切片]
end
slice[视频切片] --> uploadQueue[(上传队列)]
Video[视频文件] --> uploadQueue[(上传队列)]
User((用户))--upload-->startUpload(启动视频上传进程)
startUpload(启动视频上传进程) <--扫描队列并上传视频--> uploadQueue[(上传队列)]
-
OS: Ubuntu 22.04.4 LTS
尽量使用 22.04+ 的版本,更早版本的 ubuntu 自带 gcc 版本无法更新至 biliup-rs 所需版本,若使用较早版本,请参考 version `GLIBC_2.34‘ not found简单有效解决方法。
-
CPU:2核 Intel(R) Xeon(R) Platinum 85
-
GPU:无
-
内存:2G
-
硬盘:40G
-
带宽: 3Mbps
-
Python 版本: 3.10
个人经验:若想尽可能快地更新视频,主要取决于上传速度而非弹幕渲染速度,因此建议网络带宽越大越好。
更详细的教程请参考文档 bilive
Note
如果你是 windows 用户,请使用 WSL 运行本项目。
首先介绍本项目三种不同的处理模式:
pipeline
模式(默认): 目前最快的模式,需要 GPU 支持,最好在blrec
设置片段为半小时以内,asr 识别和渲染并行执行,分 p 上传视频片段。append
模式: 基本同上,但 asr 识别与渲染过程串行执行,比 pipeline 慢预计 25% 左右,对 GPU 显存要求较低,兼顾硬件性能与处理上传效率。merge
模式: 等待所有录制完成,再进行识别渲染合并过程,上传均为完整版录播(非分 P 投稿),等待时间较长,效率较慢,适合需要上传完整录播的场景。
Important
凡是用到 GPU 均需保证 GPU 显存大于运行程序所需 VRAM,具体计算 VRAM 方法可以参考该部分。
是否有 GPU 以
nvidia-smi
显示 nvidia GPU 驱动以及nvcc -V
显示CUDA
版本号为准。如果未配置显卡驱动或未安装CUDA
,即使有 GPU 也无法使用,而会使用 CPU 推理(不推荐,可根据自身硬件条件判断是否尝试 CPU 推理)。
Tip
如果你是 windows 用户,请使用 WSL 运行本项目。
由于项目引入了我写的两个 submodule DanmakuConvert 和 auto-slice-video,因此推荐 clone 项目时就更新 submodules。
git clone --recurse-submodules https://github.com/timerring/bilive.git
如果你没有采用上述方式 clone 项目,请更新 submodules:
git submodule update --init --recursive
cd bilive
pip install -r requirements.txt
此外请根据各自的系统类型安装对应的 ffmpeg
,例如 ubuntu 安装 ffmpeg。
./setPath.sh && source ~/.bashrc
项目默认采用 small
模型,请点击下载所需文件,并放置在 src/subtitle/models
文件夹中。
此功能默认关闭,如果需要打开请将
src/config.py
文件中的AUTO_SLICE
参数设置为True
在配置文件 src/config.py
中,SLICE_DURATION
以秒为单位设置切片时长(不建议超过 1 分钟),在项目的自动切片功能需要使用到智谱的 GLM-4V-PLUS
模型,请自行注册账号并申请 API Key,填写到 src/config.py
文件中对应的 Your_API_KEY
中。
由于一般日志打印不出二维码效果(docker 的日志不确定是否能打印,等发布新image时再修改,docker 版本请先参考文档bilive,本 README 只针对源码部署),所以这步需要提前在机器上安装 bilitool:
pip install bilitool
# 然后使用 app 端扫码登录
# 会导出 cookie.json 文件
bilitool login --export
将登录的 cookie.json 文件留在本项目根目录下,./upload.sh
启动后即可删除该文件。(持久化登录,该步只需执行一次)
./record.sh
请先确保你已经完成步骤 3
,正确下载并放置了模型文件。
输入以下指令即可检测已录制的视频并且自动合并分段,自动进行弹幕转换,字幕识别与渲染的过程:
./scan.sh
./upload.sh
相应的执行日志请在 logs
文件夹中查看,如果有问题欢迎在 issue
中提出。
logs # 日志文件夹
├── blrec # blrec 录制日志
│ └── ...
├── scan # scan 处理日志
│ └── ...
├── upload # upload 上传日志
│ └── ...
└── runtime # 每次执行的日志
└── ...
无 GPU 版本过程基本同上,可以跳过步骤 3 配置 whisper 的部分,需要注意在执行步骤 5 之前完成以下设置将确保完全用 CPU 渲染视频弹幕。
- 请将
src/config.py
文件中的GPU_EXIST
参数设置为False
。(若置为True
但又没有 GPU 或者 Nvidia 驱动找不到,则会使用 CPU 推理,非常消耗 CPU 计算资源,不推荐,可自行根据硬件条件进行尝试。) - 将
MODEL_TYPE
调整为merge
或者append
。
Tip
上传默认参数如下,[]中内容全部自动替换。可以在 src/config.py
中自定义相关配置,映射关键词为 {artist}
、{date}
、{title}
、{source_link}
,可自行组合删减定制模板:
- 标题模板是
{artist}直播回放-{date}-{title}
,效果为"【弹幕+字幕】[XXX]直播回放-[日期]-[直播间标题]",可自行修改。 - 简介模板是
{artist}直播,直播间地址:{source_link} 内容仅供娱乐,直播中主播的言论、观点和行为均由主播本人负责,不代表录播员的观点或立场。
,效果为"【弹幕+字幕】[XXX]直播,直播间地址:[https://live.bilibili.com/XXX] 内容仅供娱乐,直播中主播的言论、观点和行为均由主播本人负责,不代表录播员的观点或立场。",可自行修改。 - 默认标签是根据主播名字自动在 b 站搜索推荐中抓取的[热搜词],详见bilibili-API-collect。
也可以直接拉取 docker 镜像运行,默认 latest。守护进程是 upload,而 record 以及 scan 需要在配置后手动启动,相关配置以及启动流程从 3.2 开始即可。
Important
如果不需要使用可视化页面可以忽略以下提醒:
- 不推荐在有公网 ip 的服务器上直接暴露 22333 端口访问管理页面,如果使用请自行限制端口入站 ip 规则或者采用 nginx 等反向代理配置密钥限制他人访问。
- 管理页面主要针对 record 模块,只有手动运行 record 后(步骤5)才能访问到管理页面。
sudo docker run \
-itd \
--name bilive_docker \
-p 22333:2233 \
ghcr.io/timerring/bilive:0.2.10
sudo docker run \
-itd \
--gpus 'all,"capabilities=compute,utility,video"' \
--name bilive_docker_gpu \
-p 22333:2233 \
ghcr.io/timerring/bilive-gpu:0.2.10
compose.yml
调整方法见 Installation。
默认 CPU latest version,如需使用 GPU 版本,请自行在 compose.yml
中调整。
docker compose up -d
请先在 compose.yml
中调整相关配置,然后执行以下命令:
docker build
docker compose up -d