目前是输入一个视频网址,解析后可以下载封面和视频
批量下载只支持分P视频
希望增加批量下载不同视频的功能
具体来说就是一次性输入大量的视频网址或者BV号,它们每个各占一行
类似这种效果
然后选择下载内容(比如1080p、480p、mp3、封面等)
唧唧的文件命名很棒,保留了bv号和分p序号,如果可以支持自定义命名就更棒了
(up主昵称、up主UID、视频bv号、分P序号、视频标题等)
目前是输入一个视频网址,解析后可以下载封面和视频
批量下载只支持分P视频
具体来说就是一次性输入大量的视频网址或者BV号,它们每个各占一行
类似这种效果
然后选择下载内容(比如1080p、480p、mp3、封面等)
唧唧的文件命名很棒,保留了bv号和分p序号,如果可以支持自定义命名就更棒了
(up主昵称、up主UID、视频bv号、分P序号、视频标题等)
2.0 目前可以用 py 脚本批量创建任务
import os
import time
import requests
totalVideosInfos = {}
# BV2AV
def dec(x):
if "BV" not in x:
return int(x[2:])
table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
tr = {}
for i in range(len(table)):
tr[table[i]] = i
s = [11, 10, 3, 8, 4, 6]
xor = 177451812
add = 8728348608
r = 0
for i in range(6):
r += tr[x[s[i]]] * 58**i
return (r - add) ^ xor
def getVideInfo(avid):
url = "http://127.0.0.1:64000/bili/1/{}/get_video_info".format(avid)
try:
r = requests.get(url=url).json()
r = r['data']
if len(r) > 5 and "data" in r:
r = r.get("data", {})
result = [(i.get("video_filename",
"").strip(), i.get("page_cid",
""), i.get("page_av", ""))
for i in r.get("list")]
return result
except:
print("getVideInfoErr")
return []
def postTask(taskList, downloadDir):
for _, task in enumerate(taskList):
print("\r{0} / {1}".format(_ + 1, len(taskList)), end="")
if type(task) == str:
avid = dec(task.split("?")[0].split("/")[-1])
videos_infos = getVideInfo(avid)
else:
videos_infos = task
for video_info in videos_infos:
totalVideosInfos[video_info[0]] = video_info
if (video_info[0] + ".mp4") in os.listdir(downloadDir):
continue
try:
r = requests.post(
url="http://127.0.0.1:64000/task/post_new_task",
headers={'Content-Type': 'application/json'},
json={
"avid": video_info[2],
"cid": video_info[1],
"quality": 1000,
"useav": True,
"useflv": False,
"videocodecs": 1,
"videofilename": video_info[0]
})
except:
pass
l = len(os.listdir(downloadDir))
s = time.time()
while l == len(os.listdir(downloadDir)) and time.time() - s <= 300:
time.sleep(1)
downloadDir = input("键入下载文件夹路径:\n")
links = []
firstTime = True
while 1:
link = input("link(结束直接回车):\n" if firstTime else "").replace(" ", "")
firstTime = False
if not link:
break
else:
links.append(link)
postTask(links, downloadDir)
# downloadDir = input("\r下载中...\n-->须待下载完毕<-- 后键入下载文件夹路径:\n")
# if not os.path.exists(downloadDir):
# exit(0)
# files = [f.replace(".mp4", "") for f in os.listdir(downloadDir)]
# tryAgainVideosInfos = []
# for f in totalVideosInfos:
# if f not in files:
# tryAgainVideosInfos.append(totalVideosInfos[f])
# postTask(tryAgainVideosInfos, downloadDir)
# print("\r" + ("\n".join(tryAgainVideosInfos)))
# if len(tryAgainVideosInfos):
# print("上面{0}个文件下载失败正在重试一遍".format(len(tryAgainVideosInfos)))
print("\nEnjoy it !\n回车关闭...")
input("")