python 批量下载m3u8的视频

这篇具有很好参考价值的文章主要介绍了python 批量下载m3u8的视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:点击跳转

目录

一,猫抓获取视频地址

二,安装配置ffmpeg

1,windows使用

2,python使用

三,碧站视频

四,合并ts文件

1,背景

2,实现

4,缺点

五,下载m3u8视频

1,背景

2,实现V1

3,实现V2

六,分析m3u8链接


一,猫抓获取视频地址

链接:https://pan.baidu.com/s/1eEtZKdNQvB8C_Y_7yNx1hw 
提取码:rff3

这里可以下载maozhua.rar,解压之后添加到google或者edge浏览器,就能看到浏览器有一个猫猫:

python 批量下载m3u8的视频,音视频

对于m3u8的视频、m4s的视频,猫抓可以获取视频地址。

二,安装配置ffmpeg

1,windows使用

官网下载ffmpeg-2023-08-07-git-d295b6b693-full_build

放到一个没有空格的路径中:

python 批量下载m3u8的视频,音视频

 再把bin目录配置到环境变量。

2,python使用

官网下载ffmpeg

下载之后复制到site-packages中:

python 批量下载m3u8的视频,音视频

三,碧站视频

碧站都是m4s的视频,但是画面和音频是分开成2个m4s的。

用猫抓获取资源链接:

python 批量下载m3u8的视频,音视频

视频比较大,音频比较小,还有个中间大小的不用管。

把视频下下来,重命名为1.m4s,音频下下来,重命名为2.m4s,然后用dos访问文件所在目录:

cd Downloads

再执行一行命令:

ffmpeg -loglevel quiet -i 1.m4s -i 2.m4s -c copy -y out.mp4 & del 1.m4s 2.m4s

四,合并ts文件

1,背景

当你从网站下载了一集动漫,然后发现是一堆ts文件,虽然可以打开,但是每个都是10秒左右,很不方便。

这时,可以用python合并ts文件。

2,实现

代码:

def merge_file(path, save_path):
    file_names = os.listdir(path)
    if 'file_list.txt' in file_names:
        os.remove(path+'file_list.txt')
    f = open(path+'file_list.txt', 'w+')
    for one in file_names:
        f.write("file '" + one + "'\n")
    f.close()
    ffmpeg_bin_dic = 'C:/ffmpeg-2023-08-07-git-d295b6b693-full_build/bin/'
    os.system(ffmpeg_bin_dic+'ffmpeg -f concat -safe 0 -i '+path+'file_list.txt'+' -c '+ ' copy ' +save_path)

注意,需要看一下file_list.txt中的各个ts顺序,和预期是否一致。

如果不一致,调整原有ts的命名,或者调整代码,直到file_list.txt中的各个ts顺序,和预期一致,才能得到正确的mp4文件。

4,缺点

貌似合并出来的视频经常有问题。。。

五,下载m3u8视频

1,背景

当你用猫抓一个m3u8视频的地址,那就可以解析m3u8,获取其中的ts列表,多线程下载所有ts文件。

全部下完之后,用ffmpeg合并成mp4

2,实现V1

Downloader把ts列表做循环拆分,近似均分给每个线程,同时下载1个m3u8视频。

download_m3u8_video输入m3u8视频的地址,解析ts列表,调用Downloader并控制多线程。

import requests
import os
import threading

tnum = 64

class Downloader(threading.Thread):
    def __init__(self, id, url, ts_list, file_path):
        threading.Thread.__init__(self)
        self.id = id
        self.url = url
        self.ts_list = ts_list
        self.file_path = file_path

    def run(self):
        for i in range(self.id, len(self.ts_list), tnum):
            ts_url = self.ts_list[i]
            r = requests.get(ts_url, stream=True)
            if r.status_code == 200:
                with open(self.file_path + f'_{i}.ts', 'wb') as f:
                    for chunk in r.iter_content(chunk_size=1024):
                        if chunk:
                            f.write(chunk)


def download_m3u8_video(url, file_path):
    r = requests.get(url)
    if r.status_code != 200:
        print('m3u8视频下载链接无效')
        return False

    m3u8_list = r.text.split('\n')
    m3u8_list = [i for i in m3u8_list if i and i[0] != '#']

    ts_list = []
    for ts_url in m3u8_list:
        ts_url = url.rsplit('/', 1)[0] + '/' + ts_url
        ts_list.append(ts_url)

    f = open(file_path+'file_list.txt', 'w+')
    for i in range(len(ts_list)):
        f.write('file \'' + f'_{i}.ts' + "'\n")
    f.close()

    threads = []
    for i in range(0, tnum):
        thread = Downloader(i, url, ts_list, file_path.rsplit('.', 1)[0])
        thread.start()
        threads.append(thread)

    for thread in threads:
        thread.join()

    return not endflag

