import os
from PyQt5. QtWidgets import QApplication , QFileDialog
import shutil
from Crypto.Cipher import AES
import pandas as pd
#普通加密合并
def merge_type_1(name,kye,checklist):
cryptor = AES.new(kye, AES.MODE_CBC,kye)
with open ( name +'.mp4','wb+') as f1:
for ss in checklist:
f2=open(ss,'rb')
f1.write(cryptor.decrypt(f2.read()))
f2.close()
f1.close()
return 1
#文件重命名检查合法性
def check_name(in_name,illegal_word):
for nw in illegal_word:
in_name=in_name.replace(nw,' ')
return in_name
illegal_word='?',',','_','/','*',''',''','<','>','|'
filename ='xx.csv'
reader=pd.read_csv(filename)
rmax,cmax=reader.shape
#csv文件
csvch={}
for r in range(0,rmax):
csvch[reader.iloc[r,1]]=reader.iloc[r,3]
a=QApplication([''])
#选择文件夹,该文件夹为m3u8文件夹的上级文件夹
directory1 = QFileDialog.getExistingDirectory(caption="选择目录文件夹",directory= "/")
print('程序开始运行……')
doclist1=os.listdir(directory1)
counter=0
for x1 in doclist1:
directory2=directory1 + '/' + x1
print(directory2+'开始合并……')
doclist=os.listdir(directory2)
if ('local.key' and 'localPlayList.m3u8' and 'video.info')in doclist:
d='localPlayList.m3u8'
directory3=directory2 + '/' + d
checklist=[]
with open (directory3,'r')as file:
context=file.readlines()
for i in range(len(context)):
if '#EXTINF:' in context[i]:
if 'seg' in context[i+1] :
if context[i+1][:-1] in doclist:
checklist.append(directory2 + '/' +context[i+1][:-1])
if 'EXT-X-KEY:' in context[i]:
if 'local.key'in context[i]:
kye_path=directory2 + '/'+'local.key'
sp_type=1
kye_file=open(kye_path,'rb')
kye=kye_file.read()
kye_file.close()
continue
if 'EXT-X-ENDLIST' in context[i+1]:
if sp_type==1:
#video.info文件读取uuid对应的url
rename=directory2 + '/' + 'video.info'
rnf=open(rename,'rb')
for ix in rnf.readlines():
url=ix.find(b'https://')
url2=ix.find(b't\x00d/storage')
xname=str(ix[url:url2])[2:-1]
#xname=str(ix[url:url+51])[2:-1]
break
#url匹配csv中的文件名
if xname in csvch:
x1=csvch[xname]
print(x1)
x1=check_name(x1,illegal_word)
merge_type_1(x1,kye,checklist)
#shutil.rmtree(os.path.dirname(kye_path))
counter=counter+1
print(directory2+'合并完成!已完成'+str(counter)+'个……')
break
else:
print('出错了!')
print('程序已结束','已完成:',str(counter),'个!')
某浏览器缓存转mp4功能太不完善,自行代码解决。