python将下载到本地m3u8视频合成MP4的代码详解
作者:东方佑 发布时间:2022-08-29 11:13:39
标签: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") as f:
data=f.read()
return data.split("\n")[6::2]
def decode_video(filename):
data_list=[[],[],[]]
file_list=os.listdir(filename)
for one_file_name in file_list:
if "m3u8" in one_file_name:
data_list[0].append(filename+"/"+one_file_name)
elif "key" in one_file_name:
data_list[1].append(filename + "/" + one_file_name)
else:
data_list[2].append(filename + "/" + one_file_name)
key=decode_key_file(data_list[1][0])
name_list=decode_m_file(data_list[0][0])
for one_name in name_list:
for path_name in data_list[2]:
if one_name in path_name:
with open(path_name,"rb") as f:
data_name=f.read()
if len(key): # AES 解密
cryptor = AES.new(key, AES.MODE_CBC, key)
with open(key + ".mp4", 'ab') as f:
f.write(cryptor.decrypt(data_name))
if __name__ == '__main__':
decode_video("./data")
视频下载下来如下图所示
https://ngmov.me/?channelCode=ngdl50
这个应用下载下来的视频就是这样的解法
改进版本
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") as f:
data = f.read()
return data.split("\n")[6::2]
def decode_video(filename):
data_list = [[], [], []]
file_list = os.listdir(filename)
for one_file_name in file_list:
if "m3u8" in one_file_name:
data_list[0].append(filename + "/" + one_file_name)
elif "key" in one_file_name:
data_list[1].append(filename + "/" + one_file_name)
else:
data_list[2].append(filename + "/" + one_file_name)
try:
key = decode_key_file(data_list[1][0])
except:
key = one_file_name
name_list = decode_m_file(data_list[0][0])
for one_name in name_list:
for path_name in data_list[2]:
if one_name in path_name:
with open(path_name, "rb") as f:
data_name = f.read()
if len(key): # AES 解密
cryptor = AES.new(key, AES.MODE_CBC, key)
with open(key + ".mp4", 'ab') as f:
f.write(cryptor.decrypt(data_name))
else:
with open(key + ".mp4", 'ab') as f:
f.write(data_name)
f.flush()
if __name__ == '__main__':
data_list = os.listdir("/home/dfy/Videos/Download")
index=0
for path_one in data_list:
index+=1
if index<18:
continue
decode_video("/home/dfy/Videos/Download" + "/" + path_one)
来源:https://blog.csdn.net/weixin_32759777/article/details/105588190
0
投稿
猜你喜欢
- 新闻系统,相册系统可以用用哦,简单实用,有兴趣的可以自己扩充!^_^相册截图:<?xml version="1.0"
- 相信只要学习python的同学对于虚拟环境这个概念肯定不会太陌生,虚拟环境指的是一个个单独隔离的python开发环境。各个虚拟环境之间互不干
- DB2 存储过程:基础知识您在客户端工作站上对远程服务器和位于该服务器上的数据库进行分类的任何时候,都存在一个简单的 DB2 客户端/服务器
- 官方网站:http://www.extjs.com/演示地址:http://www.yaohaixiao.com/effects/sampl
- 用pytesseract识别图片中的数字Win 平台 使用步骤一、安装包。二、找个图片,运行如下识别程序。示例程序:import pytes
- 本文汇总了在Access数据库安全问题中最为常见的问题来做出解答。问:什么是Microsoft Access 工作组,怎样创建工作组信息文件
- 这是我的第一个真正意思上的自动化脚本。1、练习的测试用例为:打开百度首页,搜索“胡歌”,然后检索列表,有无“胡歌的新浪微博”这个链接 2、在
- 目录项目地址:简介使用主要代码项目地址:https://github.com/king-xw/Face_Recogntion简介本仓库是使用
- 在caffe中,如果使用的是c++接口,均值文件默认为.binaryproto格式,而如果使用的是python接口,均值文件默认的是nump
- paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Lin
- 1、变量和类型变量是一种存储数据的载体,也就是一个容器。计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间,变量的值可以被
- 用python给自己做个练习系统刷题吧!实现效果实现代码选择题def xuanze(): global flag2
- 这是一个很和谐很实用的网站管理程序,和我以前介绍的服务器管理程序不同的是,这个程序只有一个功能,就是实现远程Web方式删除文件(实际上是重命
- 流行的 JavaScript 库有jQuery,MooTools,Prototype,Dojo和YUI等,这些 JavaScript 库功能
- 对我当前工程进行全部测试需要花费不少时间。既然有 26 GB 空闲内存,为何不让其发挥余热呢? tmpfs 可以通过把文件系统保
- 初识defaultdict之前在使用字典的时候, 用的比较随意, 只是简单的使用dict.然而这样在使用不存在的key的时候发生KeyErr
- 利用GDAL库对tif影像进行读取 示例代码默认波段为[B、G、R、NIR的顺序,且为四个波段]import gdaldef readTif
- 缩略图在很多时候我们都需要将图片按照同比例缩小有利于存储 但是一张张手动去改的话太麻烦了 今天我们就用python实现一个简单的将一个文件夹
- break 语句Python break语句,就像在C语言中,打破了最小封闭for或while循环。break语句用来终止循环语句,即循环条
- 问题给出一段话,由短句组成,短句之间可能被任意标点符号隔开。想要提取所有的短句。解决使用 re.split 函数,用正则式匹配的方法,一次性