import os import glob from natsort import natsorted

dir_path = r'C:\Users\Administrator\桌面\1' output_dir = r'C:\Users\Administrator\桌面\2'

当前文件夹下的所有mp4路径

L = [] for root, dirs, files in os.walk(dir_path): files = natsorted(files) for file in files: if os.path.splitext(file)[1] == '.mp4': file_path = os.path.join(root, file) L.append(file_path)

生成ffmpeg命令

commands = [] for l in L: ts_file = os.path.join(os.path.dirname(l), os.path.splitext(os.path.basename(l))[0] + '.ts') if os.path.isfile(ts_file): # 如果ts文件已经存在则不需要再生成命令 continue commands.append(f"ffmpeg -i "{l}" -vcodec copy -acodec copy -bsf:v h264_mp4toannexb "{ts_file}"")

获取文件名 + '.mp4'

new_file_name = os.path.splitext(os.path.basename(L[0]))[0].replace('h_','') + '.mp4' new_file_path = os.path.join(output_dir, new_file_name)

检查新文件是否已经存在,如果存在则需要修改文件名

if os.path.exists(new_file_path): i = 1 while True: new_file_name = os.path.splitext(os.path.basename(L[0]))[0].replace('h_','') + f'_{i}.mp4' new_file_path = os.path.join(output_dir, new_file_name) if not os.path.exists(new_file_path): break i += 1

concat_command = ( f'ffmpeg -i "concat:{"|".join([os.path.join(os.path.dirname(l), os.path.splitext(os.path.basename(l))[0] + ".ts") for l in L])}" ' '-acodec copy -vcodec copy -bsf:a aac_adtstoasc ' f'"{new_file_path}"' )

执行ffmpeg命令

for command in commands: os.system(command)

os.system(concat_command)

重命名文件

for mp4_file in glob.glob(os.path.join(output_dir, new_file_name)): file_name = os.path.splitext(os.path.basename(mp4_file))[0] # 截取文件名 first_letter_index = -1 last_letter_index = -1 for i in range(len(file_name)): if file_name[i].isalpha(): if first_letter_index == -1: first_letter_index = i last_letter_index = i if first_letter_index == -1 or last_letter_index == -1: continue new_file_name = file_name[first_letter_index:last_letter_index] # 替换文件名 index = new_file_name.find('00') if index != -1: new_file_name = new_file_name[:index] + '-' + new_file_name[index+2:] new_file_name = new_file_name.upper() new_file_name += '.mp4' os.rename(mp4_file, os.path.join(output_dir, new_file_name))

删除ts文件

for ts_file in glob.glob(os.path.join(dir_path, '*.ts')): os.remove(ts_file

修改下面的代码不对运行代码之前output_dir目录下就存在的文件重命名只命名本次处理的新文件import osimport globfrom natsort import natsorteddir_path = rCUsersAdministrator桌面1output_dir = rCUsersAdministrator桌面2# 当前文件夹下的所有mp4路径L = for root dirs

原文地址: https://www.cveoy.top/t/topic/fiVU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录