m3u8加密文件的解密及ts文件的合并

1.既然你能看到我这篇文章,说明你已经看过了其他很多类似的文章了,我也废话不多说了
2.首先你要搞到那个m3u8的文件,打开视频播放一会,然后刷新,再然后点击F12,或者手动进入开发者模式找到.m3u8的文件,然后根据url直接在浏览器中下载就可以,然后打开,

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:13
#EXT-X-MEDIA-SEQUENCE:0

//这里是注释,真实文件里不会有的,
//看看你的m3u8文件里有没有这一行,如果有的话,那么恭喜你这个m3u8文件是加密的,请继续往下看
//如果没有这行的话,特别是没有这个#EXT-X-KEY,那么同样恭喜你,这个m3u8没有加密,你直接百度vlc下载合并就行,也可根据本文章进行合并
#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文件,可以文件下载的方法和m3u8文件类似,你把m3u8.m3u8换成key.key就能下载了。将下载好的所有的ts文件、m3u8.m3u8、key.key放到一个文件夹中,将m3u8.m3u8改名为index.m3u8(习惯),将key.key改名为key.m3u8。更改index.m3u8也就是之前的m3u8.m3u8,将URI改为你本地路径的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,下载Static的那个版本就可以,然后配置环境变量Path,在Path后面直接添加你ffmpeg的安装目录加上/bin就可以了,安装完成之后重启一下,重启之后打开你index.m3u8所在的文件执行

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

如果报错了执行

ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.mp4

如果这里报错了,那么打开你的index.m3u8文件,修改URI的路径为网络路径(你下载时的路径),然后执行

ffmpeg -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.ts

好了,这样就完成了m3u8文件的合并,有什么不明白的地方可以留言给我。

  • 26
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 60
    评论
如果m3u8文件需要解密,则需要在下载ts文件之前进行解密操作。通常情况下,m3u8文件会包含一个密钥URL,用于获取解密密钥。我们可以使用requests库下载密钥文件并解析出密钥。然后使用pycryptodome库进行AES解密操作,并将解密后的内容保存到本地。最后使用FFmpeg库将解密后的ts文件合成为mp4格式。以下是一个简单的示例代码: ```python import os import requests import subprocess from Crypto.Cipher import AES # 安装FFmpeg之后,在此处填写FFmpeg的路径 ffmpeg_path = "/usr/local/bin/ffmpeg" # 填写m3u8文件URL和输出mp4文件路径 m3u8_url = "https://example.com/video.m3u8" mp4_file = "output.mp4" # 下载m3u8文件 m3u8_response = requests.get(m3u8_url) m3u8_content = m3u8_response.text # 解析m3u8文件获取ts文件的URL地址和加密信息 ts_infos = [] lines = m3u8_content.split("\n") for i, line in enumerate(lines): if line.endswith(".ts"): ts_url = os.path.join(m3u8_url.rsplit("/", 1)[0], line) iv = lines[i-1].split(",")[1].split("=")[1] key_url = lines[i-2].split(",")[1].split("=")[1].strip('"') ts_infos.append((ts_url, iv, key_url)) # 下载密钥文件并解析出密钥 key_response = requests.get(key_url) key_bytes = key_response.content cipher = AES.new(key_bytes, AES.MODE_CBC, bytes.fromhex(iv)) # 下载ts文件并保存到本地 ts_files = [] for i, (ts_url, iv, key_url) in enumerate(ts_infos): ts_response = requests.get(ts_url) ts_file = f"{i}.ts" with open(ts_file, "wb") as f: decrypted_content = cipher.decrypt(ts_response.content) f.write(decrypted_content) ts_files.append(ts_file) # 使用FFmpeg将ts文件合成为mp4格式 command = [ffmpeg_path, "-i", "concat:" + "|".join(ts_files), "-c", "copy", mp4_file] subprocess.call(command) # 删除临时的ts文件 for ts_file in ts_files: os.remove(ts_file) ``` 以上代码中,我们在解析m3u8文件时获取了加密信息,包括密钥URL和IV值。然后使用requests库下载密钥文件并解析出密钥,使用pycryptodome库进行AES解密操作,并将解密后的内容保存到本地。最后使用FFmpeg库将解密后的ts文件合成为mp4格式。合成完成后,输出文件会保存在指定的mp4文件路径下。注意,我们需要先将所有ts文件保存到本地并解密,然后再使用FFmpeg将其合成为mp4格式,最后再删除临时的ts文件
评论 60
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值