GithubHelp home page GithubHelp logo

biliup / biliup Goto Github PK

View Code? Open in Web Editor NEW
2.4K 20.0 341.0 2.28 MB

全自动录播、直播录制、分p投稿工具,支持twitch、ytb频道搬运。

Home Page: https://biliup.github.io/biliup/

License: MIT License

Python 74.12% Dockerfile 0.25% CSS 1.13% HTML 0.06% JavaScript 0.02% TypeScript 22.40% SCSS 1.92% Mako 0.10%
bilibili huya douyu douyin bilibiliupload youtube twitch downloader download

biliup's Introduction

biliup

python PyPI PyPI - Downloads license Telegram Discord chat

STARS Forks Downloads Watchers

  • 支持自动录制各大主流直播平台实时直播流,包括但不限于AcFun,afreecaTV,哔哩哔哩,斗鱼,抖音,虎牙,网易CC,NICO,猫耳FM, Twitch,YY直播等,并于录制结束后自动上传到哔哩哔哩视频网站。
  • 支持YouTube,twitch直播回放列表自动搬运至b站,如链接 https://www.twitch.tv/xxxx/videos?filter=archives&sort=time
  • 支持录制哔哩哔哩,斗鱼,虎牙,Twitch平台的直播弹幕,生成B站标准格式的XML弹幕文件,可被常见的各种弹幕挂载程序使用处理
  • 自动选择上传线路,保证国内外vps上传质量和速度
  • 从 v0.4.32 版本开始,不依赖配置文件可直接使用webUI,若想和低于 v0.4.32 时一致使用配置文件,请添加启动参数--no-http
  • 可分别控制下载与上传并发量
  • 支持 cos-internal,腾讯云上海内网上传,免流 + 大幅提速
  • 实验性功能:
    • 防止录制花屏(使用默认的stream-gears下载器就会有这个功能)

更新日志CHANGELOG.md

社区教程图文教程 by @ikun1993

Quick Start

  1. pip3 install biliup
  2. biliup start
  3. 启动时访问 http://your-ip:19159 使用webUI,

How to Contribute

  1. 安装足够新的 nodejs version >= 18
  2. npm i
  3. npm run dev
  4. python3 -m biliup
  5. 访问http://localhost:3000

Credits

  • Thanks ykdl, youtube-dl, streamlink provides downloader.
  • Thanks THMonster/danmaku.

GUI:B站投稿客户端 biliup-app

赞助

  • 爱发电 :https://afdian.net/a/biliup

Stars

Star History Chart

biliup's People

Contributors

1toldyou avatar a554233472 avatar alpzmj9 avatar boxie123 avatar coolzxp avatar dreammu avatar ekkog avatar fairyworld avatar forgqi avatar haha114514 avatar infinity-m avatar kataick avatar kira1928 avatar kiritomo avatar knaifen avatar luckycat0426 avatar pyooyq avatar stevenlele avatar storyxc avatar the-d66 avatar uvjkintq avatar v2wy avatar viondw avatar weidows avatar wpcwzy avatar xxxxuanran avatar yzydlc avatar zclkkk avatar zhangmingzhao1 avatar zzc10086 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

biliup's Issues

多台电脑

由于宽带等问题
同时下载几个直播可能会卡顿或者有问题
有没有办法拓展到多台电脑分担�下载任务

参考readme里的上传范例上传时报错

上传用的程序和报错请见附图。不太清楚这个api啥意思,遂直接来讨教了。是因为账号登陆太多次了吗?之前用同样的程序尝试过上传,工作正常,但现在不行了。差别只在换了被上传的视频。
程序
报错

建议添加录播文件暂存功能

如题,现在在成功上传后就会直接删掉文件,但如果没过审的话文件就没法找回了。因而建议添加可以让文件暂存可选的一段时间的功能。

录制之后,上传失败,

求帮助-_-

OS:Linux raspberrypi 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux

