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:

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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python通过m3u8文件下载合并ts视频的操作

    前段时间,接到一个需求,要求下载某一个网站的视频,然后自己从网上查阅了相关的资料,在这里做一个总结. 1. m3u8文件 m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求,是现在比较流行的一种加载方式.目前,很多新闻视频网站都是采用这种模式去加载视频. M3U8文件是指UTF-8编码格式的M3U文件.M3U文件是记录了一个索引纯文本

  • python实现m3u8格式转换为mp4视频格式

    开发动机:最近用手机QQ浏览器下载了一些视频,视频越来越多,占用了手机内存,于是想把下载的视频传到电脑上保存,可后来发现这些视频都是m3u8格式的,且这个格式的视频都切成了碎片,存在电脑里不方便查看,于是想把它转换为其他可以直接打开播放的完整视频,到网上找了一些工具,都不怎么好用,后来发现一个手机端的"缓冲合并工具",倒是可以用,但是合并的视频顺序是乱的,碎片的视频顺序还需要用户手动调整,感觉太耽误时间了,于是自己打算写一个转换工具. 直接上代码:(程序的文件名为:convert_m3

  • python将下载到本地m3u8视频合成MP4的代码详解

    代码如下所示: import os import requests import datetime from Crypto.Cipher import AES def decode_key_file(key_file_name): with open(key_file_name,"r") as f: data=f.read() return data def decode_m_file(m_file_name): with open(m_file_name,"r")

  • python3.6根据m3u8下载mp4视频

    需要下载某网站的视频,chrome浏览器按F12打开开发者模式,发现视频链接是以"blob:http"开头的链接,打开这个链接后找不到网页,网上查了下,找到了下载方法,在这里做个记录,如果有错误,欢迎指出. 程序在Windows 10下运行,不过Linux应该也没问题. 使用到的有re模块,requests模块和Crypto模块,其中requests模块和Crypto模块如果没安装可以使用pip命令安装.(Crypto模块安装感觉比较坑,我是从anaconda里拷贝了一份) 下面开始正

  • Python解析m3u8拼接下载mp4视频文件的示例代码

    一.关于m3u8: m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求. 示例: #EXTM3U #EXT-X-TARGETDURATION:10 #EXTINF:9, http://data.video.iqiyi.com/videos/vts/20210301/69/b8/73ad4ef0

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

    m3u8是什么格式?m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8. 使用m3u8格式文件主要因为可以实现多码率视频的适配,视频网站可以根据用户的网络带宽情况,自动为客户端匹配一个合适的码率文件进行播放,从而保证视频的流畅度. m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放. 它将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内

  • python中读入二维csv格式的表格方法详解(以元组/列表形式表示)

    如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, 1.0, 180.0), (4.0, 0.0, 0.0, 180.0), (5.0, 0.0, 3.0, 178.0)) 方法一,使用python内建的数据处理库: #python自带的库 rows = open('allnodes.csv','r',encoding='utf-8').readl

  • Python实现从文件中加载数据的方法详解

    前几篇都是手动录入或随机函数产生的数据.实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化. 比如之前python基础(12)介绍打开文件的方式,可直接读取文件中的数据,扩大了我们的数据来源.下面,将展示几种方法. 我们将使用内置的 csv 模块加载CSV文件 CSV文件是一种特殊的文本文件,文件中的数据以逗号作为分隔符,很适合进行数据的解析.先用excle建立如下表格和数据,另存为csv格式文件,放到代码目录下. 包含在Python标准库中自带CSV 模块,我们只需要impor

  • mysql 5.7 zip 文件在 windows下的安装教程详解

    1.下载mysql最新版本. http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.15-winx64.zip 2.解压到文件夹. D:\software\mysql\mysql5.7a 将my-default.ini 复制为 my.ini 3.编辑my.ini # These are commonly set, remove the # and set as required. basedir ="D:/software/mysql/mysql

  • windows下python 3.9 Numpy scipy和matlabplot的安装教程详解

    学习python过程中想使用python的matlabplot绘图功能,遇到了一大批问题,然后一路过关斩将,最终安装成功,实为不易,发帖留念. 1 首先打开cmd win+r 2 pip安装 pip3 install --user numpy scipy matplotlib –user 选项可以设置只安装在当前的用户下,而不是写入到系统目录.默认情况使用国外线路,国外太慢,我们使用清华的镜像就可以: pip3 install numpy scipy matplotlib -i https://

  • Python找出文件中使用率最高的汉字实例详解

    本文实例讲述了Python找出文件中使用率最高的汉字的方法.分享给大家供大家参考.具体分析如下: 这是我初学Python时写的,为了简便,我并没在排序完后再去掉非中文字符,稍微会影响性能(大约增加了25%的时间). # -*- coding: gbk -*- import codecs from time import time from operator import itemgetter def top_words(filename, size=10, encoding='gbk'): co

  • python读取csv文件指定行的2种方法详解

    csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格 就可以存储为csv文件,文件内容是: No.,Name,Age,Score 1,Apple,12,98 2,Ben,13,97 3,Celia,14,96 4,Dave,15,95 假设上述csv文件保存为"A.csv",如何用Python像操作Excel一样提取其中的一行,也就是一条记录,利用Python自带的csv模块,有2种方法可以实现: 方法一:reader 第一种方法使

  • Python 运行.py文件和交互式运行代码的区别详解

    代码版本:3.6.3 1. 交互式运行代码会直接给出表达式的结果,运行代码文件必须print才能在控制台看到结果. 直接给出结果: 没有print是看不到结果的: 有print才能看到结果: 另:交互式中可以用下划线 `_` 来查看上一次输出的结果.如果给下划线赋值,这个效果就没了. 另另:如果变量的值是空,不会显示 2.   交互式输出会输出原始内容,print会输出渲染后的内容 打印字符串会带着引号,换行符也原样显示了. 字符串的引号被去掉了,换行符真的换行了 3.  交互式每一句代码都是一

  • Python下载ts文件视频且合并的操作方法

    目录 一.ts文件的由来 二.下载ts文件 1.下载index.m3u8,并做相应处理 2.下载ts文件 三.合并ts文件 参考文章: 一.ts文件的由来 ts文件,ts即"Transport Stream"的缩写,特点就是要求从视频流的任一片段开始都是可以独立解码的,非常适合网络视频播放. 打开网址:https://www.kan35.com/play/210314-3-1.html,要怎么才能把这个视频下载到电脑上呢? 按F12发现,这些视频被切割成无数个细小的片断,如图: 上图中

  • Python合并pdf文件的工具

      如果你需要一个PDF文件合并工具,那么本文章完全可以满足您的要求.哈喽,大家好呀,这里是滑稽研究所.不多废话,本期我们利用Python合并把多个pdf文件合并为一个.我们提前准备了5个pdf文件,来验证代码.   源代码: import os from PyPDF2 import PdfFileReader, PdfFileWriter # 使用os模块的walk函数,搜索出指定目录下的全部PDF文件 # 获取同一目录下的所有PDF文件的绝对路径 def getFileName(filedi

随机推荐