网络编程
位置:首页>> 网络编程>> Python编程>> python将下载到本地m3u8视频合成MP4的代码详解

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")

视频下载下来如下图所示

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

https://ngmov.me/?channelCode=ngdl50
这个应用下载下来的视频就是这样的解法

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

改进版本


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
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com