Browse Source

代码 优化

liuyuqi-dellpc 5 years ago
parent
commit
486ecb662e

+ 0 - 1
video_download/Dockerfile

@@ -1,7 +1,6 @@
 FROM python:3.6
 
 LABEL Name=bilibili_video_download Version=1.0.1
-EXPOSE 3000
 WORKDIR /app
 
 RUN mkdir -p ~/.pip

+ 17 - 50
video_download/README.md

@@ -1,61 +1,28 @@
 Bilibili(b站)视频下载 ![enter image description here](Pic/logo.png)
 ===========================
-![](https://img.shields.io/badge/Python-3.6.3-green.svg) ![](https://img.shields.io/badge/requests-2.18.4-green.svg) ![](https://img.shields.io/badge/moviepy-0.2.3.2-green.svg)
-### Bilibili官网 - https://www.bilibili.com/
-|Author|:sunglasses:Henryhaohao:sunglasses:|
-|---|---
-|Email|:hearts:1073064953@qq.com:hearts:
 
-    
-****
-## :dolphin:声明
-### 软件均仅用于学习交流,请勿用于任何商业用途!感谢大家!
 ## :dolphin:介绍
 ### 该项目为[Bilibili(b站)](https://www.bilibili.com/)视频下载(支持分P多段视频的下载!)
-- **对于单P视频:直接传入B站av号或者视频链接地址(eg: 49842011或者https://www.bilibili.com/video/av49842011)**
-- **对于多P视频:**
-  > **1.下载全集:直接传入B站av号或者视频链接地址(eg: 49842011或者https://www.bilibili.com/video/av49842011)**<br>
-  > **2.下载其中一集:传入那一集的视频链接地址(eg: https://www.bilibili.com/video/av19516333/?p=2)**
-## :dolphin:爬虫版本
-- **版本一: bilibili_video_download_v1.py**
-  > **加密API版,不需要加入cookie,直接即可下载1080p视频<br>**
-- **版本二: bilibili_video_download_v2.py**
-  > **1.无加密API版,但是需要加入登录后cookie中的SESSDATA字段,才可下载720p及以上视频**<br>
-  > **2.如果想下载1080p+视频,需要带入B站大会员的cookie中的SESSDATA才行,普通用户的SESSDATA最多只能下载1080p视频;请定期更换代码31行cookie中的SESSDATA值。跟换方法为:浏览器登录B站,在开发者模式(按F12) --> application --> cookie中找到SESSDATA值替换即可,一个月的有效期**
-- **版本三: bilibili_video_download_v3.py**
-  > **即版本二的升级版,为Threading多线程下载版本,下载速度大幅提升!**<br>  
-## :dolphin:运行环境
-Version: Python3
-## :dolphin:安装依赖库
-```
-pip3 install -r requirements.txt
-
-```
-## :dolphin:运行截图
-> - **运行下载**<br><br>
-![enter image description here](Pic/run.png)
-> - **下载完成**<br><br>
-![enter image description here](Pic/video.png)
-## :dolphin:**总结**
-> **最后,如果你觉得这个项目不错或者对你有帮助,给个Star呗,也算是对我学习路上的一种鼓励!<br>
- 哈哈哈,感谢大家!笔芯哟~**:cupid::cupid:
+- 对于单P视频:直接传入B站av号或者视频链接地址(eg: 49842011或者https://www.bilibili.com/video/av49842011)
+- 对于多P视频:
+  > 1.下载全集:直接传入B站av号或者视频链接地址(eg: 49842011或者https://www.bilibili.com/video/av49842011)<br>
+  > 2.下载其中一集:传入那一集的视频链接地址(eg: https://www.bilibili.com/video/av19516333/?p=2)
 
+## :dolphin:爬虫版本
+- 版本三: bilibili_video_download_v3.py
+  > 加密API版,不需要加入cookie,直接即可下载1080p视频<br>
+- 版本二: bilibili_video_download_v2.py
+  > 1.无加密API版,但是需要加入登录后cookie中的SESSDATA字段,才可下载720p及以上视频**<br>
+  > 2.如果想下载1080p+视频,需要带入B站大会员的cookie中的SESSDATA才行,普通用户的SESSDATA最多只能下载1080p视频;请定期更换代码31行cookie中的SESSDATA值。跟换方法为:浏览器登录B站,在开发者模式(按F12) --> application --> cookie中找到SESSDATA值替换即可,一个月的有效期
 
 ## docker运行
 
 windows中安装docker
 
-git clone https://xxx 本项目
-
-wget https://github.com/imageio/imageio-binaries/raw/master/ffmpeg/ffmpeg.linux64
-
-wget http://cdn.yoqi.me/direct/2019-07-09/ffmpeg.linux64
-
-docker build -t bilibili_video_download:latest .
-
-docker-compose up -d
-
-docker exec -it a93ac1 /bin/sh -c "[ -e /bin/bash ] && /bin/bash || /bin/sh"
-
-python3 bilibili_video_download_v1.py
-
+    git clone https://xxx 本项目
+    wget https://github.com/imageio/imageio-binaries/raw/master/ffmpeg/ffmpeg.linux64
+    wget http://cdn.yoqi.me/direct/2019-07-09/ffmpeg.linux64
+    docker build -t bilibili_video_download:latest .
+    docker-compose up -d
+    docker exec -it a93ac1 /bin/sh -c "[ -e /bin/bash ] && /bin/bash || /bin/sh"
+    python3 bilibili_video_download_v1.py

+ 24 - 6
video_download/bilibili_video_download_v1.py → video_download/bilibili_video_download_v3 copy.py

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

+ 12 - 10
video_download/bilibili_video_download_v3.py

@@ -1,16 +1,15 @@
-# !/usr/bin/python
-# -*- coding:utf-8 -*-
-# time: 2019/07/02--08:12
-__author__ = 'Henry'
-
-
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
 '''
-项目: B站视频下载 - 多线程下载
+@File    :   t.py
+@Time    :   2019/07/18 04:54:35
+@Author  :   Liuyuqi 
+@Version :   1.0
+@Contact :   liuyuqi.gov@msn.cn
+@License :   (C)Copyright 2019
+@Desc    :   项目: B站视频下载 - 多线程下载
 
 版本1: 加密API版,不需要加入cookie,直接即可下载1080p视频
-
-20190422 - 增加多P视频单独下载其中一集的功能
-20190702 - 增加视频多线程下载 速度大幅提升
 '''
 
 import requests, time, hashlib, urllib.request, re, json
@@ -188,6 +187,7 @@ if __name__ == '__main__':
     }
     html = requests.get(start_url, headers=headers).json()
     data = html['data']
+    video_title=data["title"].replace(" ","_")
     cid_list = []
     if '?p=' in start:
         # 单独下载分P视频中的一集
@@ -202,6 +202,8 @@ if __name__ == '__main__':
     for item in cid_list:
         cid = str(item['cid'])
         title = item['part']
+        if not title:
+            title = video_title
         title = re.sub(r'[\/\\:*?"<>|]', '', title)  # 替换为空的
         print('[下载视频的cid]:' + cid)
         print('[下载视频的标题]:' + title)

+ 1 - 3
video_download/docker-compose.yml

@@ -2,9 +2,7 @@ version: '2.1'
 
 services:
   bilibili_video_download:
-    image: bilibili_video_download
+    image: video_download
     build: .
-    ports:
-      - 3000:3000
     volumes:
       - "./:/app"