LiveRecorder
<img src="https://socialify.git.ci/auqhjjqdo/LiveRecorder/image?font=Inter&forks=1&issues=1&language=1&name=1&owner=1&pattern=Circuit%20Board&pulls=1&stargazers=1&theme=Auto" alt="LiveRecorder"/>
简介
这是一款无人值守的直播录制脚本,基于强大的Streamlink实现多平台直播源录制。通过挖掘直播平台官方API,以轮询方式实现直播开播检测,致力于用最少的代码实现最多的功能。
已支持平台
哔哩哔哩 斗鱼 虎牙 抖音 YouTube Twitch NicoNico TwitCasting Afreeca Pandalive Bigolive Pixiv Sketch Chaturbate 欢迎PR支持更多平台说明
不建议同时录制过多直播,可能会出现不可预见的问题 部分直播平台(如Pandalive)存在风控,请谨慎使用 因个人精力有限,小众直播平台的支持可能存在问题,欢迎PR新增直播平台支持 本脚本仅用于无人值守录制,不考虑添加UI界面和录制拆分等可通过后期软件实现的功能已知bug
YouTube在录制单个频道多开直播间时会出现频繁中断,暂时无法修复 斗鱼直播因使用js引擎可能出现偶发的解析错误,会自动重试录制 Bigolive存在部分用户录制花屏,原因未知使用
安装FFmpeg
FFmpeg官方下载页面
根据你的运行平台安装对应版本,并添加环境变量确保全局调用
下载
当前支持Windows、Mac和Linux平台(amd64架构),请前往Release下载对应平台的可执行程序
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文件示例格式<br/>一般在直播网址即可找到name自定义主播名任意字符非必填用于录制文件区分<br/>未填写时默认使用idinterval检测间隔任意整数或小数非必填默认检测间隔为10秒format输出格式例如ts、flv、mp4、mkv等<br/>详见FFmpeg官方文档非必填默认使用直播平台的直播流输出格式output输出目录与输出目录配置相同非必填优先级高于输出目录配置proxy代理与代理配置相同非必填优先级高于代理配置headersHTTP 标头参考官方文档非必填可用于部分需请求头验证的网站cookiesHTTP Cookiekey=value<br/>多个cookie使用;分隔非必填可用于录制需登录观看的直播注意事项
哔哩哔哩的房间号部分主播的B站房间号在使用网页打开时地址栏默认显示的是短号,并不是真实的房间号。如需获取真实房间号,可以打开以下链接:
https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id=短号
返回的数据中room_id后的数字即为真实房间号。
哔哩哔哩的清晰度由于哔哩哔哩的限制,未登录用户无法观看较高画质的直播。因此需要在配置文件中添加cookies字段(仅需SESSDATA)以获取原画清晰度的直播流。
斗鱼的房间号斗鱼直播与哔哩哔哩类似,部分直播间的房间号显示的是短号。获取真实房间号可打开F12开发者工具,在控制台输入room_id,返回的数字即为真实房间号。
YouTube的频道IDYouTube的频道ID通常以UC开头,由一串字符组成。由于YouTube允许自定义标识名,打开YouTube频道时网址会优先显示标识名而非频道ID。
获取YouTube的频道ID可以使用以下网站:
https://seostudio.tools/zh/youtube-channel-id
https://ytgear.com/youtube-channel-id
NicoNico的用户ID和频道IDNicoNico的直播分为用户直播和频道直播,其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)。录制清晰度为最高画质。封装结束后会自动删除原始录制文件。如果输出格式为空或未填写,则不进行封装。
输出文件名的命名格式为[年.月.日 时.分.秒][平台][主播名]直播标题.格式,日期时区采用系统默认时区。
网址:LiveRecorder https://www.yuejiaxmz.com/news/view/1317432