DanmakuRender —— 一个直播录制和弹幕渲染的小工具
简介
做这个小软件的原因是最近看MDY的录男为了摆烂找出一大堆借口,搞得人民群众没录播看,于是乎在看直播的同时写了这样一个小工具来帮助录男们实现自动化生产。
这个小程序是结合网络上的代码写的一个直播录制和弹幕渲染的小工具,大概功能如下:
录制直播流
录制直播弹幕
将弹幕渲染为AE项目

本文主要介绍从没用过Python和命令行的萌新使用这个代码,如果你已经有相关基础可以直接看GitHub的简介。
GitHub项目地址:https://github.com/SmallPeaches/DanmakuRender。有更新第一时间会在GitHub上更新,有问题可以先去重新下载一份最新的代码试试。
环境准备
首先下载代码文件,前往GitHub项目地址,然后依次点击Code-Download ZIP按钮下载压缩包,并把文件解压到你想要的位置。

(可选)下载FFmpeg,如果你决定使用这个录制视频就必须下载。首先下载ffmpeg压缩包(https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-essentials.7z),下载完成后解压,把bin/ffmpeg.exe文件复制到代码目录下的tools文件夹里就行了,最后tools文件夹至少有以下文件。

然后下载Python(不知道怎么下的就下载这个 https://www.python.org/ftp/python/3.10.0/python-3.10.0-amd64.exe)。安装时一定要注意选择Add Python xxx to PATH这个选项,其他的随便。

下载完成后打开之前下载的代码所在的文件夹(main.py所在的文件夹),然后打开命令行窗口(win10系统shift+右键点击页面空白处,在菜单中选择“在此处打开powershell窗口”,win11直接右键选择“打开Windows Terminal窗口”)。输入python -V并回车执行,如果出现Python+版本号的输出(例如Python 3.10.0)说明Python安装成功,可以执行下一步,否则检查前面的Python安装步骤是不是没做好。
注意:在Windows 10 旧版本及更早的系统中,可能会出现安装好了也无法正常显示的情况,只要在安装完成后重启一下电脑就好了。
继续之前的命令行窗口,输入pip install -r requirements.txt安装Python包,安装完成后就可以开始执行程序了。每次执行都需要在代码所在文件夹下打开命令行窗口。
TIPS:可以使用键盘方向键(上下箭头)选择之前执行过的命令,右键可以复制粘贴内容。
运行程序
首先简单地介绍一下命令行窗口指令的基本格式:每次以可执行程序名称开始,参数名称以“-”或者是“--”开头,参数名称隔一个空格接参数的值(如果有的话),最后按回车执行指令。
例:“python main.py -n helloworld ”,表示使用Python运行main.py程序,输入参数n的值为helloworld。
以下是一些例子。
录制弹幕和直播
录制默认保存位置为save文件夹,不建议修改。如果录制正常启动的话会显示正在录制,并且save文件夹下出现录制内容(视频或者弹幕文件)。


python main.py -u https://www.huya.com/712416 -n 甜药 -m 录制虎牙712416直播间,如果主播下播则一直等待直到开播然后录制,视频切分为1小时一个(常规录制)
python main.py -u https://www.huya.com/712416 -n 甜药 -s 0 录制虎牙712416直播间,如果主播未开播则抛出错误,录播不分块(适用于录制切片)
python main.py -u https://www.huya.com/712416 -n 甜药 -s 0 --record danmu -m --dftype excel 录制虎牙712416直播间,只录制弹幕,不分块,将弹幕导出为能被excel加载的文件(适用于录制弹幕进行分析,例如日报主编)
注意事项:
在录制过程中不要使用excel打开弹幕文件,否则会导致录制崩溃。如果要预览也先复制然后打开副本,或者使用记事本打开。
录制的视频导入旧版本Pr(CC2018以前版本)会出现音画不同步的情况,如果不更新Pr的话就需要使用格式工厂等软件先转码,然后导入Pr。
渲染弹幕
python render.py -f danmu.json 直接渲染弹幕danmu.json到AE并保存,不生成中间文件。(最简单的方法,但是弹幕多了可能会卡住)
python render.py -f danmu.json -o script.jsx 渲染弹幕文件danmu.json,然后生成AE脚本文件script.jsx,之后再自己打开AE运行脚本。(推荐方法)
python render.py -f danmu.json --nosave 直接渲染弹幕danmu.json到AE当前项目。
注意事项:
运行AE脚本的方法:打开AE并新建项目,点击文件-脚本-运行脚本文件,然后选择刚刚生成的脚本文件运行即可。
如果在AE未打开时使用Python渲染弹幕,则AE会在文件保存后自动退出,如果AE已经打开项目则会直接渲染到当前项目。
渲染弹幕是一个很吃内存的操作,在内存充足的情况下,每生成一千条弹幕大约需要五分钟,占用内存8G,在渲染过程中AE会无响应。如果内存不足渲染速度会大幅下降,如果是录制弹幕非常多的直播还是建议使用传统录屏方法。
由于AE合成的限制,每次渲染的弹幕时长不能超过3个小时,因此如果是制作录播的话不能把分块时间设置为三小时以上。
参数列表
详细的参数和操作建议去GitHub页面看,这里给出的可能不全面:
运行main.py时可以附带以下参数:
-u 指定录制链接
-n 指定录制的名称,默认为replay
-o 指定输出文件夹,默认为此目录下的save文件夹
-s 指定视频分块长度(单位:秒),默认为3600(一个小时一个文件),设置为0表示不分块
-m 监视此直播间。如果使用此参数则程序会一直监视直播间,并在开播时自动录制,直到用户主动关闭。如果不使用此参数则录制会在直播结束时结束。默认无此参数,但是大部分情况下都应该使用这个参数,这样可以保证网络出现波动程序能正自动重启录制。
--ffmpeg 指定ffmpeg.exe可执行文件所在路径
--record 指定录制类型为以下三种:danmu(只录制弹幕),video(只录制视频),all(都录制),默认为all
--dftype 指定弹幕文件保存类型:json(默认),csv,excel(实际上是csv文件,但是使用了gbk编码,可以直接在excel里打开,但是无法导入弹幕渲染器)
--timeout 指定录制超时停止的延时(秒),如果在主播推流有问题导致录制频繁中断时可以调高此参数,其他情况不建议修改,默认为10
运行render.py时可以附带以下参数:
-f 指定弹幕文件路径
-o 指定保存脚本的位置,如果为空则表示直接运行脚本而不保存,默认为空。但是建议先保存脚本再运行,这样会提高效率
-a 指定AE的主程序AfterFX.exe所在路径,默认为auto,由程序自己搜索
--nosave 指示AE不主动保存项目,也就是只渲染到AE的窗口,如果AE此时存在项目,则会在当前项目新建一个合成并渲染,并不会创建新项目
录制和渲染的详细配置(例如弹幕字体,弹幕大小等等)在config.json文件中,附带参数运行会覆盖在config.json文件里的设置。
最后
如果有bug很正常,因为程序没有经过严格测试,只是一个简单的demo,出了bug可以私信我或者在GitHub上面提交issue,我会尽量帮你解决。另外有什么好的改进想法也可以和我说。
感谢 THMonster/danmaku, wbt5/real-url, ForgQi/biliup 的工作。