吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2597|回复: 27
收起左侧

[已解决] 【python】python下载视频为什么会卡?

[复制链接]
神一样了 发表于 2019-11-16 03:41
本帖最后由 神一样了 于 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=[i for i in re.findall("http.*?index\.m3u8", r.text) if "hls" not in i][0]
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[0]
        root = os.getcwd()
        if not os.path.exists(root+"/"+file_name):
            r = requests.get(url=ts[1], 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()



捕获.PNG
运行直接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")


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

免费评分

参与人数 8吾爱币 +7 热心值 +5 收起 理由
gaoxiaoao + 1 楼主,我就是想安心学习python,为什么这样。。。。为什么
对影三人 + 1 + 1 用心讨论,共获提升!
Godbo + 1 + 1 我很赞同!
cutthesoul + 1 滴!学生卡
52PJmumu + 1 + 1 一大早搞颜色,真刺激
Ps出来的小赵 + 1 滴!基友卡
xouou + 1 滴, 公交卡
Felixchd + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

传说中的五号 发表于 2019-11-16 05:21
可能是你的m3u8格式问题,直接合并可能会缺时间信息,
试下ffmpeg合并或者直接用ffmpeg来下载
ffmpeg -i [m3u8地址] -c copy -bsf:a aac_adtstoasc output.mp4
yinyewangzi 发表于 2019-11-16 07:11
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
学习一下,谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-29 15:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表