简介
这是一款无人值守的直播录制脚本,基于强大的Streamlink实现多平台直播源录制。通过挖掘直播平台官方API,以轮询方式实现直播开播检测,致力于用最少的代码实现最多的功能。
已支持平台
- 哔哩哔哩
- 斗鱼
- 虎牙
- 抖音
- YouTube
- Twitch
- NicoNico
- TwitCasting
- Afreeca
- Pandalive
- Bigolive
- Pixiv Sketch
- Chaturbate
- 欢迎PR支持更多平台
说明
- 不建议同时录制过多直播,可能会出现不可预见的问题
- 部分直播平台(如Pandalive)存在风控,请谨慎使用
- 因个人精力有限,小众直播平台的支持可能存在问题,欢迎PR新增直播平台支持
- 本脚本仅用于无人值守录制,不考虑添加UI界面和录制拆分等可通过后期软件实现的功能
已知bug
- YouTube在录制单个频道多开直播间时会出现频繁中断,暂时无法修复
- 斗鱼直播因使用js引擎可能出现偶发的解析错误,会自动重试录制
- Bigolive存在部分用户录制花屏,原因未知
使用
安装FFmpeg
根据你的运行平台安装对应版本,并添加环境变量确保全局调用
下载
当前支持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
YouTube的频道ID通常以UC
开头,由一串字符组成。由于YouTube允许自定义标识名,打开YouTube频道时网址会优先显示标识名而非频道ID。
获取YouTube的频道ID可以使用以下网站:
https://seostudio.tools/zh/youtube-channel-id
https://ytgear.com/youtube-channel-id
NicoNico的用户ID和频道ID
NicoNico的直播分为用户直播和频道直播,其ID分别以co
和ch
开头,后跟一串数字。但NicoNico的直播间通常以lv
开头的视频ID表示。获取用户ID或频道ID可在F12开发者工具的控制台输入NicoGoogleTagManagerDataLayer[0].content
,在返回的数据中community_id
或channel_id
的值即为对应的用户ID或频道ID。
注意,部分频道使用频道ID时可能无法获取最新直播,此问题暂时无解,请使用lv
视频ID代替。
TwitCasting的检测间隔
由于直播检测请求使用了HTTP Keep-Alive长连接以防止频繁建立TCP通道导致性能下降,但TwitCasting的服务器要求10秒内无请求则关闭连接。因此,在配置文件中添加TwitCasting的直播时,建议加入interval
字段并将检测间隔设为小于10秒,以避免频繁出现请求协议错误。
输出文件
输出文件会在录制结束后使用ffmpeg封装为配置文件自定义的输出格式。音视频编码采用直播平台直播流的默认设置(通常视频编码为H.264
,音频编码为AAC
)。录制清晰度为最高画质。封装结束后会自动删除原始录制文件。如果输出格式为空或未填写,则不进行封装。
输出文件名的命名格式为[年.月.日 时.分.秒][平台][主播名]直播标题.格式
,日期时区采用系统默认时区。