广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python下载ts文件视频且合并
  • 885
分享到

Python下载ts文件视频且合并

Python下载ts文件视频Python下载ts文件 2023-01-10 12:01:03 885人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一、ts文件的由来 ts文件,ts即"Transport Stream"的缩写,特点就是要求从视频流的任一片段开始都是可以独立解码的,非常适合网络视频播放。 打开

一、ts文件的由来

ts文件,ts即"Transport Stream"的缩写,特点就是要求从视频流的任一片段开始都是可以独立解码的,非常适合网络视频播放。

打开网址:https://www.kan35.com/play/210314-3-1.html,要怎么才能把这个视频下载到电脑上呢?

按F12发现,这些视频被切割成无数个细小的片断,如图:

上图中,用红框圈出来的部分很重要,.ts的文件就是被切割的视频文件。但是这些视频文件名字全是乱的,没有规律。它们的顺序是通过index.m3u8实现的,上图中有两个index.m3u8文件,一般是尺寸更大的那个才是存放视频播放顺序的文件。可以在浏览器中打开看下:

 可以看出,这个文件里面确实保存了ts文件播放顺序,当然一些其它的网站提供的index.m3u8文件格式会有些不一样,这些都可以后期处理。

二、下载ts文件

1.下载index.m3u8,并做相应处理

这个index.m3u8很重要,直接右键“Open in new tab”就可以下载下来,但是该怎么处理呢?

首先,了解下什么是m3u8:

        m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8。

        m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。使用m3u8格式文件主要因为可以实现多码率视频的适配,视频网站可以根据用户的网络带宽情况,自动为客户端匹配一个合适的码率文件进行播放,从而保证视频的流畅度。

其次,怎么解析这个文件?

最简单的方式是复制里面的内容,然后在excel中筛选包含“Https”的字符串

当然,我们可以用更专业的方法,在python中用“pip install m3u8”安装这个模块,然后就可以用代码解析了。

import m3u8data = m3u8.load("index0.m3u8").datadata

显示内容大概如下:

