您的位置:首页 >如何用Python脚本批量上传本地视频到流媒体平台
发布于2026-05-03 阅读(0)
扫一扫,手机访问

开门见山,先说一个核心结论:Python本身并没有提供一种“开箱即用”的能力,让你能直接对接YouTube、Bilibili或Twitch这类主流流媒体平台的上传接口。要实现自动化上传,唯一的路径就是调用各个平台自己那套官方API,并且手动处理好认证、文件分片、状态轮询等一系列逻辑。换句话说,不存在一个通用的万能脚本,只有针对不同平台“量身定制”的具体实现。
想往YouTube传视频?事情没那么简单,它可不接受一个简单的POST文件请求。整个流程必须走标准的OAuth2授权,先拿到那个有时效性的access_token(通常只有3600秒)。对于需要无人值守运行的本地脚本来说,这就意味着你必须把凭证持久化保存,并设置好自动刷新机制,否则脚本跑一半就可能因为令牌过期而中断。
google-auth-oauthlib配合google-api-python-client。注意,别再用那些已经废弃的旧版googleapiclient认证模块了。upload.py脚本在第一次运行时,会弹开浏览器让你完成授权,然后生成一个token.json文件。后续运行虽然可以复用这个文件,但一定要记得捕获可能出现的RefreshError,并准备好重新走一遍授权流程。MediaFileUpload(resumable=True)设置)。这是硬性要求,否则超过5MB的视频文件基本都会直接上传失败。body参数。尤其要注意privacyStatus这个字段,你必须明确地把它设为"public"、"private"或"unlisted"中的一个,平台没有默认值给你。B站的情况又有所不同。它没有提供官方文档化的上传API,所以目前主流的做法是模拟其网页端的行为。整个过程可以拆解为三步:先用账号密码或Cookie登录,获取关键的bili_jct和SESSDATA;然后调用/x/vup/upload系列接口进行文件分片上传;最后,必须再调用/x/vup/upload/submit来提交稿件,整个流程才算完成。
requests.post(..., files={...})。必须严格按照B站的要求,构造包含chunk、chunks、md5等特定字段的multipart表单数据。X-Bili-Upload-Data字段,其值是经过Base64编码的JSON元数据。漏掉它,等待你的很可能就是一个412 Precondition Failed错误。upload_id以及视频的title、desc、tag等信息传过去,否则视频只会躺在后台,不会出现在你的稿件列表里。User-Agent,并将Referer设置为https://member.bilibili.com/,不然412或403状态码随时可能找上门。上传大文件时,脚本动不动就卡住,提示连接重置或超时?这背后的根本原因,其实是平台自身的限制。例如,YouTube默认的单次上传超时大约是15分钟,而B站的分片上传超时则在5分钟左右。Python的requests库默认不设置超时(timeout=None),看起来“安全”,实则可能导致进程无限期挂起。
这里有个小提示:可以搜索“Python免费学习笔记(深入)”来系统学习相关知识。
requests请求设置timeout=(30, 300)(连接超时30秒,读取超时5分钟)。并且在捕获到Timeout或ConnectionError异常后,应该重试当前失败的分片,而不是傻傻地重新上传整个文件。location URL继续PUT数据,无需重复已成功的部分。B站同理,某个分片失败,只需重传那个特定的chunk,复用之前的upload_id即可。open(file, "rb").read()这种方式把整个视频文件一次性读进内存。一个1GB的文件就足以吃光大量内存。正确的做法是使用open(file, "rb")获取文件对象,让requests库以流式方式发送数据。说到底,真正的难点往往不在于那几行核心的上传代码怎么写,而在于每个平台那些琐碎却又至关重要的“边界条件”:比如YouTube每次上传操作会消耗1600单位的配额(quota),B站新账号首日可能有上传条数限制,Twitch的video ingest endpoint是动态分配的……这些细节如果不仔细查阅平台文档、不认真分析实际的响应头和错误码,那么你的脚本很可能跑十次,就得崩八次。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9