神一样了 发表于 2019-11-16 03:41

【python】python下载视频为什么会卡?

本帖最后由 神一样了 于 2019-11-16 15:47 编辑

无聊写了个爬虫下载小视频
不知道为什么播放起来有点卡,效果不太理想
发出来希望大家认真学习,解决问题

用到协程增加并发,可以一起研究怎么提高下载速度

依赖requests和gevent库
pip直接安装

```
import requests
import re
import os
import gevent
from gevent import monkey,pool
gevent.monkey.patch_all()


url="http://www.91mmd.xyz/play?type=ckplayer&linkId=2281571"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36","connection":"close"}
r=requests.get(url,headers=headers)
m3u8_url=
r=requests.get(m3u8_url,headers=headers)
video_index=re.sub("index.m3u8",r.text.split("\n")[-1],m3u8_url)
r=requests.get(video_index)

ts_list=[]
for index,ts in enumerate(re.findall('(\w*?\.ts)', r.text)):
    ts_list.append((str(index).zfill(5),video_index.replace("index.m3u8", ts)))

a=len(ts_list)
def save_video(ts):
    try:
      global a
      file_name=ts
      root = os.getcwd()
      if not os.path.exists(root+"/"+file_name):
            r = requests.get(url=ts, headers=headers,timeout=10)
            with open(file_name+".ts", "wb")as f:
                f.write(r.content)
      a=a-1
      print("剩余小视频",a)
    except:
      print(file_name+" save faild")
      
def rename(name="爽一下"):
    path=os.getcwd()
    os.system(f"copy /b *.ts new.tmp")
    os.rename("new.tmp", f"{name}.mp4")
    os.system('del /Q *.ts')
    os.system("exit")
   
   
if __name__=="__main__":
    pool = gevent.pool.Pool(30)
    threads = []
    for i in ts_list:
      threads.append(pool.spawn(save_video,i))
    gevent.joinall(threads)
    name=input("重命名:")
    if name:
      rename(name)
    else:
      rename()
```



运行直接IDE或cmd 里python xxx.py

默认名称爽一下

按照建议用ffmpeg来合并视频,果然不卡了,还能快进,开心
改了下合并函数
```
def rename(name="爽一下"):
*[·-·]:基本就是遍历文件夹里的的ts写到list.txt,把list.txt里的ts合并成MP4,然后删除ts 、list.txt
    os.system("(for %a in (*.ts) do @echo file '%a') > list.txt")
    os.system(f"ffmpeg -f concat -safe 0 -i list.txt -c copy {name}.mp4")
    os.system('del /Q *.ts')
    os.system('del /Q list.txt')
    os.system("exit")
```

欢迎大家分享些视频网站来练习

传说中的五号 发表于 2019-11-16 05:21

可能是你的m3u8格式问题,直接合并可能会缺时间信息,
试下ffmpeg合并或者直接用ffmpeg来下载
ffmpeg -i -c copy -bsf:a aac_adtstoasc output.mp4

yinyewangzi 发表于 2019-11-16 07:11

学习学习,谢谢楼主{:1_887:}

WiterLii 发表于 2019-11-16 07:13

谢谢楼主

kk1212 发表于 2019-11-16 08:02

楼主你网址太刺激,打开之后里面太诱惑,。。。

20175101019 发表于 2019-11-16 08:24

为你的网址点赞

孤独的老大哥 发表于 2019-11-16 08:25

我怀疑你在开车

Felixchd 发表于 2019-11-16 08:52

刚好在学python,学习学习玩玩

jiayaoming 发表于 2019-11-16 08:56

。。。你这地址也太皮了

JQ084 发表于 2019-11-16 09:00

学习一下,谢谢楼主
页: [1] 2 3
查看完整版本: 【python】python下载视频为什么会卡?