视频网站缓存合并
处理缓存文件
目录
# 遍历文件夹,遍历文件,将缓存文件解密
def decrypt(self, top_dir):
dir_list = os.listdir(top_dir) # 打开缓存目录
file_count_all = 0
for input_dir in dir_list: # 遍历文件夹
full_dir = top_dir + '\\' + input_dir # 拼接文件夹绝对路径
media_file = ['', ''] # 定义存放音视频文件名的数组
if os.path.isdir(full_dir): # 判断是否为目录
filelist = os.listdir(full_dir) # 获取下级目录内文件列表
file_count = 0 # 用于media_file数组下标
media_file = ['', ''] # 初始化存放音视频文件名的数组
for file in filelist: # 遍历文件名
input_file = full_dir + '\\' + file # 拼接文件绝对路径
# 判断是否为文件并是可处理的文件后缀名,.txt为测试时使用
if os.path.isfile(input_file) and file[-4:] in ['.txt', '.m4s', '.m4a']:
del_str = self.LE_delstr.text() # 获取需要清除的内容
f = open(input_file, "rb") # 以二进制方式读取文件内容
lines = f.readlines(0) # 读取文件
lines2 = lines[0] # 将第一行赋值给lines2
f.close() # 关闭文件
# 判断文件第一行的开头9个字节是否等于需要删除的内容
if lines2[0:9] == bytes(del_str, 'utf-8'):
lines2 = lines2[9:] # lines2=去除前9个字节的自己
lines[0] = lines2 # 将新的第一行更新到原文件中
fd = open(input_file, "wb") # 以二进制方式写入文件
fd.writelines(lines) # 复写原文件
fd.close() # 关闭文件
self.TE.insertPlainText(file + '已解密' + '\n') # 在TextEdit控件中写入进度信息
new_file_name = input_file[:-4] + '.m4a' # 拼接新文件名(改变原文件后缀名)
new_file_name.replace('/', '\\') # 此处可以省略
os.rename(input_file, new_file_name) # 按新文件名更新源文件(解密后文件直接复写解密前的文件),文件位置不变
if file_count == 0: # 缓存中只有两个可处理文件,一个是音频另一个是视频,无需分辨记录即可
media_file[0] = new_file_name # 将新文件名写入数组
file_count = 1
else:
media_file[1] = new_file_name # 将新文件名写入数组
file_count = 0
else:
self.TE.insertPlainText(file + '文件损坏或已解密,本次未修改\n') # 在TextEdit控件中写入进度信息
file_count_all = file_count_all + 1
else:
self.TE.insertPlainText(file + '不属于缓存文件,本次未修改\n') # 在TextEdit控件中写入进度信息
# 音视频合成部分
if self.checkBox.isChecked(): # 判断合并选项是否勾选
Info = full_dir + '\\.videoInfo' # 拼接缓存文件中的视频信息文件用于取出视频名称
f = open(Info, 'r', encoding='utf-8') # 打开视频信息文件
lines = str(f.readlines(0)) # 读取视频信息文件内容
lines = lines[2:-2] # 去除两端的[]
lines = json.loads(lines) # 将内容json处理
out_file_name = self.LE_output.text() + '\\' + lines.get('tabName') + '.mp4' # 拼接合并后的文件名
print(out_file_name)
cmd_line = self.LE_ff_cmd.text() # 获取用户定义的命令模板
cmd_line = cmd_line.replace('video_file', media_file[0]) # 将各个参数替换到命令模板中
cmd_line = cmd_line.replace('audio_file', media_file[1])
cmd_line = cmd_line.replace('output_file', out_file_name)
cmd_line = self.LE_ffmpeg.text() + " " + cmd_line # 将执行程序(ffmpeg.exe)加入命令
print(cmd_line)
os.system(cmd_line) # 执行合并命令
self.TE.insertPlainText(out_file_name + '已完成转换' + '\n') # 在TextEdit控件中写入进度信息
return file_count_all