2019-10-14 16:45:38,225 upload.py[line:171](Pid:18773 Tname:Thread-2) info 更新cookie失败
2019-10-14 16:45:38,319 upload.py[line:144](Pid:18773 Tname:Thread-2) info 浏览器驱动退出
2019-10-14 16:46:05,147 handler.py[line:65](Pid:18773 Tname:Thread-4) error IOError
Traceback (most recent call last):
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/engine/handler.py", line 58, in all_check
if one('检测' + url, url).check_stream():
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/engine/plugins/general.py", line 17, in check_stream
info = site.parser(url)
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractor.py", line 21, in parser
info = self.prepare()
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractors/douyu/live.py", line 183, in prepare
error_msg = get_live_info()
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractors/douyu/live.py", line 150, in get_live_info
html_content = get_content('https://www.douyu.com/lapi/live/getH5Play/{}'.format(self.vid), data=data)
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/util/html.py", line 67, in get_content
response = urlopen(req)
File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.5/urllib/request.py", line 472, in open
response = meth(req, response)
File "/usr/lib/python3.5/urllib/request.py", line 582, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.5/urllib/request.py", line 510, in error
return self._call_chain(*args)
File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
result = func(*args)
File "/usr/lib/python3.5/urllib/request.py", line 590, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
2019-10-14 16:46:05,153 upload.py[line:261](Pid:18773 Tname:Thread-2) info 准备上传2019.10.14雪鲍
2019-10-14 16:46:43,723 upload.py[line:148](Pid:18773 Tname:Thread-2) info 准备更新cookie
2019-10-14 16:46:59,442 upload.py[line:171](Pid:18773 Tname:Thread-2) info 更新cookie失败
2019-10-14 16:46:59,541 upload.py[line:144](Pid:18773 Tname:Thread-2) info 浏览器驱动退出
2019-10-14 16:47:01,283 handler.py[line:65](Pid:18773 Tname:Thread-4) error IOError
Traceback (most recent call last):
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/engine/handler.py", line 58, in all_check
if one('检测' + url, url).check_stream():
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/engine/plugins/general.py", line 17, in check_stream
info = site.parser(url)
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractor.py", line 21, in parser
info = self.prepare()
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractors/douyu/live.py", line 183, in prepare
error_msg = get_live_info()
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractors/douyu/live.py", line 150, in get_live_info
html_content = get_content('https://www.douyu.com/lapi/live/getH5Play/{}'.format(self.vid), data=data)
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/util/html.py", line 67, in get_content
response = urlopen(req)
File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.5/urllib/request.py", line 472, in open
response = meth(req, response)
File "/usr/lib/python3.5/urllib/request.py", line 582, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.5/urllib/request.py", line 510, in error
return self._call_chain(*args)
File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
result = func(*args)
File "/usr/lib/python3.5/urllib/request.py", line 590, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
2019-10-14 16:47:01,289 upload.py[line:261](Pid:18773 Tname:Thread-2) info 准备上传2019.10.14雪鲍
2019-10-14 16:47:39,796 upload.py[line:148](Pid:18773 Tname:Thread-2) info 准备更新cookie
2019-10-14 16:47:55,181 upload.py[line:171](Pid:18773 Tname:Thread-2) info 更新cookie失败
2019-10-14 16:47:55,329 upload.py[line:144](Pid:18773 Tname:Thread-2) info 浏览器驱动退出
2019-10-14 16:48:30,178 upload.py[line:261](Pid:18773 Tname:Thread-2) info 准备上传2019.10.14雪鲍
2019-10-14 16:48:45,942 init.py[line:35](Pid:23307 Tname:Thread-4) info 开始下载Generic:雪鲍
2019-10-14 16:48:45,955 init.py[line:242](Pid:23307 Tname:Thread-5) info 获取到23307,雪鲍1571042910.flv.part
2019-10-14 16:49:10,345 upload.py[line:148](Pid:18773 Tname:Thread-2) info 准备更新cookie
2019-10-14 16:49:26,673 upload.py[line:171](Pid:18773 Tname:Thread-2) info 更新cookie失败
2019-10-14 16:49:26,772 upload.py[line:144](Pid:18773 Tname:Thread-2) info 浏览器驱动退出
2019-10-14 16:49:56,878 handler.py[line:65](Pid:18773 Tname:Thread-3) error IOError
Traceback (most recent call last):
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/engine/handler.py", line 58, in all_check
if one('检测' + url, url).check_stream():
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/engine/plugins/general.py", line 17, in check_stream
info = site.parser(url)
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractor.py", line 21, in parser
info = self.prepare()
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractors/douyu/live.py", line 183, in prepare
error_msg = get_live_info()
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/extractors/douyu/live.py", line 150, in get_live_info
html_content = get_content('https://www.douyu.com/lapi/live/getH5Play/{}'.format(self.vid), data=data)
File "/media/pi/62cbccdf-3771-4dfb-8fd6-aa226d70ff55/bilibiliupload/ykdl/util/html.py", line 67, in get_content
response = urlopen(req)
File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.5/urllib/request.py", line 472, in open
response = meth(req, response)
File "/usr/lib/python3.5/urllib/request.py", line 582, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.5/urllib/request.py", line 510, in error
return self._call_chain(*args)
File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
result = func(*args)
File "/usr/lib/python3.5/urllib/request.py", line 590, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

