Skip to content

Commit 46754dc

Browse files
committed
docs: update docs
1 parent e969d0b commit 46754dc

File tree

8 files changed

+121
-25
lines changed

8 files changed

+121
-25
lines changed

docs/getting-started.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11

22
# Introduction
33

4-
自动监听并录制B站直播和弹幕、自动转换xml弹幕(含付费留言、礼物等)为ass并渲染进视频,自动投稿**弹幕版视频****无弹幕视频**至B站,无需GPU,兼容超低配置服务器与主机,**兼容Windows 和 linux操作系统**
4+
自动监听并录制B站直播和弹幕(含付费留言、礼物等),根据分辨率转换弹幕、语音识别字幕并渲染进视频,根据弹幕密度切分精彩片段并通过视频理解大模型生成有趣的标题,自动投稿视频和切片至B站,兼容无GPU版本,兼容超低配置服务器与主机
55

66
## Major features
77

8-
- **速度快**:采用 `pipeline` 流水线处理视频,理想情况下录播与直播相差半小时以内,没下播就能上线录播!
8+
- **速度快**:采用 `pipeline` 流水线处理视频,理想情况下录播与直播相差半小时以内,没下播就能上线录播**目前已知 b 站录播最快版本**
99
- **多房间**:同时录制多个直播间内容视频以及弹幕文件(包含普通弹幕,付费弹幕以及礼物上舰等信息)。
1010
- **占用小**:自动删除本地已上传的视频,极致节省空间。
1111
- **模版化**:无需复杂配置,开箱即用,( :tada: NEW)通过 b 站搜索建议接口自动抓取相关热门标签。
1212
- **检测片段并合并**:对于网络问题或者直播连线导致的视频流分段,能够自动检测合并成为完整视频。
13-
- **渲染弹幕版视频**:自动转换xml为ass弹幕文件并且渲染到视频中形成**有弹幕版视频**并自动上传。
13+
- **自动渲染弹幕**:自动转换xml为ass弹幕文件并且渲染到视频中形成**有弹幕版视频**并自动上传。
1414
- **硬件要求极低**:无需GPU,只需最基础的单核CPU搭配最低的运存即可完成录制,弹幕渲染,上传等等全部过程,无最低配置要求,10年前的电脑或服务器依然可以使用!
1515
- **( :tada: NEW)自动渲染字幕**(如需使用本功能,则需保证有 Nvidia 显卡):采用 OpenAI 的开源模型 [`whisper`](https://github.com/openai/whisper),自动识别视频内语音并转换为字幕渲染至视频中。
16+
- **( :tada: NEW)自动切片上传**:根据弹幕密度计算寻找高能片段并切片,结合多模态视频理解大模型 [`GLM-4V-PLUS`](https://bigmodel.cn/dev/api/normal-model/glm-4) 自动生成有意思的切片标题及内容,并且自动上传。
1617

1718

1819
## Architecture diagram
@@ -33,8 +34,13 @@ graph TD
3334
ifDanmaku -->|有弹幕| DanmakuFactory[DanmakuFactory]
3435
ifDanmaku -->|无弹幕| ffmpeg1[ffmpeg]
3536
DanmakuFactory[DanmakuFactory] --根据分辨率转换弹幕--> ffmpeg1[ffmpeg]
37+
ffmpeg1[ffmpeg] --渲染弹幕及字幕 --> Video[视频文件]
38+
Video[视频文件] --计算弹幕密度并切片--> GLM[多模态视频理解模型]
39+
GLM[多模态视频理解模型] --生成切片信息--> slice[视频切片]
3640
end
37-
ffmpeg1[ffmpeg] --渲染弹幕及字幕 --> uploadQueue[(上传队列)]
41+
42+
slice[视频切片] --> uploadQueue[(上传队列)]
43+
Video[视频文件] --> uploadQueue[(上传队列)]
3844
3945
User((用户))--upload-->startUpload(启动视频上传进程)
4046
startUpload(启动视频上传进程) <--扫描队列并上传视频--> uploadQueue[(上传队列)]

docs/install-questions.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,28 @@ Reference: https://blog.csdn.net/huazhang_001/article/details/128828999
1414

1515
尽量使用 22.04+ 的版本,更早版本的 ubuntu 自带 gcc 版本无法更新至 DanmakuFactory 以及 biliup-rs 所需版本。
1616

17-
解决方案:手动更新版本,参照链接操作即可。
17+
解决方案:手动更新版本,参照链接操作即可。
18+
19+
## requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
20+
21+
https://stackoverflow.com/questions/70379603/python-script-is-failing-with-connection-aborted-connectionreseterror104
22+
23+
众所周知的网络环境原因
24+
25+
解决方案:proxy。
26+
27+
## ERROR: Could not find a version that satisfies the requirement triton==3.1.0 (from versions: none) ERROR: No matching distribution found for triton==3.1.0
28+
29+
From [issue 168](https://github.com/timerring/bilive/issues/168)
30+
31+
根据 https://github.com/triton-lang/triton/issues/1057 确实可能存在这样的问题。
32+
33+
解决方案:我查 pypi 里已经更新了 triton 3.1.0 版本:https://pypi.org/project/triton/#history 可以考虑升级一下 pip,或者直接从 huggingface 上拉 whl 安装也没问题。测试机器版本 linux python3.10.12 pip 下是没问题的。
34+
35+
> 另外,triton 是一个推理的库,如果不需要用到 whisper 生成字幕的话,不装它也可以。
36+
37+
## ModuleNotFoundError: No module named 'fcntl'
38+
39+
文件锁 `fcntl` 模块不支持 windows,有一些替代方式,但是最佳的解决方法就是使用 WSL 运行本项目。
40+
41+
解决方案:使用 WSL 运行本项目。

docs/installation.md

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@
1616

1717
> 是否有 GPU 以 `nvidia-smi` 显示 nvidia GPU 驱动以及 `nvcc -V` 显示 `CUDA` 版本号为准。如果未配置显卡驱动或未安装 `CUDA`,即使有 GPU 也无法使用,而会使用 CPU 推理(不推荐,可根据自身硬件条件判断是否尝试 CPU 推理)。
1818
19-
> [!TIP]
20-
> 如果你是 windows 用户,请不要使用命令提示符(Command Prompt)或 Windows PowerShell,请使用 [PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4) 或 WSL 或 **Git Bash**(推荐)。
21-
>
22-
> **注意:PowerShell 和 Windows PowerShell 是[不同的应用程序](https://learn.microsoft.com/en-us/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.4&viewFallbackFrom=powershell-7.3)**
19+
> [!NOTE]
20+
> 如果你是 windows 用户,请使用 WSL 运行本项目。
2321
2422
### 1. 安装依赖(推荐先 `conda` 创建虚拟环境)
2523

@@ -50,7 +48,9 @@ pip install -r requirements.txt
5048

5149
### 4. biliup-rs 登录
5250

53-
首先按照 [biliup-rs](https://github.com/biliup/biliup-rs) 登录b站,登录脚本在 `src/upload/biliup` ,登录产生的`cookies.json`保留在该文件夹下即可。
51+
首先按照 [biliup-rs](https://github.com/biliup/biliup-rs) 登录b站,登录脚本在 `src/utils/biliup` ,登录产生的`cookies.json`保留在该文件夹下即可。
52+
53+
然后同样通过 `bilitool login` 扫码登录(biliup 的 list 对应 api 已经失效,因此我写了 [`bilitool`](https://github.com/timerring/bilitool) 工具作为替换)。
5454

5555
[常见问题收集](./biliup)
5656

@@ -90,17 +90,14 @@ pip install -r requirements.txt
9090
相应的执行日志请在 `logs` 文件夹中查看,如果有问题欢迎在 [`issue`](https://github.com/timerring/bilive/issues/new/choose) 中提出。
9191
```
9292
logs # 日志文件夹
93-
├── blrecLog # blrec 录制日志
94-
│ └── ...
95-
├── burningLog # 弹幕渲染日志
93+
├── blrec # blrec 录制日志
9694
│ └── ...
97-
├── mergeLog # 片段合并日志
95+
├── scan # scan 处理日志
9896
│ └── ...
99-
├── scanLog # scan运行日志
97+
├── upload # upload 上传日志
10098
│ └── ...
101-
├── uploadLog # 视频上传日志
102-
│ └── ...
103-
└── blrec.log # record.sh 运行日志
99+
└── runtime # 每次执行的日志
100+
└── ...
104101
```
105102

106103

@@ -109,3 +106,20 @@ logs # 日志文件夹
109106

110107
1. 请将 `src/config.py` 文件中的 `GPU_EXIST` 参数设置为 `False`。(若不置为 `False` 且则会使用 CPU 推理,不推荐,可自行根据硬件条件进行尝试。)
111108
2.`MODEL_TYPE` 调整为 `merge` 或者 `append`
109+
110+
## Docker 运行
111+
112+
也可以直接拉取 docker 镜像运行,默认 latest。守护进程是 upload,而 record 以及 scan 需要在配置后手动启动,相关配置以及启动流程从 3.2 开始即可,此版本 docker 镜像无 GPU 配置。
113+
114+
> [!IMPORTANT]
115+
> 如果不需要使用可视化页面可以忽略以下提醒:
116+
> - 不推荐在有公网 ip 的服务器上直接暴露 22333 端口访问管理页面,如果使用请自行限制端口入站 ip 规则或者采用 nginx 等反向代理配置密钥限制他人访问。
117+
> - 管理页面主要针对 record 模块,只有手动运行 record 后(步骤5)才能访问到管理页面。
118+
119+
```bash
120+
sudo docker run \
121+
-itd \
122+
--name bilive_docker \
123+
-p 22333:2233 \
124+
timerring/bilive:0.2.10
125+
```

docs/record.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,30 @@ Traceback (most recent call last):
5656

5757
重启需要等约半分钟,因为它添加房间并且验证启动弹幕服务器需要一点时间,可以尝试关闭该房间录制,再打开。
5858

59+
## 录制的弹幕 xml 以及 jsonl 为空
60+
61+
From [issue 123](https://github.com/timerring/bilive/issues/123)
62+
63+
请填写超过 7 位数的 roomid,84074 是 b 站方便推广的一个短链接,用户跳转是直接映射到真实roomid 去的,真正的 roomid 是申请开播权限时分配的,应该是 7~9 位数字。
64+
65+
**弹幕服务器是无法通过短链接获取弹幕的。因为短链接只起到映射跳转作用**
66+
67+
解决方法:在移动端分享里面`图片分享`方式分享直播,然后 b 站移动端会自动生成一个带有真正 roomid 的图片。填写该 roomid 即可。
68+
69+
## 添加直播间出错 `aiohttp.client_exceptions.ClientResponseError: 412 `
70+
71+
From [issue 148](https://github.com/timerring/bilive/issues/148)
72+
73+
```
74+
aiohttp.client_exceptions.ClientResponseError: 412, message='Precondition Failed',
75+
```
76+
77+
录制部分我采用的是 [blrec](https://github.com/acgnhiki/blrec),根据 [相应的issue](https://github.com/acgnhiki/blrec/pull/264) 情况疑似被风控了。这是请求的[B站 api 报错 412 情况](https://github.com/SocialSisterYi/bilibili-API-collect/issues/872)
78+
79+
解决方法:我建议添加或者更换 UA,还可以考虑添加 cookies,等待几分钟执行 `./record.sh` 重试。或者用 docker 单独部署 blrec 也可以。
80+
81+
## `http://localhost:2233/settings` 网页无法访问
82+
83+
管理页面主要针对 record 模块,而 docker run 时默认守护进程是 upload,并且只是映射了端口,实际 2233 端口没有程序在运行,因为 record 进程并没有启动。
84+
85+
解决方法:进入 docker 后手动运行 record (步骤5)后访问管理页面。

docs/reference.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
## Reference
22

33
- [biliup/biliup-rs](https://github.com/biliup/biliup-rs)
4-
- [FortuneDayssss/BilibiliUploader](https://github.com/FortuneDayssss/BilibiliUploader)
54
- [hihkm/DanmakuFactory](https://github.com/hihkm/DanmakuFactory)
65
- [acgnhiki/blrec](https://github.com/acgnhiki/blrec)
7-
- [qqyuanxinqq/AutoUpload_Blrec](https://github.com/qqyuanxinqq/AutoUpload_Blrec)
86
- [OpenAI/whisper](https://github.com/OpenAI/whisper)

docs/scan.md

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,32 @@ Reference:https://github.com/timerring/bilive/issues/35
3333

3434
解决方案:通常 ffmpeg 无法渲染表情,因此很多情况下关于表情的渲染都会报错,我已经通过一个通用正则滤除了 99% 的表情,当然可能会有其他奇怪的表情和字符,如果报错忽略即可,ffmpeg 会渲染为一个方框,不影响效果。
3535

36+
## 渲染出来的弹幕和字幕为什么都是方框?
37+
38+
这是字体缺失的问题,往往出现在手动部署过程中,我默认采用的是微软雅黑字体,在本项目的 assets 目录下有 msyh.ttf,安装它即可。docker 版本应该不会有这个问题,因为在 dockerfile 中已经完成了该过程。当然如果你想使用别的字体也可以在 DanmakuFactory 指令中转换时指定对应的字体。
39+
3640
## 为什么又改回队列的方式渲染弹幕了
3741

38-
由于通常 nvidia 加速下的弹幕渲染速率为 10 ~ 15x,而 whisper 执行语音识别的速率为 5x,因此之前由 whisper 创建弹幕渲染的方式是完全行得通的,但是对于弹幕非常多的直播间来说(20分钟片段产生15400+条弹幕),渲染速率会下降到 2 ~ 4x,当新一轮 whisper 处理后的片段进行弹幕渲染时,会进一步使渲染速率下降,堆积超过 3 个并行的弹幕渲染进程,会由于显卡并发编码的数量限制而导致失败,此外还会存在爆显存的风险。因此,为了保证渲染的质量和程序的稳定性,我原改回列队的方式处理弹幕渲染。
42+
由于通常 nvidia 加速下的弹幕渲染速率为 10 ~ 15x,而 whisper 执行语音识别的速率为 5x,因此之前由 whisper 创建弹幕渲染的方式是完全行得通的,但是对于弹幕非常多的直播间来说(20分钟片段产生15400+条弹幕),渲染速率会下降到 2 ~ 4x,当新一轮 whisper 处理后的片段进行弹幕渲染时,会进一步使渲染速率下降,堆积超过 3 个并行的弹幕渲染进程,会由于显卡并发编码的数量限制而导致失败,此外还会存在爆显存的风险。因此,为了保证渲染的质量和程序的稳定性,我原改回列队的方式处理弹幕渲染。
43+
44+
## WSL 运行报错 ERROR:[Errno -2] Name or service not known
45+
46+
主机名解析的问题,wsl 通常网络问题比较多。From [issue 159](https://github.com/timerring/bilive/issues/159)
47+
48+
解决方案:主要两个思路
49+
1. 可以按照内容检查一下网络:https://unix.stackexchange.com/questions/589683/wsl-dns-not-working-when-connected-to-vpn
50+
2. 不用 record.sh 启动,直接在命令行终端里执行 blrec 然后浏览器访问 `http://localhost:2233` (default),按照https://blog.csdn.net/Yiang0/article/details/127780263 ,本机 Windows 可以直接通过 localhost 访问 WSL2,查看一下是否有正常运行的进程。
51+
52+
## 录制没有切片产生
53+
54+
> 首先检查 `src/config` 中的 `AUTO_SLICE` 是否为 `True`,如果为 `False`,则不会进行切片处理。
55+
56+
通常默认设置,如果视频文件大小小于 200 MB,则不进行切片处理,这样做的目的主要是防止一些碎片化的片段也被切片上传,因为对于一个网络不佳或者经常连线的主播,一场直播可能会产生几十个片段,如果每两分钟或者三分钟的连线都要再切片一次,冗余的内容对观众来说观感不是很好,因此权衡之下我设置了一个 threshold 为 200 MB,确保足够长的片段才会被切片。
57+
58+
解决方案:修改 `src/config` 中的 `MIN_VIDEO_SIZE` 数值为你所需要的限制,然后重新执行 `./scan.sh` 即可。
59+
60+
## RuntimeError: CUDA error: no kernel image is available for execution on the device
61+
62+
日志显示你的 ubuntu 的 nvidia gpu 驱动和 cuda 版本可能存在不匹配的问题,不能正确调用 cuda 核心。
63+
64+
解决方案:详细参考[这篇文章](https://zhuanlan.zhihu.com/p/466793485)

docs/test-hardware.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
+ 内存:2G
88
+ 硬盘:40G
99
+ 带宽: 3Mbps
10+
+ Python 版本: 3.10
1011

1112
> [!TIP]
1213
> 个人经验:若想尽可能快地更新视频,主要取决于上传速度而非弹幕渲染速度,因此建议网络带宽越大越好。
@@ -23,4 +24,5 @@
2324
+ GPU:NVIDIA GeForce GTX 1650 显存 4GB
2425
+ 内存:24G
2526
+ 硬盘:100G
26-
+ 带宽: 50Mbps
27+
+ 带宽: 50Mbps
28+
+ Python 版本: 3.10

docs/upload.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
```
1717
Error: ResponseData { code: 137022, data: None, message: "投稿过于频繁,请稍后再试", ttl: Some(1) }
1818
```
19-
20-
此类报错常出现在短时间内连续投稿,因此个人建议最小分段不要少于半小时,否则会触发此类错误,具体限制规则目前还未知,咨询客服也未解答,以下是触发的情况
2119
```
2220
2024-12-14 20:48:27
2321
2024-12-14 21:19:23
@@ -36,5 +34,6 @@ Error: ResponseData { code: 137022, data: None, message: "投稿过于频繁,
3634
2024-12-14 23:51:25
3735
2024-12-15 00:10:02 触发 Error
3836
```
37+
此类报错常出现在短时间内连续投稿,因此个人建议最小分段不要少于半小时,否则会触发此类错误。同时,如果存在录制多位的情况,推荐将权重低的直播间分段间隔调整大,尽量减少投稿频率,而给较为重要的直播间设置较短的间隔。
3938

40-
同时,如果存在录制多位的情况,推荐将权重低的直播间分段间隔调整大,尽量减少投稿频率,而给较为重要的直播间设置较短的间隔
39+
解决方案:找官方客服解除短时间内的账号投稿限制

0 commit comments

Comments
 (0)