一款无人值守直播录制脚本,基于强大的Streamlink 实现多平台直播源录制,通过挖掘直播平台官方API以轮询方式实现直播开播检测,致力于用最少的代码实现最多的功能
- 哔哩哔哩
- 斗鱼
- 虎牙
- 抖音
- YouTube
- Twitch
- NicoNico
- TwitCasting
- Afreeca
- Pandalive
- Bigolive
- Pixiv Sketch
- Chaturbate
- 更多平台欢迎PR
- 不建议同时录制过多直播,可能会出现不可预见的问题
- 部分直播平台(如Pandalive)存在风控,请谨慎使用
- 因个人精力有限,小众直播平台的支持可能存在问题,新增直播平台欢迎PR
- 本脚本仅用于无人值守录制,有关UI界面和录制拆分等通过后期软件可以实现的功能不考虑添加
- YouTube在录制单个频道多开直播间时会出现频繁中断,暂时无法修复
- 斗鱼直播因使用js引擎可能出现偶发的解析错误,会自动重试录制
- Bigolive存在部分用户录制花屏,原因未知
根据你的运行平台安装对应版本,并添加环境变量确保全局调用
当前支持Windows, Mac和Linux平台(amd64架构),请前往Release下载对应平台的可执行程序
下载解压后修改配置,直接运行二进制文件即可
在不支持的平台运行时可使用源码运行,安装好Python后在命令行输入以下命令即可
# 下载源码(没有git可以直接从release下载Source code)
git clone https://github.com/auqhjjqdo/LiveRecorder.git
cd LiveRecorder
# 安装依赖
python3 -m pip install .
# 源码运行
python3 live_recorder.py
配置文件存储于config.json
,该文件位于可执行程序相同目录
修改示例配置文件config.sample.json
后务必重命名为config.json
文件内容要求严格按照json语法,请前往在线json格式化网站校验后再修改
proxy
的值为代理地址,支持http和socks代理,格式为protocol://[user:password@]ip:port
例如http://127.0.0.1:7890
、socks5://admin:passwd@127.0.0.1:1080
建议优先使用http代理,目前socks5代理存在一定兼容性问题
无需代理时去除引号填写null
或删除该字段即可
output
字段为录制文件输出后保存的目录路径,非必填字段(请勿填写空字符串),默认输出到运行目录的output
文件夹
路径分隔符请使用/
,防止出现转义导致的不兼容问题
支持相对路径和绝对路径,例如output/video
、/tmp/output
、D:/output
按照示例修改user
列表,注意逗号、引号和缩进
字段 | 含义 | 可填内容 | 是否必填 | 备注 |
---|---|---|---|---|
platform | 直播平台 | 直播平台的英文名或拼音 | 必填 | 必须为首字母大写 |
id | 直播用户id | 直播平台的房间号或用户名 | 必填 | 参考config文件示例格式 一般在直播网址即可找到 |
name | 自定义主播名 | 任意字符 | 非必填 | 用于录制文件区分 未填写时默认使用id |
interval | 检测间隔 | 任意整数或小数 | 非必填 | 默认检测间隔为10秒 |
format | 输出格式 | 例如ts 、flv 、mp4 、mkv 等详见FFmpeg官方文档 |
非必填 | 默认使用直播平台的直播流输出格式 |
output | 输出目录 | 与输出目录配置相同 | 非必填 | 优先级高于输出目录配置 |
proxy | 代理 | 与代理配置相同 | 非必填 | 优先级高于代理配置 |
headers | HTTP 标头 | 参考官方文档 | 非必填 | 可用于部分需请求头验证的网站 |
cookies | HTTP Cookie | key=value 多个cookie使用 ; 分隔 |
非必填 | 可用于录制需登录观看的直播 |
部分主播的B站房间号在使用网页打开时地址栏默认显示的是短号,并不是真实的房间号,如需获取真实房间号可以打开
https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id=短号
返回的数据中room_id
后的数字即真实房间号
由于哔哩哔哩的限制,未登录用户无法观看较高画质的直播,因此需要在配置文件中添加cookies
字段(仅需SESSDATA
)以获取原画清晰度的直播流
斗鱼直播同哔哩哔哩在部分直播间的房间号显示的是短号,获取真实房间号可打开F12开发者工具,在控制台输入room_id
,返回的数字即真实房间号
YouTube的频道ID一般是由UC
开头的一段字符,由于YouTube可以自定义标识名,打开YouTube频道时网址会优先显示标识名而非频道ID
获取YouTube的频道ID可以使用以下网站:
https://seostudio.tools/zh/youtube-channel-id
https://ytgear.com/youtube-channel-id
NicoNico的直播分为用户直播和频道直播,其ID分别以co
和ch
开头再加上一段数字,但NicoNico的直播间一般是以lv
开头的视频ID,获取用户ID或频道ID可在F12开发者工具的控制台输入NicoGoogleTagManagerDataLayer[0].content
,在返回的数据中community_id
或channel_id
的值即对应的用户ID或频道ID
其中部分频道在使用频道ID时无法获取到最新直播,此问题暂时无解,请使用lv
视频ID代替
由于直播检测请求使用了HTTP
Keep-Alive长连接防止频繁建立TCP通道导致性能下降,但TwitCasting的服务器要求10秒内无请求则关闭连接,所以配置文件在添加TwitCasting的直播时尽量加入interval
字段并将检测间隔设为小于10秒,以免频繁出现请求协议错误
输出文件会在录制结束后使用ffmpeg封装为配置文件自定义的输出格式,音视频编码为直播平台直播流默认(一般视频编码为H.264
,音频编码为AAC
),录制清晰度为最高画质,封装结束后自动删除原始录制文件,输出格式为空或未填写时不进行封装
输出文件名命名格式为[年.月.日 时.分.秒][平台][主播名]直播标题.格式
,日期时区为系统默认时区