关于Bilibili录制稳定性的疑问

ForgQi您好!感谢开发,目前有几个问题想问您:

因为您的上传中区分了海外VPS和国内VPS,但是从我的测试中通过Streamlink/Ytdl等等抓流的录制方法效果并不理想,经常会出现断流的情况。浏览了您的源码我不知道您对于断流这部分有没有异常处理的方法。

一个简单的方案是静默180s 等status=0持续180s后确认下播 确认目前已录制文件 再进行合并修复为一个文件后上传

另外一个enhancement方案,目前有you-live 支持另一种通过模拟浏览器访问的方式进行录制,经测试稳定性较好。不知道此后可否支持?

加入编辑已有视频分P的功能

希望能加入类似 https://github.com/FortuneDayssss/BilibiliUploader/blob/master/bilibiliuploader/core.py#L596 的编辑已有视频的分P功能
大致思路如下:

def get_post_data(self, avid):
        headers = {
        'Connection': 'keep-alive',
        'Host': 'member.bilibili.com',
        'Accept-Encoding': 'gzip,deflate',
        'User-Agent': '',
        }


        params = {
            "access_key": self.access_token,
            "aid": avid,
            "build": "1054"
        }

        params["sign"] = self.sign(f"appkey={self.app_key}")

        r = requests.get(
            url="http://member.bilibili.com/x/client/archive/view",
            headers=headers,
            params=params,
            cookies=self.cookies
        )

        return r.json()["data"]

    def edit(self, avid, parts):
        post_video_data = self.get_post_data(avid)

        headers = {
        'Connection': 'keep-alive',
        'Content-Type': 'application/json',
        'User-Agent': '',
        }
        submit_data = {
            'aid': post_video_data["archive"]["aid"],
            'bvid': post_video_data["archive"]["bvid"],
            'build': 1054,
            'copyright': post_video_data["archive"]["copyright"],
            'cover': post_video_data["archive"]["cover"],
            'desc': post_video_data["archive"]["desc"],
            'no_reprint': post_video_data["archive"]["no_reprint"],
            'source': post_video_data["archive"]["source"],
            'tag': post_video_data["archive"]["tag"],
            'tid': post_video_data["archive"]["tid"],
            'title': post_video_data["archive"]["title"],
            'videos': post_video_data["videos"]
        }

        for video_part in parts:
            submit_data["videos"].append(video_part)
        
        params = {
            "access_key": self.access_token,
        }

        params["sign"] = self.sign(f"appkey={self.app_key}")

        r = self.__session.post(url="http://member.bilibili.com/x/vu/client/edit",
        params=params,
        headers=headers,
        verify=False,
        cookies=self.cookies,
        json=submit_data)

        print("edit submit")
        print(r.status_code)
        print(r.content.decode())

        data = r.json()["data"]
        return data["aid"]

windows設定問題

單純只要自動錄播油管或者tc的頻道的話

chromedrive_path: C:\chromedriver.exe
#chromedrive_path: D:\bilibiliupload\chromedriver.exe
這兩行該如何設定?

另外該如何設定下載位置?

无法使用密码登陆

试了几个号登陆都报错:{'code': 86066, 'message': '该账号冻结中', 'ttl': 1, 'data': None}
但账号可以正常使用

直播监视未按预期工作

streamers中有多个监视目标时,如果排在后面的目标未开播,则前面的目标即使开播也不会被监视到。
测试发现从0.0.3版本开始有这个问题,使用场景为针对B直播间进行录播。

请教一些问题(文件大小限制、分p、cookies)

首先对作者的工作表示感谢!使用账号密码登录不用验证也太强了。

问题一:上传文件大小限制
目前遇到的问题是b站的文件大小限制(限制8G)和分p问题。
使用上传demo中的代码上传超过8G的视频,会正常上传,上传完成后出现如下bug:

5.88MB/s => 99.6%Uncaught exception:
Traceback (most recent call last):
  File "Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "Python\Python38\lib\http\client.py", line 1347, in getresponse
    response.begin()
  File "Python\Python38\lib\http\client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "Python\Python38\lib\http\client.py", line 268, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "Python\Python38\lib\socket.py", line 669, in readinto
    return self._sock.recv_into(b)
  File "Python\Python38\lib\ssl.py", line 1241, in recv_into
    return self.read(nbytes, buffer)
  File "Python\Python38\lib\ssl.py", line 1099, in read
    return self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out

如果这个文件大小的限制不能通过其他的上传途径(如b站特殊的投稿工具)解决的话,是否可以当文件过大时进行警告

