auqhjjqdo / LiveRecorder

基于Streamlink的全自动直播录制工具,已支持哔哩哔哩、斗鱼、虎牙、抖音、YouTube、Twitch等
MIT License
536 stars 57 forks source link

严重的BUG 多个主播文件名混淆 #101

Open NormanMises opened 6 months ago

NormanMises commented 6 months ago

运行环境

版本号:v2.33 运行平台:Windows 11 运行架构:x64 Python版本:3.10.6

配置文件

{
  "proxy": "http://127.0.0.1:10809",
  "output": "E:/records/0-Captures",
  "user": [
    {
      "platform": "Pandalive",
      "id": "pandaex",
      "output": "E:/records/0-Captures/PD",
      "proxy": null,
      "cookies": xxxx
    },
    {
      "platform": "Pandalive",
      "id": "jinricp",
      "output": "E:/records/0-Captures/PD",
      "proxy": null,
      "cookies": 
    },
    {
      "platform": "Pandalive",
      "id": "imissy0u",
      "output": "E:/records/0-Captures/PD",
      "proxy": null,
      "cookies": xxxxxx
    },

复现步骤(可选)

当同时录制多个主播时,不同主播名称混淆,名称错误 QQ截图20240312130019

错误描述

当同时录制多个主播时,不同主播名称混淆,名称错误 QQ截图20240312130019 log_2024-03-11.log

错误日志

已上传

错误截图(可选)

No response

auqhjjqdo commented 5 months ago

文件名中的主播名是config.json中自定义的name字段,直播标题取自官方api接口返回的数据,我自己测试并未出现文件名混淆的问题

auqhjjqdo commented 5 months ago

我看你的日志里,录制的文件名并非[年.月.日 时.分.秒][平台][主播名]直播标题.格式的形式,如果你是自己修改过代码,请自行解决模板字符串的对应关系

NormanMises commented 5 months ago

嗯应该是我改的地方有点问题 是想按streamlink官方那样命名来着😂

NormanMises commented 5 months ago

这样中括号看起来太难受了 标题也不是很必要感觉

NormanMises commented 5 months ago

image 破案了 用最新的exe也这样

auqhjjqdo commented 5 months ago

image 破案了 用最新的exe也这样

这个地方的名字是取的config.json里写的name字段,没写name那就取的id,所有平台都这么写的,换个name看看呢 https://github.com/auqhjjqdo/LiveRecorder/blob/d660868db103f89e5c3fa15ec4e348d2c891f825/live_recorder.py#L33

NormanMises commented 5 months ago

我根本没设name,默认用的id🤣

auqhjjqdo commented 5 months ago

https://github.com/auqhjjqdo/LiveRecorder/blob/d660868db103f89e5c3fa15ec4e348d2c891f825/live_recorder.py#L33-L34 https://github.com/auqhjjqdo/LiveRecorder/blob/d660868db103f89e5c3fa15ec4e348d2c891f825/live_recorder.py#L112 https://github.com/auqhjjqdo/LiveRecorder/blob/d660868db103f89e5c3fa15ec4e348d2c891f825/live_recorder.py#L134 https://github.com/auqhjjqdo/LiveRecorder/blob/d660868db103f89e5c3fa15ec4e348d2c891f825/live_recorder.py#L149 这是文件名的几个引用,都是封装在基类LiveRecorder里的函数,所有录制的平台共用该文件名获取逻辑,至于你这种情况pandalive是错的我没测出来

auqhjjqdo commented 5 months ago

有一种可能,就是pandalive直播是录制的同一个主播,但官方返回的直播流是另一个主播的,导致文件名和直播流不匹配,这种是官方原因无解

NormanMises commented 5 months ago

有一种可能,就是pandalive直播是录制的同一个主播,但官方返回的直播流是另一个主播的,导致文件名和直播流不匹配,这种是官方原因无解

不是吧,我用streamlink命令行没出现过这样的情况,是不是这开多线程导致变量共用之类的问题

auqhjjqdo commented 5 months ago

有一种可能,就是pandalive直播是录制的同一个主播,但官方返回的直播流是另一个主播的,导致文件名和直播流不匹配,这种是官方原因无解

不是吧,我用streamlink命令行没出现过这样的情况,是不是这开多线程导致变量共用之类的问题

主程序是用的协程,只有调用steamlink录制和ffmpeg封装时为了防止阻塞才用了线程,变量都是直接传进线程里,最后只返回运行是否成功的状态,如果线程安全原因导致的变量冲突理论上开多个平台的直播都会全部出现问题,不只是pandalive 另外之前有部分用户反馈pandalive有出现花屏现象,估计也是官方的直播流混流的原因

NormanMises commented 5 months ago

好吧 需要手动检查就是了。老哥能不能给ffmpeg下载的时候加一些参数使得可以直接剪辑呀,我现在都要手动转码才能剪辑(用的是losslesscut)https://github.com/mifi/lossless-cut

auqhjjqdo commented 5 months ago

好吧 需要手动检查就是了。老哥能不能给ffmpeg下载的时候加一些参数使得可以直接剪辑呀,我现在都要手动转码才能剪辑(用的是losslesscut)https://github.com/mifi/lossless-cut

个性化需求建议自己fork改代码,具体修改地址如下 https://github.com/auqhjjqdo/LiveRecorder/blob/d660868db103f89e5c3fa15ec4e348d2c891f825/live_recorder.py#L170-L175

codec为copy就是不转码只封装,你可以改成libx264之类的实现转码 其他的参数请参考https://kkroening.github.io/ffmpeg-python/

NormanMises commented 5 months ago

好的谢谢

daxiaamo commented 5 months ago

我也发现了输出的文件名和流的名字不一致这个问题而且不一致的流必然会花屏,只要你直播间开的够多在afreecaTV上也能复现一样的问题我,但是当你把出问题的直播间单独录制的时候就可以正常录制,在逻辑上我分析可能是由于没有成功申请到流所以已经存在的流信息被复用了,在Windows上似乎还存在内存泄漏问题,当你一直开着检测录制的时候占用的内存会一直增加有一部分不会回收,到一定成都程序会因为内存占满而自动退出,需要定期重启来重置内存占用。

NormanMises commented 2 months ago

文件名混淆这个估计是我改代码出问题了,源代码应该没问题

auqhjjqdo commented 2 months ago

混流花屏的问题好像还是存在,也有其他人发issue,但我一直没复现出来,其他平台同时录制好几个直播都没见有人说花屏,我还是怀疑平台自身原因

Hertz221 commented 2 months ago

我的issus跟楼上说的一样(就是bigo直播),至于是主播名混淆还是什么,不清楚,画面花屏会出现两个主播的画面(可能就是这个原因花屏的?),文件名是其中一个主播的,大概跟这个issus是一个问题