解码M3U8在线流视频AES-128解密TS合并到MP4
Posted dsx4602
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解码M3U8在线流视频AES-128解密TS合并到MP4相关的知识,希望对你有一定的参考价值。
本文针对网站视频进行解密合并,对m3u8加密的ts视频流具有通用性(对于m3u8的介绍,请见最下方参考资料)。
- 使用工具:ffmpeg(下载和安装方法可自行百度)
- 在视频网页上按F12,进入“网络”标签,播放一会儿视频后,在筛选框中输入“m3u8”,查看响应结果,发现此站m3u8是AES-128加密,有秘钥key,下载该m3u8文件到本地(如果无法下载则直接复制响应结果到txt文件中,保存该txt文件,保存的文件名和后缀名要与视频网站中的相一致)
- 以同样的方法下载key文件(m3u8文件里有key文件的url,也可据此直接下载key文件)
- 以同样的方法,在筛选框中输入“ts”,发现有多个ts文件,这些ts文件的get请求地址,除了具体的文件名不同之外,其他都相同。这些ts文件名也都出现在了m3u8文件中。可以通过程序代码或其他工具,统一将m3u8文件中出现的ts文件下载到本地。
- 将m3u8文件、key文件、ts文件放到同一个文件夹中,修改m3u8文件,将其中的
URI字段的值改为key文件的文件名(如key文件为ts.key,则改为URI="ts.key")。
-
打开命令提示符(cmd)界面,通过cd命令进入存放m3u8文件、key文件、ts文件的文件夹,设m3u8文件为index.m3u8,要合并成的mp4文件名为output.mp4,则在cmd中输入如下命令
ffmpeg -allowed_extensions ALL -i "index.m3u8" -c copy output.mp4
另,如果ts文件并没有加密(即能直接通过视频播放器打开播放),则下载了ts文件后,可直接在cmd界面输入如下命令合并成mp4
ffmpeg -f concat -safe 0 -i <video_list_path> -c copy <output_path>
其中:
- <video_list_path>是写有待合并ts文件地址列表的文本文件地址(如 D:\\file\\video_list.txt),文件中的每一行都是一个ts文件地址,其格式如
file 'D:\\file\\video0.ts'
file 'D:\\file\\video1.ts'
file 'D:\\file\\video2.ts'
- <output_path>为要合并成的mp4文件地址(如 D:\\file\\output.mp4)
附:通过python3统一下载ts文件,支持断点续传(其中的params、headers、proxies、path_output_dir、path_output_file_dir、start_index、end_index、url请按实际情况填写)
import requests
import os
import glob
from tqdm import tqdm
def download(url, path_output):
params =
headers =
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0",
"Accept": "*/*",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
"Pragma": "no-cache",
"Cache-Control": "no-cache"
proxies = "http": "127.0.0.1:1080", "https": "127.0.0.1:1080"
# 自动对params进行编码,然后自动和url进行拼接,去发请求
rsp = requests.get(url, params=params, headers=headers, proxies=proxies)
with open(path_output, 'wb') as f:
f.write(rsp.content)
f.close()
path_output_dir = "./data"
path_output_dir = os.path.abspath(path_output_dir)
path_output_file_dir = os.path.join(path_output_dir, 'file')
if not os.path.exists(path_output_file_dir):
os.makedirs(path_output_file_dir)
path_file_list=glob.glob(os.path.join(path_output_file_dir, '*.ts'))
start_index = len(path_file_list)
end_index = 100
for i in tqdm(range(start_index, end_index + 1)):
url = f"https://www.example.com/indexi.ts"
path_output = os.path.join(path_output_file_dir, f"indexi.ts")
download(url, path_output)
参考资料:Programer_Log/2020/3-26-m3u8-decrypt at master · makelove/Programer_Log · GitHub
以上是关于解码M3U8在线流视频AES-128解密TS合并到MP4的主要内容,如果未能解决你的问题,请参考以下文章
什么是m3u8格式? Python合并ts文件至mp4格式及解密教程