|
@@ -1,23 +1,24 @@
|
|
# !/usr/bin/python
|
|
# !/usr/bin/python
|
|
# -*- coding:utf-8 -*-
|
|
# -*- coding:utf-8 -*-
|
|
-# time: 2019/04/17--08:12
|
|
|
|
|
|
+# time: 2019/07/02--08:12
|
|
__author__ = 'Henry'
|
|
__author__ = 'Henry'
|
|
|
|
|
|
|
|
|
|
'''
|
|
'''
|
|
-项目: B站视频下载
|
|
|
|
|
|
+项目: B站视频下载 - 多线程下载
|
|
|
|
|
|
版本1: 加密API版,不需要加入cookie,直接即可下载1080p视频
|
|
版本1: 加密API版,不需要加入cookie,直接即可下载1080p视频
|
|
|
|
|
|
20190422 - 增加多P视频单独下载其中一集的功能
|
|
20190422 - 增加多P视频单独下载其中一集的功能
|
|
|
|
+20190702 - 增加视频多线程下载 速度大幅提升
|
|
'''
|
|
'''
|
|
-import imageio
|
|
|
|
-imageio.plugins.ffmpeg.download()
|
|
|
|
|
|
|
|
import requests, time, hashlib, urllib.request, re, json
|
|
import requests, time, hashlib, urllib.request, re, json
|
|
from moviepy.editor import *
|
|
from moviepy.editor import *
|
|
-import os, sys
|
|
|
|
|
|
+import os, sys, threading
|
|
|
|
|
|
|
|
+import imageio
|
|
|
|
+imageio.plugins.ffmpeg.download()
|
|
|
|
|
|
# 访问API地址
|
|
# 访问API地址
|
|
def get_play_list(start_url, cid, quality):
|
|
def get_play_list(start_url, cid, quality):
|
|
@@ -165,6 +166,7 @@ def combine_video(video_list, title):
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
|
|
+ start_time = time.time()
|
|
# 用户输入av号或者视频链接地址
|
|
# 用户输入av号或者视频链接地址
|
|
print('*' * 30 + 'B站视频下载小助手' + '*' * 30)
|
|
print('*' * 30 + 'B站视频下载小助手' + '*' * 30)
|
|
start = input('请输入您要下载的B站av号或者视频链接地址:')
|
|
start = input('请输入您要下载的B站av号或者视频链接地址:')
|
|
@@ -196,6 +198,8 @@ if __name__ == '__main__':
|
|
# 如果p不存在就是全集下载
|
|
# 如果p不存在就是全集下载
|
|
cid_list = data['pages']
|
|
cid_list = data['pages']
|
|
# print(cid_list)
|
|
# print(cid_list)
|
|
|
|
+ # 创建线程池
|
|
|
|
+ threadpool = []
|
|
for item in cid_list:
|
|
for item in cid_list:
|
|
cid = str(item['cid'])
|
|
cid = str(item['cid'])
|
|
title = item['part']
|
|
title = item['part']
|
|
@@ -208,9 +212,22 @@ if __name__ == '__main__':
|
|
start_url = start_url + "/?p=" + page
|
|
start_url = start_url + "/?p=" + page
|
|
video_list = get_play_list(start_url, cid, quality)
|
|
video_list = get_play_list(start_url, cid, quality)
|
|
start_time = time.time()
|
|
start_time = time.time()
|
|
- down_video(video_list, title, start_url, page)
|
|
|
|
|
|
+ # down_video(video_list, title, start_url, page)
|
|
|
|
+ # 定义线程
|
|
|
|
+ th = threading.Thread(target=down_video, args=(video_list, title, start_url, page))
|
|
|
|
+ # 将线程加入线程池
|
|
|
|
+ threadpool.append(th)
|
|
combine_video(video_list, title)
|
|
combine_video(video_list, title)
|
|
|
|
|
|
|
|
+ # 开始线程
|
|
|
|
+ for th in threadpool:
|
|
|
|
+ th.start()
|
|
|
|
+ # 等待所有线程运行完毕
|
|
|
|
+ for th in threadpool:
|
|
|
|
+ th.join()
|
|
|
|
+
|
|
|
|
+ end_time = time.time() # 结束时间
|
|
|
|
+ print('下载总耗时%.2f秒,约%.2f分钟' % (end_time - start_time, int(end_time - start_time) / 60))
|
|
# 如果是windows系统,下载完成后打开下载目录
|
|
# 如果是windows系统,下载完成后打开下载目录
|
|
currentVideoPath = os.path.join(sys.path[0], 'bilibili_video') # 当前目录作为下载目录
|
|
currentVideoPath = os.path.join(sys.path[0], 'bilibili_video') # 当前目录作为下载目录
|
|
if (sys.platform.startswith('win')):
|
|
if (sys.platform.startswith('win')):
|
|
@@ -218,3 +235,4 @@ if __name__ == '__main__':
|
|
|
|
|
|
|
|
|
|
# 分P视频下载测试: https://www.bilibili.com/video/av19516333/
|
|
# 分P视频下载测试: https://www.bilibili.com/video/av19516333/
|
|
|
|
+# 下载总耗时14.21秒,约0.23分钟
|