问题二:分p上传
另一种解决方案应该是自动将文件切片,然后分p上传(感觉docker的自动录制上传工具应该是实现了的,但是没有测试,望作者回答),在#30 (comment) 中作者说支持,请求相关的demo?

问题三:使用cookies上传
上传demo中给出使用账号密码登录的方法,我找到使用cookies上传的方法,感觉高强度使用账号密码登录会被b站风控?或者说使用账号密码是否会转换为cookies登录?
以下为使用cookies上传的代码:

from biliup.plugins.bili_webup import BiliBili, Data

video = Data()
video.title = '视频标题'
video.desc = '视频描述'
video.source = '转载视频来源'
# 设置视频分区,默认为160 生活分区
video.tid = 162  # 绘画
video.set_tag(['test1', 'test2'])
with BiliBili(video) as bili:
    # 使用用户名密码登录
    # bili.login_by_password("username", "password")

    # 使用cookies登录,将cookies转换为字典形式
    bili.login_by_cookies({"innersign": "0", "_uuid": "xxxxxxxxxxxxxxxx",
                           "buvid3": "xxxxxxxxxxxxxxxx",
                           "fingerprint": "xxxxxxxxxxxxxxxx",
                           "buvid_fp": "xxxxxxxxxxxxxxxx",
                           "buvid_fp_plain": "xxxxxxxxxxxxxxxx",
                           "SESSDATA": "xxxxxxxxxxxxxxxx",
                           "bili_jct": "xxxxxxxxxxxxxxxx", "DedeUserID": "xxxxxxxxxxxxxxxx",
                           "DedeUserID__ckMd5": "xxxxxxxxxxxxxxxx", "sid": "xxxxxxxxxxxxxxxx", "PVID": "1",
                           "bfe_id": "xxxxxxxxxxxxxxxx"})

    # for file in file_list:
    file = "文件路径"
    video_part = bili.upload_file(file)  # 上传视频
    video.videos.append(video_part)  # 添加已经上传的视频

    # video.cover = bili.cover_up('/cover_path').replace('http:', '')   # 上传的封面的路径

    # ret = bili.submit()  # 提交视频(使用密码)
    ret = bili.submit(submit_api='web')  # 提交视频(使用cookies)

bilibili 403

拿到了播放地址,但是服务端返回403。

2021-05-05 11:03:59,702 download.py[line:58](Pid:9691 Tname:Asynchronous1_0) info 开始下载Bilibili:棉花大哥哥
2021-05-05 11:04:06,318 download.py[line:51](Pid:9691 Tname:Asynchronous1_0) info 1part: 棉花大哥哥1620212643.flv
2021-05-05 11:04:06,318 download.py[line:77](Pid:9691 Tname:Asynchronous1_0) info FileNotFoundError:棉花大哥哥1620212643.flv
2021-05-05 11:04:16,204 __init__.py[line:17](Pid:9691 Tname:MainThread) error Uncaught exception:
Traceback (most recent call last):
  File "/usr/local/bin/biliup", line 33, in <module>
    sys.exit(load_entry_point('biliup', 'console_scripts', 'biliup')())
  File "/home/coder/project/bilibiliupload/biliup/__main__.py", line 25, in _main
    asyncio.run(main())
  File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 571, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever
    self._run_once()
  File "/usr/lib/python3.7/asyncio/base_events.py", line 1739, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.7/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
KeyboardInterrupt
2021-05-05 11:05:17,080 download.py[line:58](Pid:9844 Tname:Asynchronous1_0) info 开始下载Bilibili:棉花大哥哥
2021-05-05 11:05:20,957 download.py[line:51](Pid:9844 Tname:Asynchronous1_0) info 1part: 棉花大哥哥1620212720.flv
2021-05-05 11:05:20,958 download.py[line:77](Pid:9844 Tname:Asynchronous1_0) info FileNotFoundError:棉花大哥哥1620212720.flv
2021-05-05 11:05:26,506 __init__.py[line:17](Pid:9844 Tname:MainThread) error Uncaught exception:
Traceback (most recent call last):
  File "/usr/local/bin/biliup", line 33, in <module>
    sys.exit(load_entry_point('biliup', 'console_scripts', 'biliup')())
  File "/home/coder/project/bilibiliupload/biliup/__main__.py", line 25, in _main
    asyncio.run(main())
  File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.7/asyncio/base_events.py", line 571, in run_until_complete
    self.run_forever()
  File "/usr/lib/python3.7/asyncio/base_events.py", line 539, in run_forever
    self._run_once()
  File "/usr/lib/python3.7/asyncio/base_events.py", line 1739, in _run_once
    event_list = self._selector.select(timeout)
  File "/usr/lib/python3.7/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
