BILIVE 是基于 AI 技术的开源工具,专为 B 站直播录制与处理设计。工具支持自动录制直播、渲染弹幕和字幕,支持语音识别、自动切片精彩片段,生成有趣的标题和风格化的视频封面。BILIVE 能自动将处理后的视频投稿至 B 站,综合多种模态模型,兼容超低配置机器,无需 GPU 即可运行,适合个人用户和小型服务器使用。
Have you noticed that Live-In is a wordplay :)
如果您觉得项目不错,欢迎 ⭐ 也欢迎 PR 合作,如果有任何疑问,欢迎提 issue 交流。
敬告:本项目仅供学习交流使用,请在征得对方许可的情况下录制,请勿未经授权私自将内容用于商业用途,请勿用于大规模录制,违者会被官方封禁,法律后果自负。
自动监听并录制B站直播和弹幕(含付费留言、礼物等),根据分辨率转换弹幕、语音识别字幕并渲染进视频,根据弹幕密度切分精彩片段并通过视频理解大模型生成有趣的标题,根据图像生成模型自动生成视频封面,自动投稿视频和切片至B站,兼容无GPU版本,兼容 x64 及 arm64 超低配置服务器与主机。
- 速度快:采用
pipeline
流水线处理视频,理想情况下录播与直播相差半小时以内,没下播就能上线录播,已知 b 站录播最快的稳定版本! - ( 🎉 NEW)多架构:适配 amd64 及 arm64 架构!
- 多房间:同时录制多个直播间内容视频以及弹幕文件(包含普通弹幕,付费弹幕以及礼物上舰等信息)。
- 占用小:自动删除本地已上传的视频,极致节省空间。
- 模版化:无需复杂配置,开箱即用,通过 b 站搜索建议接口自动抓取相关热门标签。
- 检测片段并合并:对于网络问题或者直播连线导致的视频流分段,能够自动检测合并成为完整视频。
- 自动渲染弹幕:自动转换xml为ass弹幕文件,该转换工具库已经开源 DanmakuConvert 并且渲染到视频中形成有弹幕版视频并自动上传。
- 硬件要求极低:无需GPU,只需最基础的单核CPU搭配最低的运存即可完成录制,弹幕渲染,上传等等全部过程,无最低配置要求,10年前的电脑或服务器依然可以使用!
- ( 🎉 NEW)自动渲染字幕:采用 OpenAI 的开源模型
whisper
,自动识别视频内语音并转换为字幕渲染至视频中。 - ( 🎉 NEW)自动切片上传:根据弹幕密度计算寻找高能片段并切片,该自动切片工具库已开源 auto-slice-video,结合多模态视频理解大模型自动生成有意思的切片标题及内容,并且自动上传,目前已经支持的模型有:
GLM-4V-PLUS
Gemini-2.0-flash
Qwen-2.5-72B-Instruct
SenseNova V6 Pro
- ( 🎉 NEW)持久化登录/下载/上传视频(支持多p投稿):bilitool 已经开源,实现持久化登录,下载视频及弹幕(含多p)/上传视频(可分p投稿),查询投稿状态,查询详细信息等功能,一键pip安装,可以使用命令行 cli 操作,也可以作为api调用。
- ( 🎉 NEW)自动多平台循环直播推流:该工具已经开源 looplive 是一个 7 x 24 小时全自动循环多平台同时推流直播工具。
- ( 🎉 NEW)自动生成风格变换的视频封面:采用图生图多模态模型,自动获取视频截图并上传风格变换后的视频封面。
Minimax image-01
Kwai Kolors
Tencent Hunyuan
Baidu ERNIE irag-1.0
Stable Diffusion 3.5 large turbo
Luma Photon
Ideogram V_2
Recraft
Amazon Titan Image Generator V2
Hidream I1
kling-v1-5
项目架构流程如下:
Machine | Alicloud | Oracle Cloud | local server |
---|---|---|---|
OS | Ubuntu 22.04.4 LTS | debian 6.1.0 | Ubuntu 22.04.4 LTS |
Architecture | x64 | aarch64 | x64 |
CPU | 2-core Intel(R) Xeon(R) Platinum 85 | 1-core Neoverse-N1 | 8-core Intel(R) Core(TM) i5-9300H CPU |
GPU | None | None | Nvidia GeForce GTX 1650 |
Memory | 2G | 4G | 24G |
Disk | 40G | 30G | 100G |
Bandwidth | 3Mbps | 100Mbps | 50Mbps |
Python Version | 3.10 | 3.10 | 3.10 |
个人经验:若想尽可能快地更新视频,主要取决于上传速度而非渲染速度,因此建议网络带宽越大越好。由于 aarch64 版本 PyPI 没有 release 的 triton 库,因此 aarch64 版本暂时不支持本地部署 whisper,pip 时请自行注释 requirement 中的 triton 环境,配置均测试可用。
更详细的教程请参考文档 bilive
Note
如果你是 windows 用户,请使用 WSL 运行本项目。
首先介绍本项目三种不同的处理模式:(以下特指 asr_method="deploy" 的情况,如填"none"或者"api"则不涉及 GPU, 可以忽略对 GPU 的描述)
pipeline
模式(默认): 目前最快的模式,需要 GPU 支持,最好在blrec
设置片段为半小时以内,asr 识别和渲染并行执行,分 p 上传视频片段。append
模式: 基本同上,但 asr 识别与渲染过程串行执行,比 pipeline 慢预计 25% 左右,对 GPU 显存要求较低,兼顾硬件性能与处理上传效率。merge
模式: 等待所有录制完成,再进行识别渲染合并过程,上传均为完整版录播(非分 P 投稿),等待时间较长,效率较慢,适合需要上传完整录播的场景。
Important
凡是用到 GPU 均需保证 GPU 显存大于运行程序所需 VRAM,具体计算 VRAM 方法可以参考该部分。
Tip
如果你是 windows 用户,请使用 WSL 运行本项目。
由于项目引入了我写的 submodule DanmakuConvert,bilitool 和 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。
Tip
- 有关语音识别的配置在
bilive.toml
文件的[asr]
部分。 asr_method
默认为 none, 即不进行语音字幕识别。
将 bilive.toml
文件中的 asr_method
参数设置为 api
,然后填写 WHISPER_API_KEY
参数为你的 API Key。
本项目采用 groq 提供 free tier 的 whisper-large-v3-turbo
模型,上传限制为 40 MB(约半小时),因此如需采用 api 识别的方式,请将视频录制分段调整为 30 分钟(默认即 30 分钟)。此外,free tier 请求限制为 7200秒/20次/小时,28800秒/2000次/天。如果有更多需求,也欢迎升级到 dev tier,更多信息见groq 官网。
将 bilive.toml
文件中的 asr_method
参数设置为 deploy
,然后下载所需模型文件,并放置在 src/subtitle/models
文件夹中。
项目默认采用 small
模型,请点击下载所需文件,并放置在 src/subtitle/models
文件夹中。
Tip
- 请保证 NVIDIA 显卡驱动安装正确
nvidia-smi
nvcc -V
,并能够调用 CUDA 核心print(torch.cuda.is_available())
返回True
。如果未配置显卡驱动或未安装CUDA
,即使有 GPU 也无法使用,而会使用 CPU 推理,非常消耗 CPU 计算资源,不推荐,如果 CPU 硬件条件好可以尝试。 - 使用该参数模型至少需要保证有显存大于 2.7GB 的 GPU,否则请使用其他参数量的模型。
- 更多模型请参考 whisper 参数模型 部分。
- 更换模型方法请参考 更换模型方法 部分。
Tip
- 有关自动切片的配置在
bilive.toml
文件的[slice]
部分。 auto_slice
默认为 false, 即不进行自动切片。- 可以通过单元测试调试你自己的 prompt,单元测试在
tests/test_autoslice.py
,执行python -m unittest
即可,后接tests.test_autoslice
测试整个模块,tests.test_autoslice.TestXXXMain
测试某个模型。部分模型会返回多个标题及 emoji,请在 prompt 中指出,仅返回一个标题的字符串即可,推荐先自行调试确保您的 prompt works,欢迎在 issue 中分享你的 prompt。
MLLM 模型主要用于自动切片后的切片标题生成,此功能默认关闭,如果需要打开请将 auto_slice
参数设置为 true
,并且写下你自己的 slice_prompt
(可以包含 {artist}
关键词会自动替换),其他配置分别有:
slice_duration
以秒为单位设置切片时长(不建议超过 180 秒)。slice_num
设置切片数量。slice_overlap
设置切片重叠时长。切片采用滑动窗口法处理,细节内容请见 auto-slice-videoslice_step
设置切片步长。min_video_size
设置最小被切片视频大小,防止对一些连线或者网络波动原因造成的短片段再切片。
接下来配置模型有关的 mllm_model
参数即对应的 api-key,请自行根据链接注册账号并且申请对应 api key,填写在对应的参数中,请注意以下模型只有你在 mllm_model
参数中设置的那个模型会生效。
Company | Alicloud | zhipu | SenseNova | |
---|---|---|---|---|
Name | Qwen-2.5-72B-Instruct | GLM-4V-PLUS | Gemini-2.0-flash | SenseNova V6 Pro |
mllm_model |
qwen |
zhipu |
gemini |
sensenova |
API key |
qwen_api_key | zhipu_api_key | gemini_api_key | sensenova_api_key |
Tip
- 有关自动生成视频封面的配置在
bilive.toml
文件的[cover]
部分。 generate_cover
默认为 false, 即不进行自动生成视频封面。- 可以通过单元测试调试你自己的 prompt,单元测试在
tests/test_cover.py
,执行python -m unittest
即可,后接tests.test_cover
测试整个模块,tests.test_cover.TestXXXMain
测试某个模型。
采用图生图多模态模型,自动获取视频截图并上传风格变换后的视频封面,如需使用本功能,请将 generate_cover
参数设置为 true
,并且写下你自己的 prompt,注意部分模型只支持英文,接下来需要配置的参数有 image_gen_model 和对应的 api key,请自行根据链接注册账号并且申请对应 api key,填写在对应的参数中,请注意以下模型只有你在 image_gen_model
参数中设置的那个模型会生效。
推荐使用大模型API(dmxapi.cn),一个 Key 用全球大模型,查看详细介绍。
Company | Model Name | image_gen_model |
API Key |
---|---|---|---|
Kwai | v1-5 | kling |
dmx_api_token |
其他支持的图像生成模型
在 bilive.toml
中自定义相关配置,映射关键词为 {artist}
、{date}
、{title}
、{source_link}
,请自行组合删减定制模板:
title
标题模板。description
简介模板。tid
视频分区,请参考 bilitool tid 文档。gift_price_filter = 1
表示过滤价格低于 1 元的礼物。reserve_for_fixing = false
表示如果视频出现错误,重试失败后不保留视频用于修复,推荐硬盘空间有限的用户设置 false。upload_line = "auto"
表示自动探测上传线路并上传,如果需要指定固定的线路,可以设置为bldsa
、ws
、tx
、qn
、bda2
。
Important
请不要修改任何有关路径的任何配置,否则会导致上传模块不可用
录制模块采用第三方 package
blrec
,参数配置在settings.toml
文件,也可以直接在录制启动后在对应的端口可视化页面配置。Quick start 只介绍关键配置,其他配置可自行在页面中对照配置项理解,支持热修改。
- 房间的添加按照文件中
[[tasks]]
对应的格式即可。 - 录制模块不登录状态下默认的录制质量为超清。如果需要登录,请将 cookie.json 文件(获取方式见步骤 5)中的
SESSDATA
参数值填写到[header]
的 cookie 部分,形式cookie = "SESSDATA=XXXXXXXXXXX"
,登录后即可录制更高质量画质。(推荐不登录) duration_limit
表示录制时长,如果采用 whisper api 识别语音,请将分段控制在 1800 秒以内,其他情况没有限制。
对于 docker 部署,可以忽略这一步,因为
docker logs
在控制台中可以打印出二维码,直接扫码即可登录,以下内容针对源码部署。
一般日志文件打印不出二维码效果,所以这步需要提前在机器上安装 bilitool:
pip install bilitool
bilitool login --export
# 然后使用 app 端扫码登录,会自动导出 cookie.json 文件
将登录的 cookie.json 文件留在本项目根目录下,./upload.sh
启动后即可删除该文件。
或者在 submodule 中登录也可以,方式如下:
cd src/upload/bilitool
python -m bilitool.cli login
# 然后使用 app 端扫码即可登录
Important
在有公网 ip 的服务器上使用默认密码并暴露端口号有潜在的暴露 cookie 风险,因此不推荐在有公网 ip 的服务器映射端口号。
- 如需使用 https,可以考虑 openssl 自签名证书并在
record.sh
中添加参数--key-file path/to/key-file --cert-file path/to/cert-file
。 - 可以自行限制服务器端口入站 ip 规则或者采用 nginx 等反向代理配置限制他人访问。
启动前请先设置录制前端页面的密码,并保存在 RECORD_KEY
环境变量中, your_password
由字母数字组成,最少 8 位,最多 80 位。
- 临时设置密码
export RECORD_KEY=your_password
。(推荐) - 持久化设置密码
echo "export RECORD_KEY=your_password" >> ~/.bashrc && source ~/.bashrc
,其中~/.bashrc
根据你所用的 shell 自行修改即可。
./record.sh
如果你使用 deploy 的方式本地部署 whisper,请先确保你已经正确下载并放置了对应的模型文件,并确保 CUDA 可用。
./upload.sh
相应的执行日志请在 logs
文件夹中查看,如果有问题欢迎在 issue
中提出,有异常请优先提供 [debug] 级别的日志。
logs # 日志文件夹
├── record # blrec 录制日志
│ └── ...
├── scan # scan 处理日志 [debug]级别
│ └── ...
├── upload # upload 上传日志 [debug]级别
│ └── ...
└── runtime # 每次执行的日志 [info]级别
└── ...
Docker 版本的配置参考同上,登录方式更加简洁,启动后直接 docker logs bilive_docker
在日志中会打印登录二维码,扫码登录即可。
已构建 amd64 及 arm64 版本,会自动根据架构选择。
your_record_password
为录制页面的密码,请自行设置,最短 8 最长 80。
docker run -itd \
-v your/path/to/bilive.toml:/app/bilive.toml \
-v your/path/to/settings.toml:/app/settings.toml \
-v your/path/to/Videos:/app/Videos \
-v your/path/to/logs:/app/logs \
--name bilive_docker \
-e RECORD_KEY=your_record_password \
-p 22333:2233 \
ghcr.io/timerring/bilive:0.3.1
Tip
使用前请确保你有足够的使用前置知识,如果不熟悉在 docker 中使用 GPU,可以参考 Docker With GPU。
有 GPU 版本仅支持 amd64 架构,已内置 small 参数量的模型,如需使用其他参数量模型,请自行按照 2.1.2 步骤调整。your_record_password
规则同上。
sudo docker run -itd \
-v your/path/to/bilive.toml:/app/bilive.toml \
-v your/path/to/settings.toml:/app/settings.toml \
-v your/path/to/Videos:/app/Videos \
-v your/path/to/logs:/app/logs \
--gpus 'all,"capabilities=compute,utility,video"' \
--name bilive_docker_gpu \
-e RECORD_KEY=your_record_password \
-p 22333:2233 \
ghcr.io/timerring/bilive-gpu:0.3.1
compose.yml
调整方法见 Installation。
如需使用 GPU 版本,请自行在 compose.yml
中调整。
docker compose up -d
请先在 compose.yml
中调整相关配置,然后执行以下命令:
docker build
docker compose up -d
相关推荐

