{"id":13431277,"url":"https://github.com/AsaChiri/DDRecorder","last_synced_at":"2025-03-16T11:31:22.897Z","repository":{"id":37854336,"uuid":"325958119","full_name":"AsaChiri/DDRecorder","owner":"AsaChiri","description":"📺Headless全自动B站直播录播、切片、上传一体工具","archived":false,"fork":false,"pushed_at":"2023-08-23T16:19:51.000Z","size":188,"stargazers_count":445,"open_issues_count":22,"forks_count":71,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-12-27T08:31:44.278Z","etag":null,"topics":["bilibili","bilibili-live","ffmpeg","python","vtuber"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AsaChiri.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-01-01T10:30:05.000Z","updated_at":"2024-12-26T02:53:04.000Z","dependencies_parsed_at":"2024-02-26T19:47:30.127Z","dependency_job_id":"625420bf-15cb-4404-a596-5bcef4a730f8","html_url":"https://github.com/AsaChiri/DDRecorder","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsaChiri%2FDDRecorder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsaChiri%2FDDRecorder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsaChiri%2FDDRecorder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsaChiri%2FDDRecorder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AsaChiri","download_url":"https://codeload.github.com/AsaChiri/DDRecorder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243862825,"owners_count":20360219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bilibili","bilibili-live","ffmpeg","python","vtuber"],"created_at":"2024-07-31T02:01:01.877Z","updated_at":"2025-03-16T11:31:22.521Z","avatar_url":"https://github.com/AsaChiri.png","language":"Python","funding_links":[],"categories":["直播相关工具"],"sub_categories":["直播脚本"],"readme":"# DDRecorder\n\n Headless 全自动 B 站直播录播、切片、上传一体工具\n \n**\u003e=1.1.2 版本增加了自动检查更新功能，需要连接至 Github 服务器，敬请留意。**\n\n\n## 感谢\nFortuneDayssss/BilibiliUploader\nMoyuScript/bilibili-api\nForgQi/biliup-rs\nfastnlp/fastHan\n\n## 参考文献\n```\n@inproceedings{geng-etal-2021-fasthan,\n  author = {Geng, Zhichao and Yan, Hang and Qiu, Xipeng and Huang, Xuanjing},\n  title = {fastHan: A BERT-based Multi-Task Toolkit for Chinese NLP},\n  booktitle = {Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing: System Demonstrations},\n  year = {2021},\n  pages = {99--106}, \n  url = {https://aclanthology.org/2021.acl-demo.12}\n}\n```\n\n## 安装指南（Windows）\n1. 在 Release 下载 zip 包解压。\n2. 修改配置文件 config.json 可以选择使用自带的 DDRecorderConfigManager（源码：AsaChiri/DDRecorderConfigManager)\n3. 双击运行 DDRecorder.exe（这将使用 config.json）或 DDRecorder.exe \u003c配置文件\u003e \n\n\n## 安装指南（MacOS/Linux）\n1. 安装 Python \u003e= **3.9** https://www.python.org/downloads/release/python-3104/\n2. 安装 ffmpeg https://ffmpeg.org/download.html\n3. 执行 pip install -r requirements.txt\n4. 修改 config 文件夹下的配置文件 config.json\n5. 执行 python main.py \u003c配置文件\u003e \n   \n## 配置文件字段解释\n\n### 关于登录\n\n**由于 B 站风控原因，账号密码登录失败（被风控）的可能性极高，建议获取 access_token，refresh_token 和 cookies 项目填入配置文件中；目前推荐使用 [biliup-rs](https://github.com/ForgQi/biliup-rs) 进行一次登录获取 access_token，refresh_token 和 cookies 项目后填入配置文件中。如果您使用 DDRecorderConfigManager，则相应功能已经集成。**\n\n### 关于占位符\n目前可以在配置文件里使用的占位符如下：\n- {date} ：日期（格式为“2022 年 02 月 02 日”）\n- {room_name} ：**最近的**直播间标题\n- {year},{month},{day},{hour},{minute},{second}：直播开始时间的年、月、日、时、分、秒\n- {rough_time}：直播开始时间的大概描述（凌晨、上午、下午、晚上）\n\n### 关于手动切片\n手动切片功能类似于 Nvidia 的 ShadowPlay 功能，在配置文件中的\"manual_clipper\"部分可以找到手动切片器相关设置。\n\n在启用相关功能并指定接受指令的用户 UID，该用户可以在直播时发送特定弹幕来控制 DDRecorder 进行切片。\n\n特定弹幕格式为```/DDR clip \u003c回溯时间（秒）\u003e [描述文本]```。其中描述文本可选，如果不指定描述文本，将会自动设置一个“手动切片_{编号}”的表述文本。\n\n比如说，如果想要截取当前时间向前 5 分钟的内容，只需要发送```/DDR clip 300```。\n\n如果想要指定描述文本为“主播锐评 ylg”，发送```/DDR clip 60 主播锐评ylg```即可。\n\n手动切片的将会输出到与自动切片相同的文件夹，因此受到 uploader-clippers 中的设置项控制。即如果打开了自动上传切片功能，手动切片同样也会上传，不过分 P 名将不再是自动采集的弹幕关键词，而是上面所述的描述文本。\n\n### 全局设置（root 部分）\n- check_interval: 直播间开播状态检查间隔，单位为秒，每个监控直播间单独计数，因此如果监控直播间较多，建议适当调大。由于 B 站 API 访问次数限制，建议不要小于 30。默认：100\n- print_interval：控制台消息打印间隔，单位为秒。\n- data_path: 数据文件路径。默认：\"./\"（即程序所在路径）\n- logger: 日志相关设置\n  - log_path: 日志文件路径。默认：\"./log\"\n  - log_level: 日志级别，可选 DEBUG\\INFO\\WARN\n- request_header: 请求时使用的头。代码中已经包含了一个默认的，在这里进行调整将会覆盖默认值，如无必要请留空。\n- uploader: 上传器相关设置\n  \u003c!-- - upload_by_edit：通过编辑稿件的方法上传多 P 切片，可以让后续分 P 上传时让前面的分 P 进入审核队列，加快开放浏览的速度。**请注意打开此功能时，请保持 keep_record_after_upload 和 keep_clippers_after_upload 为 True。否则，keep_record_after_upload 和 keep_clippers_after_upload 设置项将无效。**\n  - thread_pool_workers: 上传时的线程池大小。默认：1\n  - max_retry: 最大重试次数。默认：10 --\u003e\n  - lines: 上传使用的线路，可以选择 bda2, kodo, ws, qn, cos, cos-internal(支持腾讯云内网免流 + 提速)\n- enable_baiduyun：是否开启百度云功能。\n\n### 直播间特定设置（spec 部分，此部分是一个数组，如果需要同时监控多个直播间，依次添加至数组中即可）\n- room_id: 房间号\n- recorder: 录制器相关设置\n  - keep_raw_record: 是否保留原始录像（flv）文件（录制器最后会合并所有 flv 文件导出 mp4）。默认：true\n- parser: 弹幕分析器相关设置\n  - interval: 弹幕计数间隔，单位秒。默认：30.\n  - up_ratio: 开始切片位置弹幕数量与上一个时段弹幕数量之比的阈值。默认：2.5\n  - down_ratio: 结束切片位置弹幕数量与上一个时段弹幕数量之比的阈值。默认：0.75\n  - topK: 提取弹幕关键词的数量。默认：5\n- clipper: 切片器相关设置\n  - enable_clipper: 启用切片功能。默认：true\n  - min_length: 切片最短长度，单位秒。默认：60\n  - start_offset: 切片开始时间偏移量，正为向后偏移，负为向前偏移，单位秒。默认：0。建议根据直播间弹幕延迟调整。\n  - end_offset: 切片结束时间偏移量，正为向后偏移，负为向前偏移，单位秒。默认：0。建议根据直播间弹幕延迟调整。\n- manual_clipper: 手动切片器相关设置\n  - enabled：启用手动切片器功能。默认：false\n  - uid：手动切片器接受指令的用户 UID。\n  - command: 自定义手动切片触发指令。\n- uploader: 上传器相关设置\n  - account: 上传账户信息\n    - username: 用户名\n    - password: 密码\n    - access_token: Access token \n    - refresh_token: Refresh token\n    - cookies:\n      - SESSDATA: your SESSDATA\n      - bili_jct: your bili_jct\n      - DedeUserID: your DedeUserID\n      - DedeUserID__ckMd5: your DedeUserID__ckMd5\n      - sid: your sid\n  - copyright: 稿件类型（1：自制，2：转载）**警告！未经授权投稿“自制”可能导致稿件无法通过审核！**\n  - record: 录播上传设置\n    - upload_record: 是否上传录播。默认：true\n    - keep_record_after_upload: 是否在上传过审后保留录播。默认：true\n    - split_interval: 录播划分间隔，单位秒。由于 B 站无法一次上传大文件，因此长录播需要分片才能上传。默认：3600。**如设为 0，表示不划分，如此请保证账号具有上传超大文件权限。**\n    - title：上传视频的标题，可以使用占位符。\n    - tid：分区编号，可在 https://github.com/FortuneDayssss/BilibiliUploader/wiki/Bilibili%E5%88%86%E5%8C%BA%E5%88%97%E8%A1%A8 查询\n    - tags：上传视频的标签\n    - desc：上传视频的描述，可以使用占位符。\n    - cover：上传视频使用的封面文件路径。\n  - clippers: 切片上传设置\n    - upload_clippers: 是否上传切片。默认：true\n    - keep_clippers_after_upload: 是否在上传过审后保留切片。默认：true\n    - title：上传视频的标题，可以使用占位符。\n    - tid：分区编号，可在 https://github.com/FortuneDayssss/BilibiliUploader/wiki/Bilibili%E5%88%86%E5%8C%BA%E5%88%97%E8%A1%A8 查询\n    - tags：上传视频的标签\n    - desc：上传视频的描述，可以使用占位符。\n    - cover：上传视频使用的封面文件路径。\n- backup：是否将录像备份到百度云。\n\n## 已知问题\n- record 文件夹下产生大量空文件夹。（Work-around patch）\n- 自动上传无法登录，电磁力不足无法投稿分 P 稿件。（已更新）\n- 被 B 站风控系统 412 后会无法工作。（预期下个功能更新优化。）\n- PK 导致分辨率不正确出现花屏。（正在调查。）\n\n## 预期更新\n- 弹幕 jsonl 转为 ass 字幕并自动压入录播文件的功能。（预期下个功能更新。）\n- 不上传百度也会在切片和或录播上传完成后删去 merge 文件的功能。（_预期下个功能更新。说实话不是很想加这个功能，可能这就是仓鼠症患者吧……_）\n- 增加斗鱼、Twitch 和油管支持。（预期当前功能稳定后加入。）\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAsaChiri%2FDDRecorder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAsaChiri%2FDDRecorder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAsaChiri%2FDDRecorder/lists"}