# LiveRecorder **Repository Path**: helong0073/LiveRecorder ## Basic Information - **Project Name**: LiveRecorder - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-10 - **Last Updated**: 2025-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README LiveRecorder ## 简介 一款无人值守直播录制脚本,基于强大的[Streamlink](https://streamlink.github.io) 实现多平台直播源录制,通过挖掘直播平台官方API以轮询方式实现直播开播检测,致力于用最少的代码实现最多的功能 ## 已支持平台 - [x] 哔哩哔哩 - [x] 斗鱼 - [x] 虎牙 - [x] 抖音 - [x] YouTube - [x] Twitch - [x] NicoNico - [x] TwitCasting - [x] Afreeca - [x] Pandalive - [x] Bigolive - [x] Pixiv Sketch - [x] Chaturbate - [ ] 更多平台欢迎PR ## 说明 - 不建议同时录制过多直播,可能会出现不可预见的问题 - 部分直播平台(如Pandalive)存在风控,请谨慎使用 - 因个人精力有限,小众直播平台的支持可能存在问题,新增直播平台欢迎PR - 本脚本仅用于无人值守录制,有关UI界面和录制拆分等通过后期软件可以实现的功能不考虑添加 ## 已知bug - YouTube在录制单个频道多开直播间时会出现频繁中断,暂时无法修复 - 斗鱼直播因使用js引擎可能出现偶发的解析错误,会自动重试录制 - Bigolive存在部分用户录制花屏,原因未知 ## 使用 ### 安装FFmpeg [FFmpeg官方下载页面](https://ffmpeg.org/download.html) 根据你的运行平台安装对应版本,并添加环境变量确保全局调用 ### 下载 当前支持Windows, Mac和Linux平台(amd64架构),请前往Release下载对应平台的可执行程序 [Release下载页面](https://github.com/auqhjjqdo/LiveRecorder/releases) 下载解压后修改配置,直接运行二进制文件即可 ### 源码运行 在不支持的平台运行时可使用源码运行,安装好Python后在命令行输入以下命令即可 ```shell # 下载源码(没有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格式化网站](https://www.bejson.com/)校验后再修改 ### 代理配置 `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官方文档](https://ffmpeg.org/ffmpeg-formats.html#Muxers) | 非必填 | 默认使用直播平台的直播流输出格式 | | output | 输出目录 | 与[输出目录配置](#输出目录配置)相同 | 非必填 | 优先级高于[输出目录配置](#输出目录配置) | | proxy | 代理 | 与[代理配置](#代理配置)相同 | 非必填 | 优先级高于[代理配置](#代理配置) | | headers | HTTP 标头 | 参考[官方文档](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers) | 非必填 | 可用于部分需请求头验证的网站 | | 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`),录制清晰度为最高画质,封装结束后自动删除原始录制文件,输出格式为空或未填写时不进行封装 输出文件名命名格式为`[年.月.日 时.分.秒][平台][主播名]直播标题.格式`,日期时区为系统默认时区