def merge_file(path, save_path):
    ffmpeg_bin_dic = 'C:/ffmpeg-2023-08-07-git-d295b6b693-full_build/bin/'
    os.system(ffmpeg_bin_dic+'ffmpeg -f concat -safe 0 -i '+path+'file_list.txt'+' -c '+ ' copy ' +save_path)


def down(url):
    name = url[-41:-5]
    print(name)
    ts_file_path = 'D:/v/' + name+'/'
    os.makedirs(ts_file_path)
    mp4_file_path = 'D:/v2/'+name+'.mp4'
    global endflag
    endflag = False
    if download_m3u8_video(url, ts_file_path):
        print('m3u8视频下载完成')
        merge_file(ts_file_path, mp4_file_path)
    else :
        print('error!!!!')
        print(url)

url_list = [
    'https://sth.com/videos/202305091/d63b006e-c6fb-4997-8d43-7ebd086e9c75.m3u8',
    'https://sth.com/videos/202305081/2c9fa41b-e25b-4371-908f-d246628d7bed.m3u8',
]

for url in url_list:
    down(url)

3,实现V2

import requests
import os
import threading

tnum = 64

def download_m3u8_video(url, file_path):
    r = requests.get(url)
    if r.status_code != 200:
        return False

    m3u8_list = r.text.split('\n')
    m3u8_list = [i for i in m3u8_list if i and i[0] != '#']

    ts_list = []
    for ts_url in m3u8_list:
        ts_url = url.rsplit('/', 1)[0] + '/' + ts_url
        ts_list.append(ts_url)

    f = open(file_path + 'file_list.txt', 'w+')
    for i in range(len(ts_list)):
        f.write('file \'' + f'_{i}.ts' + "'\n")
    f.close()

    for i in range(0, len(ts_list)):
        ts_url = ts_list[i]
        r = requests.get(ts_url, stream=True)
        if r.status_code == 200:
            with open(file_path + f'_{i}.ts', 'wb') as f:
                for chunk in r.iter_content(chunk_size=1024):
                    if chunk:
                        f.write(chunk)
    return True


def merge_file(path, save_path):
    ffmpeg_bin_dic = 'C:/ffmpeg-2023-08-07-git-d295b6b693-full_build/bin/'
    os.system(ffmpeg_bin_dic+'ffmpeg -f concat -safe 0 -i '+path+'file_list.txt'+' -c '+ ' copy ' +save_path)


def down(url):
    name = url[-41:-5]
    print(name)
    ts_file_path = 'D:/v/' + name+'/'
    os.makedirs(ts_file_path)
    mp4_file_path = 'D:/v2/'+name+'.mp4'
    ret = download_m3u8_video(url, ts_file_path)
    print(name, end=' ')
    if ret:
        print('m3u8视频下载完成')
        merge_file(ts_file_path, mp4_file_path)
    else :
        print('error!!!!')


class down_list(threading.Thread):
    def __init__(self, url_list, id):
        threading.Thread.__init__(self)
        self.id = id
        self.url_list = url_list
    def run(self):
        for i in range(self.id, len(self.url_list), tnum):
            url = self.url_list[i]
            down(url)

def down_all(url_list):
    threads=[]
    for i in range(0, tnum):
        thread = down_list(url_list,i)
        thread.start()
        threads.append(thread)

    for thread in threads:
        thread.join()


url_list = [

]


down_all(url_list)

六,分析m3u8链接

有些网站的会员和非会员在同一个网址播放的视频是不一样的,比如非会员只有2分钟可以看。

可以用个简单的代码分析m3u8链接里面的视频是长视频还是短视频。文章来源地址https://www.toymoban.com/news/detail-637423.html

def testUrl(url):
    print(url)
    print('ans:')
    r = requests.get(url)
    m3u8_list = r.text.split('\n')
    m3u8_list = [i for i in m3u8_list if i and i[0] != '#']
    if len(m3u8_list) < 50:
        file = open('D:\\out.txt', 'a')
        file.write(url+"\n")
        file.close()
    else:
        print(url+" ok")

