自动上传视频到B站和西瓜视频
【自动上传视频到B站和西瓜视频】代码效果演示
Gitee源码
# -*- coding: utf-8 -*-
# Version: Python 3.9.7
# Author: TRIX
# Date: 2021-09-14 21:34:14
# Use:自动生成视频封面 并自动上传视频到B站 和 西瓜视频 由于该程序部分代码只适配于作者的硬件和软件 部分快捷键为作者自定义 在对代码修改前 请勿随意运行该程序 视频配置要求文件 VideoConfig.txt#使用之前 先配置 VideoConfig.txt 且保证网络正常 如果程序出错 鼠标移动到屏幕左上角停止程序运行from pyautogui import *
from PIL import Image,ImageDraw,ImageFont
from time import sleep,time
import pyperclip
import os,fnmatch
import shutil
from send2trash import send2trashdef coverGener(title,fontPath,coverSavePath):
'''标题文本 最多九个汉字 字体 封面生成目录'''
pic=Image.new('RGBA',(1146,717),'#1D1D1F')#以MODE模式 新建一个(weight,height)纯色图片 如果不指定颜色 默认为透明黑色 0 0 0 0 默认分辨率72 图片打印分辨率要求300
drawer=ImageDraw.Draw(pic)#绘制器
fontCode=ImageFont.truetype(font=fontPath,size=100)#ImageFont对象 ttf字体格式
drawer.text((650,64),'源码',fill='#F25228',align='center',font=fontCode)#(x,y)处 写入str fill颜色 align对齐
fontBrief=ImageFont.truetype(font=fontPath,size=74)#ImageFont对象 ttf字体格式
drawer.text((850,85),'在简介',fill='#F25228',align='center',font=fontBrief)#(x,y)处 写入str fill颜色 align对齐
fontTitle=ImageFont.truetype(font=fontPath,size=120)#ImageFont对象 ttf字体格式
titleW,titleH=drawer.textsize(title,font=fontTitle)#返回str的(weight,height)
drawer.text((int((1146-titleW)/2),215),title,fill='#00A3ED',align='center',font=fontTitle)#(x,y)处 写入str fill颜色 align对齐
fontSub=ImageFont.truetype(font=fontPath,size=88)#ImageFont对象 ttf字体格式
drawer.text((128,400),'Python程序效果演示',fill='#F5F5F7',align='center',font=fontSub)#(x,y)处 写入D:\[vidstr fill颜色 align对齐
pic.save(coverSavePath, quality=100,dpi=(300,300))#无色差保存 网络图片不会出现色差问题 只有 拍摄照片 或 PS等软件 处理后的图片会有色差问题 常用模式 RGB RGBA CMYK L黑白模式 高质量 300分辨率 默认分辨率72 图片打印分辨率要求300def uploadToXigua(delay,videoSavePath,title,titleSuffix,coverSavePath,videoBriefTitle,videoBrief,codeSiteTitle,codeSite,mode):
click(1440,140)#点击个人网站
click(1732,244,button='right')#选择西瓜上传视频页面
click(1463,245)#在新页面打开
hotkey('ctrl','pgdn')#切换到上传页面
sleep(2.5+delay)
click(1210,578)#点击上传视频
sleep(1+delay)
hotkey('shift','alt','s')#选择文件快捷键
typewrite(videoSavePath)#选择视频储存文件夹
sleep(0.5+delay)
press('enter')
hotkey('winleft','left')#分屏窗口快捷键
click(570,191)#选择视频
click(760,990)#确认视频
sleep(0.5+delay)#编辑标题
click(767,651)#进入标题编辑区域
pyperclip.copy(title)#复制标题到剪贴板
hotkey('ctrl','v')#粘贴标题
pyperclip.copy(titleSuffix)#复制标题后缀到剪贴板
hotkey('ctrl','v')#粘贴标题后缀#选择封面
click(690,884)#选择视频封面
sleep(0.5+delay)
click(464,230)#选择本地上传
click(950,615)#选择上传本地图片
sleep(1+delay)
hotkey('winleft','left')#分屏窗口快捷键
hotkey('shift','alt','s')#选择文件快捷键
typewrite(coverSavePath)#选择视频封面
sleep(0.5+delay)
press('enter')
sleep(1+delay)
click(1215,567)#切换到封面编辑界面
dragTo(1215,258,duration=0.5)#编辑视频封面
sleep(1+delay)
click(1195,982)#退出编辑区域
sleep(1+delay)
click(1545,834)#完成剪裁
sleep(1+delay)
click(1593,992)#点击确定
sleep(0.5+delay)
click(1060,682)#点击最终确定
sleep(2+delay)
click(1120,855)#退出封面编辑界面#编辑视频为原创
hotkey('ctrl','home')#转到视频上传页面开头
typewrite(['down' for n in range(4)])#向下滚动4格
click(535,778)#点击原创#编辑简介
click(450,939)#点击更多选项
typewrite(['down' for n in range(2)])#向下滚动2格
click(623,868)#进入简介编辑区域
pyperclip.copy(videoBriefTitle)
hotkey('ctrl','v')#粘贴简介标题
pyperclip.copy(videoBrief)
hotkey('ctrl','v')#粘贴简介
press('enter')#分段
pyperclip.copy(codeSiteTitle)
hotkey('ctrl','v')#粘贴源码链接标题
pyperclip.copy(codeSite)
hotkey('ctrl','v')#粘贴源码链接
click(1244,574)#退出标签编辑区域#投稿
hotkey('ctrl','end')#移动到视频编辑页面尾部
if mode=='upload':
click(447,933)#点击发布
elif mode=='test':
click(586,934)#点击存草稿def uploadToBilibil(delay,videoSavePath,coverSavePath,title,labelList,videoBrief,codeSite,mode):
click(1440,140)#点击个人网站
click(1730,350,button='right')#选择B站上传视频页面
click(1440,250)#在新页面打开
hotkey('ctrl','pgdn')#切换到上传页面
sleep(2.5+delay)
click(1120,800)#点击上传视频
sleep(1+delay)
hotkey('shift','alt','s')#选择文件快捷键
typewrite(videoSavePath)#选择视频储存文件夹
sleep(0.5+delay)
press('enter')
hotkey('winleft','left')#分屏窗口快捷键
click(570,191)#选择视频
click(760,990)#确认视频
sleep(0.5+delay)#选择视频模板
click(1600,810)#选择模板界面
click(1430,930)#点击Python模板#选择封面
press('tab')#切换到封面按钮
click(580,955)#点击选择封面
sleep(1+delay)
hotkey('winleft','left')#分屏窗口快捷键
hotkey('shift','alt','s')#选择文件快捷键
typewrite(coverSavePath)#选择视频封面
sleep(0.5+delay)
press('enter')
sleep(1+delay)
click(1280,740)#切换到封面编辑界面
press('down')#向下滚动一格
click(1210,930)#确认封面
sleep(1+delay)#编辑标题
typewrite(['down','down','down','down',])#向下滚动页面4格
click(785,895)#进入标题编辑区域
press('home')#光标移动到标题开头
pyperclip.copy(title)#复制标题到剪贴板
hotkey('ctrl','v')#粘贴标题
click(1100,780)#退出标题编辑区域#编辑标签
typewrite(['down','down','down','down',])#向下滚动页面4格
click(1300,875)#进入标签编辑区域
for label in labelList:#粘贴标签
pyperclip.copy(label)
hotkey('ctrl','v')
press('enter')
sleep(0.5)
click(1275,730)#退出标签编辑区域#编辑粉丝动态
hotkey('ctrl','end')#移动到视频编辑界面结尾
click(900,490)#进入粉丝动态编辑区域
pyperclip.copy(videoBrief)
hotkey('ctrl','v')#粘贴简介
click(1170,760)#退出粉丝动态编辑区域#编辑简介
typewrite(['up' for n in range(18)])#向上滚动页面18格
click(650,459)#进入视频简介编辑
hotkey('ctrl','v')#粘贴简介
hotkey('ctrl','end')#移动到简介编辑区结尾
pyperclip.copy(codeSite)
hotkey('ctrl','v')#粘贴源码链接
click(1234,815)#退出视频简介编辑#投稿
hotkey('ctrl','end')#移动到视频上传页面尾部
if mode=='upload':
click(595,780)#投稿视频
elif mode=='test':
click(795,780)#保存模板def uploadVideo(mode='upload',delay=0):#上传视频所有步骤 mode 上传模式
startTimeStamp=time()-90#程序开始运行的时间#打开 VideoConfig.txt 详细介绍和条件要求 在 VideoConfig.txt
with open('VideoConfig.txt','r',encoding='utf-8')as f:#读取视频所有配置
config = f.readlines()[1:13]
title=config[0].split('=')[1].strip()
videoLabels = config[1].split('=')[1].strip()
labelList=videoLabels.split()
if len(labelList)>4:
raise ValueError('标签最多4个 请重新编辑')
videoBriefTitle = config[2].split('=')[1].strip()
videoBrief = config[3].split('=')[1].strip()
codeSiteTitle=config[4].split('=')[1].strip()
codeSite=config[5].split('://')[1].strip()
if len(codeSite)>131:
raise ValueError('源码链接最多131个字符 请重新编辑')
coverSavePath=config[6].split('=')[1].strip()
fontPath=config[7].split('=')[1].strip()
videoSavePath=config[8].split('=')[1].strip()
titleSuffix=config[9].split('=')[1].strip()
videoUploadedPath=config[10].split('=')[1].strip()
videoFormat=config[11].split('=')[1].strip()#生成视频封面
coverGener(title,fontPath,coverSavePath)#上传视频 缩放比例为90% 分辨率1920x1080 固定坐标 执行操作有延迟 相应点击坐标不能大幅度改变
#打开Edge浏览器
click(160,1060)
sleep(2+delay)#切换输入法
click(1802,1056)#点击输入法
click(1720,885)#切换到美式键盘#上传视频到B站
uploadToBilibil(delay,videoSavePath,coverSavePath,title,labelList,videoBrief,codeSite,mode)#上传视频到西瓜视频
uploadToXigua(delay,videoSavePath,title,titleSuffix,coverSavePath,videoBriefTitle,videoBrief,codeSiteTitle,codeSite,mode)#移动本次上传视频到 videoUploadedPath 文件夹
for file in fnmatch.filter(os.listdir(videoSavePath), '*.'+videoFormat):#在第一级目录匹配唯一的mp4文件
if startTimeStamp>os.path.getctime(videoSavePath+'\\'+file):#所要上传的视频创建的时间戳<程序开始运行时间戳-90s<正在录制的这个视频创建的时间戳
shutil.move(videoSavePath+'\\'+file,videoUploadedPath)#移动本次上传视频到 videoUploadedPath 文件夹#检测 videoUploadedPath 文件夹内video个数 把文件夹内 创建时间最早的文件 移动到回收站
leastTimeStamp=time()#返回现在 unix时间戳
for i,file in enumerate(fnmatch.filter(os.listdir(videoUploadedPath), '*.'+videoFormat)):#对里面的每个mp4文件
fileTimeStamp=os.path.getctime(videoUploadedPath+'\\'+file)#输出文件创建时间 unix时间戳
if fileTimeStamp<=leastTimeStamp:#如果文件创建时间戳比当前最小时间戳还小
leastTimeStamp=fileTimeStamp
for i,file in enumerate(os.listdir(videoUploadedPath)):#对里面的每个mp4文件
if leastTimeStamp==os.path.getctime(videoUploadedPath+'\\'+file):#如果最小时间戳=文件创建时间戳
send2trash(videoUploadedPath+'\\'+file)#把该文件移动到回收站FAILSAFE=True# 如果程序出错 鼠标移动到屏幕左上角 抛出 pyautogui.FailSafeException 异常 并停止程序
#使用之前 先配置 VideoConfig.txt 且确保网络正常 确保浏览器打开的页面不超过1
uploadVideo(mode='upload',delay=0)
#mode:test 测试是否正常执行上传步骤 或 upload 上传视频 默认为upload
#delay:float 程序关键步骤执行延迟秒数 默认延迟0秒
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 使用composer自动加载类文件
- 4月23日海军节,我在青岛等你,一起看强大的中国海军。(如图如视频)
- 视频转换器哪种好用()
- 不懂法,害人终害己
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 腾讯视频(我有一段rap想给你说)
- 百度云极速下载,来体验飞的感觉,还可以看最新动漫的百度云视频哦
- 视频搬运工小赵-10#16.04元
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件