ViLAMP
<p>ViLAMP(VIdeo-LAnguage Model with Mixed Precision)是蚂蚁集团和中国人民大学联合推出的视觉语言模型,专门用在高效处理长视频内容。基于混合精度策略,对视频中的关键帧保持高精度分析,显著降低计算成本提高处理效率。ViLAMP在多个视频理解基准测试中表现出色,在长视频理解任务中,展现出显著优势。ViLAMP能在单张A100 GPU上处理长达1万帧(约3小时)的视频,同时保持稳定的理解准确率,为长视频分析提供新的解决方案。</p> <p><img src="https://img.medsci.cn/aisite/img//QAhYsPVEvvbu9MLt1Z3vvhSHKz4XCYGWv1TKK0e3.jpg"></p> <h2 style="font-size: 20px;">ViLAMP的主要功能</h2> <ul> <li>长视频理解:支持处理长达数小时的视频。</li> <li>关键信息提取:精准提取视频中的关键信息,同时压缩冗余信息。</li> <li>高效计算:在单张A100 GPU上处理长达1万帧(约3小时)的视频,显著降低内存和计算成本,提高处理效率。</li> <li>多任务处理:支持多种视频理解任务,如视频内容问答、动作识别、场景理解等。</li> </ul> <h2 style="font-size: 20px;">ViLAMP的技术原理</h2> <ul> <li>差分关键帧选择:基于贪心算法选择与用户查询高度相关且具有时间多样性的关键帧。确保选中的关键帧既能捕捉重要信息,避免冗余。</li> <li>差分特征合并:对非关键帧进行压缩,将每个非关键帧的多个patch合并为单个token。基于差分加权池化,赋予与用户查询相关且具有独特性的patch更高的权重,同时降低与关键帧重复的patch的权重。保留关键信息的同时,显著减少计算量。</li> </ul> <h2 style="font-size: 20px;">ViLAMP的项目地址</h2> <ul> <li>GitHub仓库:<a class="external" href="https://github.com/steven-ccq/ViLAMP" target="_blank" rel="noopener nofollow">https://github.com/steven-ccq/ViLAMP</a></li> <li>arXiv技术论文:<a class="external" href="https://arxiv.org/pdf/2504.02438" target="_blank" rel="noopener nofollow">https://arxiv.org/pdf/2504.02438</a></li> </ul> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" tabindex="-1">⚙️ 设置</h2> <a id="user-content-gear-setup" class="anchor" href="https://github.com/steven-ccq/ViLAMP#gear-setup" aria-label="永久链接::gear: 设置"></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto"> <pre>git clone https://github.com/steven-ccq/ViLAMP.git cd ViLAMP</pre> <div class="zeroclipboard-container"> </div> </div> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" tabindex="-1">环境</h3> <a id="user-content-environment" class="anchor" href="https://github.com/steven-ccq/ViLAMP#environment" aria-label="永久链接:环境"></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto"> <pre># python 3.8 pip install -r requirements.txt</pre> <div class="zeroclipboard-container"> </div> </div> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" tabindex="-1">安装 ViLAMP</h3> <a id="user-content-install-vilamp" class="anchor" href="https://github.com/steven-ccq/ViLAMP#install-vilamp" aria-label="永久链接:安装 ViLAMP"></a></div> <p>请安装<a href="https://huggingface.co/orange-sk/ViLAMP-llava-qwen" rel="nofollow">🤗ViLAMP-llava-qwen</a>并将其放入<code>models/</code></p> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" tabindex="-1">🎯 推理</h2> <a id="user-content-dart-inference" class="anchor" href="https://github.com/steven-ccq/ViLAMP#dart-inference" aria-label="永久链接: :dart: 推理"></a></div> <p>我们提供了五个基准的评估脚本:<code>Video-MME</code>、、、和<code>MLVU</code>。更多详情,请参阅。<code>LongVideoBench</code><code>ActivityNetQA</code><code>EgoSchema</code><code>scripts/eval/</code></p> <p>在运行这些脚本之前,请下载评估数据集并将其放在<code>dataset/</code>目录中。以下是输入参数的说明:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto"> <pre>--dataset_path Path to the test dataset --video_dir Path to the folder containing the videos required for testing --output_dir Path to the folder where the results will be saved --version Path to the model --split Split the dataset in the format i_N, where N is the total number of splits and i is the current split index (starting from 1). Default is 1_1. --max_frame_num Maximum number of frames to sample per video. Default is 600.</pre> <div class="zeroclipboard-container"> </div> </div> <p>以下是评估 Video-MME 的示例</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto"> <pre>python exp_vMME.py \ --dataset_path dataset/Video-MME/videomme/test-00000-of-00001.parquet \ --video_dir dataset/Video-MME/data \ --output_dir dataset/Video-MME/output \ --version models/ViLAMP-llava-qwen \ --split 1_1 \ --max_frame_num 600</pre> <div class="zeroclipboard-container"> </div> </div> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" tabindex="-1">🚀 培训</h2> <a id="user-content-rocket-training" class="anchor" href="https://github.com/steven-ccq/ViLAMP#rocket-training" aria-label="永久链接::rocket: 训练"></a></div> <p>我们提供针对单节点和多节点环境设计的训练脚本。更多详细说明,请查看<code>scripts/train/</code>目录。</p> <p>为了简化数据集的组织,我们利用该<code>training_data.yaml</code>文件来整合训练数据。在开始训练之前,请确保您的数据集已注册到此文件中。我们提供了一个简单的示例<code>example-10.json</code>来演示预期的数据集格式。</p> <p>请注意,如果您的训练数据集需要特定的处理方法,则需要修改<code>llava/train/train.py</code>文件的第 1225 行,并在该行之前插入自定义视频处理功能,以满足您的数据集的需求。</p> <div class="markdown-heading" dir="auto"> <h2 class="heading-element" dir="auto" tabindex="-1">引文</h2> <a id="user-content-citation" class="anchor" href="https://github.com/steven-ccq/ViLAMP#citation" aria-label="永久链接:引用"></a></div> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto"> <pre>@article{cheng2025vilamp, title={Scaling Video-Language Models to 10K Frames via Hierarchical Differential Distillation}, author={Cheng, Chuanqi and Guan, Jian and Wu, Wei and Yan, Rui}, journal={arXiv preprint arXiv:2504.02438}, year={2025} }</pre> </div>