到了这里,关于python 批量下载m3u8的视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 生成m3u8视频:批量剪辑与分割的完美结合

    在视频处理领域,m3u8视频格式的出现为高效处理和优化视频内容提供了新的可能。尤其在批量剪辑和分割视频的过程中,掌握m3u8视频的生成技巧,意味着更高效的工作流程和更出色的创作效果。现在一起来看看云炫AI智剪如何生成m3u8视频的操作吧。 步骤1、先执行云炫AI智剪

    2024年02月05日
    浏览(40)
  • DPlayer m3u8 视频禁止下载

    正常的 m3u8 格式视频通过控制台是无法下载的,但是可以通过插件下载,下面介绍如何规避这个问题。 思路: 后端生成一个一次性的密钥,前端放在请求头中 ,可以防止大部分插件下载。这里只说前端。 集成 DPlayer 播放器这里就不说了,网上一大推。

    2024年01月24日
    浏览(32)
  • ffmpeg 下载网上m3u8的视频文件

    FFmpeg 是一个音视频领域使用最广泛的跨平台开源库。由C语言编写,但广泛的为 C/C++、C#、Java、Python 等主流编程语言所调用。它集合了几乎所有的编码解码库与流协议,几乎能完美处理音视频开发领域的所有需求。 方式一:源码安装 FFmpeg 通过编译源码安装 FFmpeg 的优点是可

    2023年04月09日
    浏览(31)
  • 视频防盗链下载,ffmpeg转m3u8,ts实现视频切片

    最近公司有个需求,要求付费的大视频防止下载,不卡顿功能。 优先使用的是阿里的视频点播,自己琢磨没事干,网上很多电影视频网站是如何做到的呢,然后就是各种搜,得到了一下结果 这个video标签的src地址是下载不了的,这下和电影网站的一样了

    2023年04月26日
    浏览(31)
  • 如何将页面m3u8、blob类型的视频链接下载下来?

    有时候访问页面遇到喜欢的视频,会直接使用代码检查,找到视频链接直接拷贝下载,但是遇到video标签中的链接带有blob(如图),直接拷贝访问是无法下载的。我们需要按以下步骤来实现目的: 1.F12开启代码检查,点击代码区,CTR+F调出搜索框,输入video,找到video标

    2024年02月11日
    浏览(27)
  • 【M3U8】python(流视频数据)

    现在大部分视频客户端都采用HTTP Live Streaming,而不是直接播放MP4等视频文件(HLS,Apple为了提高流播效率开发的技术)。HLS技术的特点是将流媒体切分为若干【TS片段】(比如几秒一段),然后通过一个【M3U8列表文件】将这些TS片段批量下载供客户端播放器实现实时流式播放

    2023年04月09日
    浏览(22)
  • M3U8在线视频下载(解决DMM等网站下载的视频是dcv格式)

    1.Edge(或chrome浏览器) 2.N_m3u8DL-CLI 1.首先需要你购买的正版视频文件支持视频播放,然后在准备播放界面按F12调出控制台选择网络,之后再点击播放,这时候会弹出新的窗口用于播放,在新的窗口再次按F12调出控制台,这时候会单独打开一个控制台窗口。 2.搜索m3u8找到一个chu

    2024年02月03日
    浏览(91)
  • 安卓 Windows 通过ts链接获取m3u8视频地址进行视频下载

    目录 环境: 解决思路及过程: .TS—— .m3u8 1.利用安卓视频缓存机制合成视频 1.1 找到鲨鱼浏览器目录 1.2 进入Android/data/com.zhijianzhuoyue.sharkbrowser/cashe 缓存目录  1.3 显示隐藏文件 1.4 进入可以看到两个随机生成的视频文件夹,进入一个即是对应视频播放缓存目录 1.4 再次进入得

    2024年02月11日
    浏览(43)
  • Python爬取m3u8格式的视频

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 在某一天,群友分享了一些小视频,手机端可以正常观看,但是到了电脑上,输入网址之后会下载下来一个m3u8格式的文件,这就让我犯了难。所以我就研究了一下,并使用Python来

    2023年04月13日
    浏览(47)
  • 如何使用JAVA实现多线程下载m3u8视频并且合并代码亲测有效

    我们常常在网页上遇到好看的视频就想保存起来,可是有的视频文件是m3u8格式的,有的小伙伴可能就难住了,那么这种视频文件应该下载呢,可能有人会用插件或者其他工具下载,方法也是多种多样的,其实这种文件就是很多视频切片成的文件路径,不能够直接获取到视频流

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包