{'media_sequence': 0, 'is_variant': False, 'is_endlist': True, 'is_i_frames_only': False, 'is_independent_segments': False, 'playlist_type': 'vod', 'playlists': [], 'segments': [{'duration': 2.667,   'title': '',   'uri':        'https://hey06.cjkypo.com/20211214/lIC8S3qZ1/1000kb/hls/MQJ9iKoM.ts',   'cue_in': False,   'cue_out': False,   'cue_out_start': False,   'scte35': None,   'oatcls_scte35': None,   'scte35_duration': None,   'scte35_elapsedtime': None,   'asset_metadata': None,   'discontinuity': False,   'dateranges': None,   'gap_tag': None},  {'duration': 1.667,   'title': '',   'uri': 'https://hey06.cjkypo.com/20211214/lIC83SqZ1/1000kb/hls/8LeDe7Wu.ts',   'cue_in': False,   'cue_out': False,   'cue_out_start': False,   'scte35': None,   'oatcls_scte35': None,   'scte35_duration': None,   'scte35_elapsedtime': None,   'asset_metadata': None,   'discontinuity': False,   'dateranges': None,   'gap_tag': None},

........................

可以看出,显示的内容很多,但是实际上只有“https://”那个字符串有用。

我们现在要做的是先提取每一个带“https”的字符串,然后还要提取出每个https字符串中的ts文件名。代码如下:

order_ts = []#将所有的带https的url存入order_tsfor i in data["segments"]:    order_ts.append(i["uri"])#返回一个dict,将文件名作为key,将url作为valuedef read_name_url():    name_url = {}    for url in order_ts:        name = url.split("/")[-1]        name_url[name] = url    return name_url

这个dict内容大概如下:

按理说,这个结果已经非常好了,但是我们还要进一步处理下,为我们最后一步的合并ts文件作准备。

list_name= read_name_url().keys()file = open("order.m3u8", 'w')for name in list_name:    file.write("file 'D:\\ProgramData\\study\\mov\\tsfiles\\" + name + "'")    file.write("\n")

这个order.m3u8文件的内容大概如下:

file 'D:\ProgramData\study\mov\tsfiles\MQJ9iKoM.ts'
file 'D:\ProgramData\study\mov\tsfiles\8LeDe7Wu.ts'
file 'D:\ProgramData\study\mov\tsfiles\WS72cnXO.ts'
file 'D:\ProgramData\study\mov\tsfiles\LXld1AUz.ts'
file 'D:\ProgramData\study\mov\tsfiles\Jc2FmbSf.ts'

...........

2.下载ts文件

ts文件很小,只有几百k,所以一个完整的视频会被分成几千个ts文件,我们可以采用多线程的方式来下载:

import urllibfrom concurrent.futures import ThreadPoolExecutordef download(url,name):    #下载ts文件到D:\ProgramData\study\mov\tsfiles文件夹    urllib.request.urlretrieve(url,'D://ProgramData//study//mov//tsfiles//'+name)def download_tsfile():    #记录创立的线程    task_list = []    dict_name_url = read_name_url()    #线程池的创立     pool = ThreadPoolExecutor(max_workers=50)    for name in dict_name_url:        # 启动多个线程下载文件,download是函数名,后面两个是参数值        task_list.append(pool.submit(download, dict_name_url[name],name))    # 判断所有下载线程是否全部结束    while (True):        if len(task_list) == 0:            break        for i in task_list:            if i.done():                task_list.remove(i)                print("剩下任务数:{0}".fORMat(len(task_list)))    print("所有下载任务完成!")

下载完成后,就可以在tsfiles文件夹找到这些细小的文件:

三、合并ts文件

有了前面两步的铺垫,现在要进行最重要的一个步骤了,那就是按order.m3u8里面的顺序,依次把这些ts文件合并起来。该怎么合并呢?

我们需要借助FFmpeg这个工具,这个工具非常强大,专门用来处理音频、视频切割、合并、编辑等,当然也非常复杂。安装这个软件,可以点击后面参考文章中的第二篇文章,这里不细说。下面来说说怎么合并这些ts文件。

代码非常简单:

import osdef mixTss(name):    #string前面加上‘r’,是为了告诉编译器这个string是个raw string,不要转义 backslash '\' 。    com = r'D:\\ffmpeg\\bin\\ffmpeg.exe -f concat -safe 0 -i D:\\ProgramData\\study\\mov\\order.m3u8 -c copy D:\\ProgramData\\study\\mov\\{}.mp4'.format(name)    os.system(com)    mixTss("hello")print("合并完成!")

可以看出上面的代码中,最重要的就是执行了一命令:

D:\ffmpeg\bin\ffmpeg.exe -f concat -safe 0 -i D:\ProgramData\study\mov\order.m3u8 -c copy D:\ProgramData\\study\\mov\\hello.mp4

ffmpeg很强大,但是也比较复杂,我也不是很懂这个,大概解释如下。

ffmpeg使用语法:

命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件] ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 

具体一点来说:

1. -f concat,-f 一般设置输出文件的格式,如-f psp(输出psp专用格式),但是如果跟concat,则表示采用concat协议,对文件进行连接合并。

2. -safe 0,用于忽略一些文件名错误,如长路径、空格、非ANSIC字符

3. -i D:\ProgramData\study\mov\order.m3u8,-i后面加输入文件名,当然也可以加输入文件名组成的文件名,即order.m3u8,但是要满足文件格式,即类似于下面这种:

file 'D:\ProgramData\study\mov\tsfiles\MQJ9iKoM.ts'
file 'D:\ProgramData\study\mov\tsfiles\8LeDe7Wu.ts'

4. -c copy D:\ProgramData\\study\\mov\\hello.mp4,-c表示输出文件采用的编码器,后面跟copy,表示不重新编码。

参考文章:ts视频下载 准备下载视频的你确定不进来看看吗_小王不头秃的博客-CSDN博客_ts视频下载

ffmpeg安装教程_小王不头秃的博客-CSDN博客_ffmpeg怎么安装

--结束END--

本文标题: Python下载ts文件视频且合并

本文链接: https://www.lsjlt.com/news/177274.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python下载ts文件视频且合并
    一、ts文件的由来 ts文件,ts即"Transport Stream"的缩写,特点就是要求从视频流的任一片段开始都是可以独立解码的,非常适合网络视频播放。 打开...
    99+
    2023-01-10
    Python下载ts文件视频 Python下载ts文件
  • Python批量下载ts视频文件,并用ffmpeg合并
    目录 一、ts文件的由来 二、下载ts文件 1.下载index.m3u8,并做相应处理 2.下载ts文件 三、ffmpeg合并ts文件 一、ts文件的由来 ts文件,ts即"Transport Stream"的缩写,特点就是要求从视频流...
    99+
    2023-09-06
    python
  • Python通过m3u8文件下载合并ts视频的操作
    前段时间,接到一个需求,要求下载某一个网站的视频,然后自己从网上查阅了相关的资料,在这里做一个总结。 1. m3u8文件 m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,...
    99+
    2022-11-12
  • python合并ts视频
    合并ts视频 #!/usr/bin/env/python #_*_coding:utf-8_*_ #Data:2017-10-02 #Auther:苏莫 #Link:http://blog.csdn.net/lingluofeng...
    99+
    2023-01-31
    视频 python ts
  • python合并ts视频(三种方法)
    前言:最近在爬取某个网站的视频,但是里面的视频数据是以ts文件的形式给出的。一个大的视频被切分成了很多小的ts视频,所以,合并这些ts视频就成为必要的了。我在网上搜到了三种方法,现在整理出来分享给大家,同时方便自己以后作参考。 方法一:用...
    99+
    2023-09-04
    python 音视频 开发语言
  • Python 视频文件的分割和合并
    import os;import time;os.system('start "wmplayer.exe", "F:\\abc.mp4"');--分割代码 start----import sys,os;kilobytes = 1024;me...
    99+
    2023-01-31
    视频文件 Python
  • Python怎么实现视频下载与合成
    本文小编为大家详细介绍“Python怎么实现视频下载与合成”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python怎么实现视频下载与合成”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。模块使用requests ...
    99+
    2023-06-30
  • 怎么用Python打造批量下载视频并能可视化下载进度的下载器
    这篇文章主要讲解了“怎么用Python打造批量下载视频并能可视化下载进度的下载器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python打造批量下载视频并能可视化下载进度的下载器”吧...
    99+
    2023-06-15
  • Python合并ts文件至mp4格式及解密教程
    本篇内容主要讲解“Python合并ts文件至mp4格式及解密教程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python合并ts文件至mp4格式及解密教程”吧!m3u8是什么格式?m3u8是苹...
    99+
    2023-06-20
  • Python实现视频下载与合成的示例代码
    目录模块使用开发环境案例实现1.明确需求2.代码实现步骤实现代码模块使用 requests >>> pip install requests (数据请求 第三方模块...
    99+
    2022-11-10
  • 基于Python实现视频自动下载软件
    目录序言效果展示下载视频下载弹幕下载评论软件生成打包序言 哈喽兄弟们,今天来实现一个Python采集视频、弹幕、评论与一体的小软件。 平常咱们都是直接代码运行,不过今天我们做成软件,...
    99+
    2022-11-11
  • python抓取某个网站的教学视频下载并
      #!/usr/bin/python # -*- coding: utf-8 -*-  import urllib,re  url1 = 'http://www.csvt.net/resource/videos' headers = ('...
    99+
    2023-01-31
    视频下载 网站 python
  • Android如何实现下载m3u8视频文件功能
    本篇内容主要讲解“Android如何实现下载m3u8视频文件功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android如何实现下载m3u8视频文件功能”吧!简介Aria下载器采用开源框架A...
    99+
    2023-07-05
  • Android实现下载m3u8视频文件问题解决
    目录效果图简介Aria导入Aria介绍启动ServiceDownloadService下载回调回调接口单例Binder构造单例下载辐射创建下载实例监听下载状态效果图 简介 Aria...
    99+
    2023-01-16
    Android下载m3u8视频 Android m3u8
  • Python合并ts文件至mp4格式及解密教程详解
    m3u8是什么格式?m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8。 使用m3u8格式文件主要因为可以实现多码率视频的适配,视频网站可以根据用户的网络带宽情况,自动为客户端匹配一...
    99+
    2022-06-02
    Python合并ts文件至mp4 Python m3u8格式
  • python中如何爬取并下载进击的巨人全集视频
    这篇文章给大家分享的是有关python中如何爬取并下载进击的巨人全集视频的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬...
    99+
    2023-06-14
  • Python实现连接FTP并下载文件夹
    目录第一章:连接 FTP 服务器并实现文件夹下载① 连接 FTP 服务器② 进入指定目录并显示文件信息③ 区分文件和文件夹名④ 文件夹名包含空格处理⑤ 使用递归实现:FTP服务器里的...
    99+
    2022-11-13
  • python实现多个视频文件合成画中画效果
    本文实例为大家分享了多个视频文件合成画中画效果的python代码,供大家参考,具体内容如下 Step 1 从视频中分离出音频(MP4->mp3) def separateM...
    99+
    2022-11-12
  • Python:使用爬虫抓取网页中的视频并下载(完整源码)
    Python:使用爬虫抓取网页中的视频并下载(完整源码) 在今天的程序开发世界中,网站是不可或缺的一部分。人们使用网站来获取有用的信息、购买商品和娱乐自己。这些网站的内容通常包含了各种类型的文件,其中...
    99+
    2023-08-31
    python 爬虫 音视频
  • python如何爬取自动下载网页音频文件
    小编给大家分享一下python如何爬取自动下载网页音频文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python是什么意思Python是一种跨平台的、具有解释...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作