Medeo
<p>Medeo是创新的AI驱动视频制作工具。用户输入简短描述,Medeo能快速生成包含完整剧情、配音和字幕的高清视频。Medeo支持多种视频类型,如故事片、产品演示、培训视频等。Medeo提供从URL生成新闻视频、基于脚本生成悬疑小说视频及生成吉卜力风格动画等功能。Medeo能帮助用户大大节省时间和精力,让视频创作变得简单高效。</p> <p><img style="display: block; margin-left: auto; margin-right: auto;" src="https://img.medsci.cn/aisite/img//7q2VtYPOadiFDgEA7ZBtedes7fvgc3172XCtiYcX.png"></p> <h2 style="font-size: 20px;">Medeo的主要功能</h2> <ul> <li>快速生成视频:输入描述快速生成含剧情、配音和字幕的高清视频,支持故事片、产品演示、培训视频等多种类型。</li> <li>多样化生成方式:从URL生成新闻视频,基于脚本生成悬疑小说视频。</li> <li>智能匹配与调整:具备智能匹配功能,根据描述匹配合适风格和内容,支持对生成视频进行微调。</li> <li>丰富风格选择:提供多种视频风格,如悬疑、喜剧、科幻等。</li> </ul> <h2 style="font-size: 20px;">Medeo的官网地址</h2> <ul> <li>官网地址:<a href="https://ai.medeo.app/create">ai.medeo</a></li> </ul>