KeyboardInterrupt
2021-05-05 11:06:10,089 download.py[line:51](Pid:9844 Tname:Asynchronous1_0) info 1part: 棉花大哥哥1620212769.flv
2021-05-05 11:06:10,090 download.py[line:77](Pid:9844 Tname:Asynchronous1_0) info FileNotFoundError:棉花大哥哥1620212769.flv
2021-05-05 11:07:00,028 download.py[line:51](Pid:9844 Tname:Asynchronous1_0) info 1part: 棉花大哥哥1620212819.flv
2021-05-05 11:07:00,029 download.py[line:77](Pid:9844 Tname:Asynchronous1_0) info FileNotFoundError:棉花大哥哥1620212819.flv
Please install at least one of the following Javascript interpreter.'
python packages: PyChakra, quickjs
applications: Gjs, CJS, QuickJS, JavaScriptCore, Node.js, etc.
download.py58[info]Tname:Asynchronous1_0 开始下载Bilibili:棉花大哥哥
ffmpeg version 4.1.6-1~deb10u1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 8 (Debian 8.3.0-6)
  configuration: --prefix=/usr --extra-version='1~deb10u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100

[https @ 0x5609030ca5c0] HTTP error 403 Forbidden
https://d1--cn-gotcha05.bilivideo.com/live-bvc/717140/live_1871001_5342575.flv?cdn=cn-gotcha05&expires=1620216318&len=0&oi=602528411&pt=web&qn=10000&trid=f7708fd7ecfa41b9a8173c30373cc210&sigparams=cdn,expires,len,oi,pt,qn,trid&sign=476368b126971b3948414bef69ee860c&ptype=0&src=9&sl=2&sk=59b4112a8c653bb&order=3: Server returned 403 Forbidden (access denied)


download.py51[info]Tname:Asynchronous1_0 1part: 棉花大哥哥1620212720.flv
download.py77[info]Tname:Asynchronous1_0 FileNotFoundError:棉花大哥哥1620212720.flv
# b站上传线路选择,默认为自动模式,目前可手动切换为bda2, kodo, ws, qn。
lines: AUTO
# 单文件并发上传数,未达到带宽上限时增大此值可提高上传速度
threads: 3
# 录像单文件大小限制,单位Byte,超过此大小分段下载
file_size: 2621440000

streamers:
    棉花大哥哥:
        url:
            - https://live.bilibili.com/103
        tid: 171
        tags:
          - 棉花大哥哥
          - 棉花

录制抖音未开播时反复写log

抖音未开播时每次检测都会在log产生
“2021-10-12 00:00:05 downloader.py[line:39](Pid:414727 Tname:Asynchronous2_1) error Uncaught exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/biliup/downloader.py", line 29, in check_url
if plugin(f'检测{url}', url).check_stream():
File "/usr/local/lib/python3.8/dist-packages/biliup/plugins/douyin.py", line 37, in check_stream
r5 = json.loads(r2)['initialState']['roomStore']['roomInfo']['room']['stream_url']['flv_pull_url']
KeyError: 'stream_url'”
等级INFO
求大佬帮忙看下能否解决还是我配置有误

请教录播上传报错的问题

大佬您好,很抱歉再次打扰了,录制完成并上传后,遇到了一个报错
使用持久化内容上传
使用cookies上传
bili_webup.py178[info]Tname:Asynchronous2_1 线路:[{'query': 'upcdn=qn&probe_version=20200810', 'probe_url': '//upos-sz-upcdnqn.bilivideo.com/OK', 'os': 'upos'}]
upcdn=qn&probe_version=20200810 0.29511920699997063
bili_webup.py221[info]Tname:Asynchronous2_1 线路选择upos: upcdn=qn&probe_version=20200810. time: None
55.74MB/s => 98.8%bili_webup.py328[info]Tname:Asynchronous2_1 斗鱼录播 2021-6-23 part-000.flv uploaded >> 55.81MB/s. {'OK': 1, 'bucket': 'ugc', 'location': 'ugc/n21624qn25f938ghamy8i1l6o3da4s.flv', 'key': '/n210624qn25f98ghamy8l6o3bda4s.flv', 'etag': '270379118'}
{'code': 0, 'message': '0', 'ttl': 1}
uploader.py29[error]Tname:Asynchronous2_1 Uncaught exception:
Traceback (most recent call last):
File "/root/bilibiliupload/biliup/uploader.py", line 27, in upload
return cls(index, data, **kwargs).start()
File "/root/bilibiliupload/biliup/engine/upload.py", line 55, in start
self.upload(UploadBase.file_list(self.principal))
File "/root/bilibiliupload/biliup/plugins/bili_webup.py", line 55, in upload
ret = bili.submit() # 提交视频
File "/root/bilibiliupload/biliup/plugins/bili_webup.py", line 366, in submit
myinfo['total_info'] = total_info['data']
KeyError: 'data'
之后陷入死循环,再次上传所有录播文件直到vps流量耗尽
请问是哪里出了问题,麻烦大佬解答一下,感谢

