def process_file(file: dict, temp_folder: str): logging.info(f"Processing file {file['input_file_path']}...") if not file.get('subtitle_file_path'): logging.info("Subtitle not found!") if file['input_file_path'] != file['output_file_path']: logging.info("Moving file...") check_and_create_directory(file['output_file_path']) shutil.move(file['input_file_path'], file['output_file_path']) else: logging.info("Subtitle found!") if temp_folder: if not os.path.exists(temp_folder): logging.info( f'Temp dir does not exists. Creating {temp_folder}...') os.mkdir(temp_folder) file['temp_file_path'] = f"{temp_folder}\\{file['input_filename']}" logging.info( f"Copying file from {file['input_file_path']} to {file['temp_file_path']}..." ) shutil.copyfile(file['input_file_path'], file['temp_file_path']) file[ 'temp_output_file_path'] = f"{file['temp_file_path'][:-4]}_output{file['temp_file_path'][-4:]}" mkv_input = file.get('temp_file_path') mkv_output = file.get('temp_output_file_path') if not mkv_input: mkv_input = file.get('input_file_path') if not mkv_output: mkv_output = file.get('output_file_path') if mkv_input == mkv_output: mkv_output = f"{mkv_input[:-4]}_output{mkv_input[-4:]}" mkv = MKVFile(mkv_input) if not check_subtitles(mkv): logging.info("Adding subtitle...") mkv.add_track(file['subtitle_file_path']) mkv.title = file['episode_name'] mkv.tracks[-1].language = 'por' mkv.mux(mkv_output) check_and_create_directory(file['output_file_path']) logging.info( f'Moving {mkv_output} to {file["output_file_path"]}...') shutil.move(mkv_output, file['output_file_path']) logging.info(f"Removing {file['subtitle_file_path']}...") os.remove(file['subtitle_file_path']) if file['input_file_path'] != file['output_file_path']: logging.info(f"Removing {file['input_file_path']}...") os.remove(file['input_file_path']) else: logging.info("Subtitle already added. Skipping...") if file.get('temp_file_path'): logging.info(f"Removing temp file {mkv_input}...") os.remove(mkv_input)
def mux_movie(movie_file, cover_file): """Generate MKV file with added movie poster Args: movie_file (str): Movie File Path cover_file (str): Image File Path """ sub_path = None full_file_name = movie_file.replace('\\', '/').split('/')[-1] file_name = '.'.join(full_file_name.split('.')[:-1]) file_directory = os.path.dirname(movie_file) output_filename = os.path.join(file_directory, file_name + '.mkv') temp_file_name = 'temp_' + file_name temp_file_path = os.path.join(file_directory, temp_file_name + '.mkv') if movie_file.endswith('.mkv'): mkv = MKVFile(movie_file) else: mkv = MKVFile() i = 0 while True: try: mkv.add_track(MKVTrack(movie_file, track_id=i)) i += 1 except: break mkv.title = file_name attachment = MKVAttachment(cover_file, name='cover.jpg') mkv.no_attachments() mkv.add_attachment(attachment) if ROOT_DIR_PATH != file_directory: sub_path = get_subtitle_file(movie_file) if sub_path: mkv.add_track(MKVTrack(sub_path, track_id=0)) mkv.mux(temp_file_path, silent=True) os.chmod(movie_file, stat.S_IWRITE) os.remove(movie_file) os.rename(temp_file_path, output_filename) if sub_path: # Delete SRT file After Mux os.remove(sub_path) # Check if directory has single file, move movie file outside and del dir if ROOT_DIR_PATH != file_directory: if len(os.listdir(file_directory)) == 1: parent_dir = os.path.dirname(file_directory) os.rename(output_filename, os.path.join(parent_dir, file_name + '.mkv')) os.rmdir(file_directory)