Python合并ts文件至mp4格式及解密的方法
Python合并ts文件至mp4格式及解密的方法
本篇内容主要讲解“Python合并ts文件至mp4格式及解密的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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, 出现以下界面说明安装完成:
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:
importosfilePath="你的ts视频存放路径"file_list=sorted(os.listdir(filePath))withopen("你的ts视频存放路径/file_list.txt","w+")asf:forfileinfile_list:f.write("file"{}"".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
到此,相信大家对“Python合并ts文件至mp4格式及解密的方法”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...