Python合并ts文件至mp4格式及解密教程详解

 更新时间:2021年07月06日 09:48:55   作者:程序员启航  
m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。本文给大家介绍Python合并ts文件至mp4格式及解密教程,需要的朋友参考下吧

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

使用m3u8格式文件主要因为可以实现多码率视频的适配,视频网站可以根据用户的网络带宽情况,自动为客户端匹配一个合适的码率文件进行播放,从而保证视频的流畅度。

m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。

它将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。

合并 ts 文件其实有很多种方法,有一些教程直接使用 cmd 的 copy 命令直接合并 ts 文件:

copy /b movie*.ts movie_new.ts

这个方法虽然可以合并,但是无法转化为 mp4 格式,而且也有可能出现视频缺损的情况。因此本文将讲解如何使用 ffmpeg 合并 ts 文件为mp4格式,使用 ffmpeg 也能有效防止视频出现缺损的问题。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上

如果你用Python的目的是数据分析,可以直接安装Anaconda

安装ffmpeg

Mac (打开终端(Terminal), 用 homebrew 安装):

brew install ffmpeg --with-libvorbis --with-sdl2 --with-theora

Linux:

apt-get install ffmpeg libavcodec-extra

Windows:

1. 进入 http://ffmpeg.org/download.html#build-windows,点击 windows 对应的图标,进入下载界面点击 download 下载按钮,
2. 解压下载好的zip文件到指定目录
3. 将解压后的文件目录中 bin 目录(包含 ffmpeg.exe )添加进 path 环境变量中
4. DOS 命令行输入 ffmpeg -version, 出现以下界面说明安装完成:

Image

2.简单合并ts文件

使用 ffmpeg 合并一些 ts 文件非常简单,你只需要在终端输入一行命令即可:

ffmpeg -f concat -i file_list.txt -c copy output.mp4

其中 file_list.txt 为如下格式文本文件:

file 'input1.ts'
file 'input2.ts'
file 'input3.ts'

我们可以用 Python 脚本生成这个 file_list.txt:

import os
filePath = "你的ts视频存放路径"
file_list = sorted(os.listdir(filePath))
with open("你的ts视频存放路径/file_list.txt","w+") as f:
    for file in file_list:
        f.write("file '{}'\n".format(file))

注意,这个 file_list.txt 需要和你的 ts 视频存放在同一个目录下,然后 cd 进入此目录,并执行上面提到过的 ffmpeg 合并转换命令:

ffmpeg -f concat -i file_list.txt -c copy output.mp4

3.解密处理

上面我们讲的是没有经过加密的 ts 文件,这些文件下载后直接可以播放,但经过AES-128加密后的文件下载后会无法播放,所以还需要进行解密。

如何判断是否需要加密?观察视频网站是否有m3u8的文件传输,下载下来并打开:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
 
//这里是注释,真实文件里不会有的,
//看看你的m3u8文件里有没有这一行,如果有的话,这个m3u8文件是加密的,请继续往下看
//如果没有这行的话,特别是没有这个#EXT-X-KEY,那么恭喜你,这个m3u8没有加密,你直接按本文教程第二点合并即可
#EXT-X-KEY:METHOD=AES-128,URI="http://www.example.com/20180125/key.key"
 
 
#EXTINF:12.5,
//下面的这个其实才是视频真正的地址,你放在浏览器地址栏上直接回车是可以直接下载的
//不过这样的链接在m3u8文件里会有很多,建议使用工具下载(迅雷)、ffmpeg、vlc等
//这里还可能出现GBDYO3576000.ts这种情况,其实是把前面的路径省略了,可根据m3u8文件的路径自行加上
http://www.example.com/20180125/GBDYO3576000.ts
#EXTINF:12.5,
http://www.example.com/20180125/GBDYO3576001.ts
#EXTINF:12.5,
http://www.example.com/20180125/GBDYO3576002.ts

如果你的文件是加密的,那么你还需要一个key文件,Key文件下载的方法和m3u8文件类似,如下所示 key.key 就是我们需要下载的 key 文件,并注意这里 m3u8 有2个,需要使用的是像上面一样存在 ts 文件超链接的 m3u8 文件:

下载所有 ts 文件,将下载好的所有的 ts 文件、m3u8、key.key 放到一个文件夹中,将 m3u8 文件改名为 index.m3u8,将 key.key 改名为 key.m3u8 。更改 index.m3u8 里的 URL,变为你本地路径的 key 文件,将所有 ts 也改为你本地的路径,如下所示:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="e:/20180125/key.m3u8"
#EXTINF:12.5,
e:/20180125/GBDYO3576000.ts
#EXTINF:12.5,
e:/20180125/GBDYO3576001.ts
#EXTINF:12.5,
e:/20180125/GBDYO3576002.ts

然后用ffmpeg进行合并:

ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy new.mp4

这样就大功告成了!我们成功解密并使用 ffmpeg 合并了这些 ts 视频片段,实际应用场景可能和这不一样,希望我们这篇文章能起到抛砖引玉的作用。

到此这篇关于Python合并ts文件至mp4格式及解密教程的文章就介绍到这了,更多相关Python合并ts文件至mp4内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 实现图片旋转 上下左右 180度旋转的示例

    python 实现图片旋转 上下左右 180度旋转的示例

    今天小编就为大家分享一篇python 实现图片旋转 上下左右 180度旋转的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python grpc实现异步调用(不用grpc异步接口)

    python grpc实现异步调用(不用grpc异步接口)

    grpc同步调用更简单,但是在处理复杂任务时,会导致请求阻塞,影响吞吐,本文主要介绍了python grpc实现异步调用,不用grpc异步接口,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • Python matplotlib 绘制双Y轴曲线图的示例代码

    Python matplotlib 绘制双Y轴曲线图的示例代码

    Matplotlib是非常强大的python画图工具,这篇文章主要介绍了Python matplotlib 绘制双Y轴曲线图,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Django 使用logging打印日志的实例

    Django 使用logging打印日志的实例

    下面小编就为大家分享一篇Django 使用logging打印日志的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python利用lxml模块爬取豆瓣读书排行榜的方法与分析

    Python利用lxml模块爬取豆瓣读书排行榜的方法与分析

    这篇文章主要给大家介绍了关于Python爬虫利用lxml模块爬取豆瓣读书排行榜的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • python3将视频流保存为本地视频文件

    python3将视频流保存为本地视频文件

    这篇文章主要为大家详细介绍了python3将视频流保存为本地视频文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • python进行数据合并concat/merge

    python进行数据合并concat/merge

    这篇文章主要介绍了python进行数据合并concat/merge,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09
  • python中count函数简单的实例讲解

    python中count函数简单的实例讲解

    在本篇文章里小编给大家整理了关于python中count函数简单的实例讲解,有兴趣的朋友们可以参考下。
    2020-02-02
  • Python基于pygame实现单机版五子棋对战

    Python基于pygame实现单机版五子棋对战

    这篇文章主要为大家详细介绍了Python基于pygame实现单机版五子棋对战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Python实现向PPT中插入表格与图片的方法详解

    Python实现向PPT中插入表格与图片的方法详解

    这篇文章将带大家学习一下如何在PPT中插入表格与图片以及在表格中插入内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-05-05

最新评论