上传时汇报错误,无法完成上传

报错内容见下

2021-08-31 21:14:31,702 uploader.py[line:29](Pid:3391 Tname:Asynchronous2_0) error Uncaught exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/biliup/uploader.py", line 27, in upload
return cls(index, data, **kwargs).start()
File "/usr/local/lib/python3.8/dist-packages/biliup/engine/upload.py", line 55, in start
needed2process = self.upload(UploadBase.file_list(self.principal))
File "/usr/local/lib/python3.8/dist-packages/biliup/plugins/bili_webup.py", line 58, in upload
ret = bili.submit(self.submit_api) # 提交视频
File "/usr/local/lib/python3.8/dist-packages/biliup/plugins/bili_webup.py", line 367, in submit
myinfo = self.__session.get('https://member.bilibili.com/x/web/archive/pre?lang=cn',
File "/usr/lib/python3/dist-packages/requests/models.py", line 897, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3/dist-packages/simplejson/init.py", line 518, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

请教ffmpeg -fs连续下载是如何实现的

在ffmpeg命令中使用ffmpeg -i url -fs xxxx -c copy filename下载直播视频流会在第一次达到设定文件大小后结束任务
在download.py源码中也是使用的这种方式,没有看到是如何处理实现分段连续下载的,请大佬解答一下,感谢

请升级到最新版本

submit视频的时候报错:
‘code’:-2100,'message':'请升级到最新版本'
更换分区tid也不行。。。

下载时发生问题

下载B站直播时日志文件中一直显示
1part:XXXX.mp4
FileNotFoundError:XXXX.mp4

关于指定封面

请问关于指定封面的方法有更详细的说明或者限制吗?今天测试时发现因为封面卡在上传过程了,不指定封面的话就能工作了。

能支持下树莓派么!(萌新)

sudo docker build . -t sc2
输出

Sending build context to Docker daemon 821.2kB
Step 1/13 : FROM jrottenberg/ffmpeg
---> 2100506dfbea
Step 2/13 : RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y locales && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && apt-get install -y curl && apt-get install -y python3-pip && apt-get install unzip && DL=https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && curl -sL "$DL" > /tmp/chrome.deb && apt install --no-install-recommends --no-install-suggests -y /tmp/chrome.deb && CHROMIUM_FLAGS='--no-sandbox --disable-dev-shm-usage' && sed -i '${s/$/'" $CHROMIUM_FLAGS"'/}' /opt/google/chrome/google-chrome && BASE_URL=https://chromedriver.storage.googleapis.com && VERSION=$(curl -sL "$BASE_URL/LATEST_RELEASE") && curl -sL "$BASE_URL/$VERSION/chromedriver_linux64.zip" -o /tmp/driver.zip && unzip /tmp/driver.zip && chmod 755 chromedriver && mv chromedriver /usr/local/bin/ && apt-get autoremove --purge -y unzip && apt-get clean && rm -rf /tmp/* /usr/share/doc/* /var/cache/* /var/lib/apt/lists/* /var/tmp/*
---> Running in 868f24dae210
standard_init_linux.go:211: exec user process caused "exec format error"
The command '/bin/sh -c export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y locales && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && apt-get install -y curl && apt-get install -y python3-pip && apt-get install unzip && DL=https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && curl -sL "$DL" > /tmp/chrome.deb && apt install --no-install-recommends --no-install-suggests -y /tmp/chrome.deb && CHROMIUM_FLAGS='--no-sandbox --disable-dev-shm-usage' && sed -i '${s/$/'" $CHROMIUM_FLAGS"'/}' /opt/google/chrome/google-chrome && BASE_URL=https://chromedriver.storage.googleapis.com && VERSION=$(curl -sL "$BASE_URL/LATEST_RELEASE") && curl -sL "$BASE_URL/$VERSION/chromedriver_linux64.zip" -o /tmp/driver.zip && unzip /tmp/driver.zip && chmod 755 chromedriver && mv chromedriver /usr/local/bin/ && apt-get autoremove --purge -y unzip && apt-get clean && rm -rf /tmp/* /usr/share/doc/* /var/cache/* /var/lib/apt/lists/* /var/tmp/*' returned a non-zero code: 1

$ docker --version
Docker version 19.03.2, build 6a30dfc

$ docker info

Client:
Debug Mode: false

Server:
Containers: 3
Running: 0
Paused: 0
Stopped: 3
Images: 1
Server Version: 19.03.2
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.19.66-v7+
Operating System: Raspbian GNU/Linux 9 (stretch)
OSType: linux
Architecture: armv7l
CPUs: 4
Total Memory: 926.1MiB
Name: raspberrypi
ID: KN2F:2I3R:IIGS:PKYV:GMAC:PZKD:ZEIT:H3UZ:XTRZ:DYAS:7BSK:Q7GH
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http://127.0.0.1:7890
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support

OS:Linux raspberrypi 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux

请教

抱歉 开了几个issue

我看了代码挺久
跑的时候发现有些error 在ds_update.log
由于程序是主要asyncio里面跑, 比较难开一些互动的环境去debug(例如jupyter)
而且程序里面有时候是用print 有时候用logger , print的话不会投射到ds_update.log里面

能请教你开发的时候一般会怎么调试代码吗

youtube-dl

怎样配置youtube-dl的参数,比如--proxy

投稿入口升级中,无法投稿

2021-08-12 01:15:43,670 bili_webup.py[line:381](Pid:1 Tname:Asynchronous2_0) info 用户权重: 1
2021-08-12 01:15:43,671 bili_webup.py[line:404](Pid:1 Tname:Asynchronous2_0) info 使用客户端api端提交
2021-08-12 01:15:43,757 uploader.py[line:32](Pid:1 Tname:Asynchronous2_0) error Uncaught exception:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/biliup/uploader.py", line 30, in upload
    return cls(index, data, **kwargs).start()
  File "/usr/local/lib/python3.7/site-packages/biliup/engine/upload.py", line 55, in start
    needed2process = self.upload(UploadBase.file_list(self.principal))
  File "/usr/local/lib/python3.7/site-packages/biliup/plugins/bili_webup.py", line 62, in upload
    ret = bili.submit(self.submit_api)  # 提交视频
  File "/usr/local/lib/python3.7/site-packages/biliup/plugins/bili_webup.py", line 396, in submit
    raise Exception(ret)
Exception: {'code': 21150, 'message': '投稿入口升级中,请重新编辑稿件', 'ttl': 1}

Unable to pull docker image

docker run --name biliup -v ~/Videos:/opt -d docker.pkg.github.com/forgqi/bilibiliupload/caution
Unable to find image 'docker.pkg.github.com/forgqi/bilibiliupload/caution:latest' locally
docker: Error response from daemon: Get https://docker.pkg.github.com/v2/forgqi/bilibiliupload/caution/manifests/latest: no basic auth credentials.
See 'docker run --help'.
docker pull docker.pkg.github.com/forgqi/bilibiliupload/caution
Using default tag: latest
Error response from daemon: Get https://docker.pkg.github.com/v2/forgqi/bilibiliupload/caution/manifests/latest: no basic auth credentials

想询问下关于日志文件的问题

是否可以优化一下工作状态的记录,比如在ds_update那个文件里也写上更多类似开启后是否连上了弹幕服务器之类的信息。
另外请问日志文件的生成是遵循怎样的规则,挂在后台有段时间了,结果这两天连到服务器log文件夹下只看到几个日志文件。内容就是连上弹幕服务器,意外断开然后重连的循环。是不是主播不开播就不会有日志文件?
之前遇到过一次不知道为什么主播开播了但biliup没检测到。但那场直播之前的上一场直播时biliup正常录制上传没有问题,这次没能正常开始,但ds_update和log文件都没有反映出工作状态有什么异常。

上传报错

使用环境: Docker over Windows,将Windows下的某个路径挂载到/opt

输出错误:
ds_upload.log中的输出:

uploader.py[line:32](Pid:1 Tname:Asynchronous2_2) error Uncaught exception:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/biliup/uploader.py", line 30, in upload
    return cls(index, data, **kwargs).start()
  File "/usr/local/lib/python3.7/site-packages/biliup/engine/upload.py", line 58, in start
    needed2process = self.upload(UploadBase.file_list(self.principal))
  File "/usr/local/lib/python3.7/site-packages/biliup/plugins/bili_webup.py", line 59, in upload
    video.set_tag(self.tags)
  File "/usr/local/lib/python3.7/site-packages/biliup/plugins/bili_webup.py", line 519, in set_tag
    self.dynamic = f"#{'##'.join(tag)}#"
TypeError: sequence item 1: expected str instance, int found

好像是tag导致的错误?但是我完全是根据config(demo).yaml修改的,只注释掉了以下配置:

#        cover_path: /cover/up.jpg

#        opt_args: # ffmpeg参数
#            - '-ss' # 跳过开始的16秒
#            - '00:00:16'

难道说是Windows的一些编码的错误?

upload_file 中pre_upload return 403

实际报错为无法解析json,代码已经升级至最新版,debug进去后发现是query返回403的问题,使用的节点:upcdn=qn&probe_version=20200810
Screenshot 2021-08-30 210309

构建docker失败

阿里云vps CentOS 进行docker build 命令时报错
The command '/bin/sh -c export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -y curl && apt-get install -y python3-pip && apt-get install -y git && apt-get install -y zip && apt-get install -y nodejs && DL=https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && curl -sL "$DL" > /tmp/chrome.deb && apt install --no-install-recommends --no-install-suggests -y /tmp/chrome.deb && CHROMIUM_FLAGS='--no-sandbox --disable-dev-shm-usage' && sed -i '${s/$/'" $CHROMIUM_FLAGS"'/}' /opt/google/chrome/google-chrome && BASE_URL=https://chromedriver.storage.googleapis.com && VERSION=$(curl -sL "$BASE_URL/LATEST_RELEASE") && curl -sL "$BASE_URL/$VERSION/chromedriver_linux64.zip" -o /tmp/driver.zip && unzip /tmp/driver.zip && chmod 755 chromedriver && mv chromedriver /usr/local/bin/ && apt-get install -y locales && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && apt-get autoremove --purge -y unzip && apt-get clean && rm -rf /tmp/* /usr/share/doc/* /var/cache/* /var/lib/apt/lists/* /var/tmp/*' returned a non-zero code: 35

关于斗鱼直播录制的疑问

大佬您好,使用您的最新版本时发现了一个问题
斗鱼录制时, 当主播突然断网,十几秒后恢复时,录制文件的名字会变回part-000(例如2021-06-22 part-000.flv),以至于会直接覆盖之前已经录制完成的part-000.flv文件
希望大佬能帮忙解答一下如何避免这个问题,谢谢!

无法使用用户名和密码登录

RuntimeError: {'code': 86066, 'message': '该账号冻结中', 'ttl': 1, 'data': None}
怎么解决这个问题?或者说如何用Cookies登录?

twitch不行了吗?

root@ubuntu-4cpu-8gb-us-sjo1:~# python3 -m biliup
download.py71[info]Tname:Asynchronous1_0 开始下载Twitch:星际2INnoVation吕布卫星人族天梯第一视角
download.py80[error]Tname:Asynchronous1_0 Uncaught exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/biliup/engine/download.py", line 74, in start
ret = self.run()
File "/usr/local/lib/python3.8/dist-packages/biliup/engine/download.py", line 60, in run
if not self.check_stream():
File "/usr/local/lib/python3.8/dist-packages/biliup/plugins/twitch.py", line 39, in check_stream
token = access_token['token']
KeyError: 'token'
download.py80[error]Tname:Asynchronous1_0 Uncaught exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/biliup/engine/download.py", line 74, in start
ret = self.run()
File "/usr/local/lib/python3.8/dist-packages/biliup/engine/download.py", line 60, in run
if not self.check_stream():
File "/usr/local/lib/python3.8/dist-packages/biliup/plugins/twitch.py", line 39, in check_stream
token = access_token['token']
KeyError: 'token'

docker 镜像 下载斗鱼直播出错

ykdl报错

Traceback (most recent call last):
File "/usr/local/bin/ykdl", line 10, in
sys.exit(main())
File "/usr/local/lib/python3.7/site-packages/cykdl/main.py", line 209, in main
info = parser(u)
File "/usr/local/lib/python3.7/site-packages/ykdl/extractor.py", line 23, in parser
info = self.prepare()
File "/usr/local/lib/python3.7/site-packages/ykdl/extractors/douyu/live.py", line 62, in prepare
ub98484234(js_enc, self, params)
File "/usr/local/lib/python3.7/site-packages/ykdl/extractors/douyu/util.py", line 98, in ub98484234
ub98484234 = js_ctx.call('ub98484234', extractor.vid, did, tt)
File "/usr/local/lib/python3.7/site-packages/ykdl/util/jsengine.py", line 369, in call
return self._eval(code)
File "/usr/local/lib/python3.7/site-packages/ykdl/util/jsengine.py", line 527, in _eval
raise ProgramError(result)
ykdl.util.jsengine.ProgramError: SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode

经检查更新Node.js可以解决该问题,原docker镜像的Node.js版本为v4.2.6

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.