def main(): path = os.getcwd() files = getters.get_all_files(path, []) for file in files: # file = file.replace(path + '/', '') if file.endswith('.mkv'): media_info = getters.get_mkvmerge_info_alt(file) audio_stream = [] try: for stream in media_info['tracks']: if stream['type'] == 'audio': audio_stream.append(stream) except KeyError: continue print(file) if len(audio_stream) > 1: logger.print_ok('Run mkvmerge on: ' + file) tmp_file = file.replace('.mkv', '_FIXED.mkv') cmd = "mkvmerge -o '" + tmp_file + "' -a 'jpn' -s 'und,eng' --default-track 0 --default-track 1" cmd += " --no-chapters --no-attachments --no-global-tags '" + file + "'" getters.run_terminal_cmd(cmd)
def main(): path = os.getcwd() files = getters.get_all_files(path, []) for file in files: # file = file.replace(path + '/', '') if file.endswith('.mkv'): media_info = getters.get_mkvmerge_info_alt(file) subtitle_stream = [] for stream in media_info['tracks']: if stream['type'] == 'subtitles': subtitle_stream.append(stream) subtitle = '' if len(subtitle_stream) == 1: # if audio tag is und --> set to eng if subtitle_stream[0]['properties']['language'] == 'und': subtitle += ' --edit track:s1 --set language=eng' subtitle += ' --edit track:s1 --set flag-default=1' if subtitle is not '': logger.print_ok('Run mkvpropedit on: ' + file) cmd = "mkvpropedit " + subtitle + " '" + file + "'" getters.run_terminal_cmd(cmd)
def ask_for_confirmation(question): answer = input(question + '? y or n? ') if answer == 'y': logger.print_ok(' -> renamed.') return True else: logger.print_err(' -> skipped!!') return False
def remove_empty_dirs(working_dir, excluded_dirs): logger.print_log('Checking for empty folders.. ') list_of_dirs = getters.get_all_dirs(working_dir, excluded_dirs) # reversed order: bottom up for d in list_of_dirs[::-1]: d = d.replace(working_dir + '/', '') if not os.listdir(d): logger.print_ok(' -> deleting empty directory: ' + d) send2trash(d)
def unzip(working_dir, archive): try: logger.print_log('Unzipping ' + archive) with ZipFile(archive) as zip_file: zip_file.extractall(working_dir) except: logger.print_err('Error while unzipping!') raise else: logger.print_ok(' -> finished. Removing ' + archive) send2trash(archive)
def remove_unneeded_files(dirname): logger.print_log('Checking for cleanup in folder: ' + dirname) files_to_delete = _get_filtered_file_list(dirname) for file in files_to_delete: logger.print_ok(' -> deleting ' + file) send2trash(dirname + '/' + file) if len(os.listdir(dirname)) < 2: return else: _remove_movie_featurettes(dirname)
def _remove_movie_featurettes(dirname): # Get every file from dir except the largest file cmd = "find '" + dirname + "' -type f -exec du -a {} +" pipes = "| sort -n | cut -f2- | sed '$d'" cmd_output = getters.get_output_from_terminal_cmd(cmd + pipes) cmd_output_filtered = regex_utils.remove_episodes_from_list(cmd_output) if cmd_output_filtered is []: return for file in cmd_output_filtered: logger.print_ok(' -> deleting ' + file.replace(dirname + '/', '')) send2trash(file)
def create_movie_folder(filename): if regex_utils.is_tv_episode(filename): logger.print_exit('Exit: ' + filename + ' is not a movie.') return if '/' in filename: logger.print_exit('Exit: Folder already exists for: ' + filename) return logger.print_log('Creating folder for: ' + filename) result = regex_utils.get_movie_name_with_year_in_parenthesis(filename) result = regex_utils.remove_special_chars(result) os.mkdir(result) shutil.move(filename, result) logger.print_ok(' -> created: ' + result)
def rename_dir(dirname, destination_path): if 'season' in dirname.lower(): logger.print_exit('Exit: ' + dirname + ' is not a movie folder.') return if regex_utils.is_movie_folder_already_named(dirname): logger.print_ok('Exit: Folder already named: ' + dirname) rename_movie(dirname, os.listdir(dirname)[0], destination_path) return logger.print_log('Directory: ' + dirname) dirname = _rename_special_chars('', dirname) dir_tmp = regex_utils.get_movie_name_with_year_in_parenthesis(dirname) if getters.ask_for_confirmation(' -> ' + dir_tmp): os.rename(dirname, dir_tmp) rename_movie(dir_tmp, os.listdir(dir_tmp)[0], destination_path)
def rename_movie(dirname, filename, destination_path): filename = _rename_special_chars(dirname + '/', filename) if regex_utils.is_movie_already_named(filename): logger.print_ok('Exit: Movie already named: ' + filename) shutil.move(dirname, destination_path) return logger.print_log('Movie: ' + filename) old_filename = filename stream_info = getters.get_mkvmerge_info(dirname + '/' + old_filename) filename = regex_utils.remove_special_chars(filename) result = mkv_utils.append_media_info_tags(filename, stream_info) result = _append_mkv_extension(result) if getters.ask_for_confirmation(' -> ' + result): os.rename(dirname + '/' + old_filename, dirname + '/' + result) shutil.move(dirname, destination_path)
def multiplex_episode(filename, destination_path): media_info = getters.get_mkvmerge_info(filename) logger.print_log('Multiplexing: ' + filename) if len(media_info['streams']) <= 2: logger.print_exit('No subtitle found.') return if len(media_info['streams']) <= 3: # TODO make this better only one get method needed? media_info = getters.get_mkvmerge_info_alt(filename) audio_stream, subtitle_stream = [], [] for stream in media_info['tracks']: if stream['type'] == 'audio': audio_stream.append(stream) if stream['type'] == 'subtitles': subtitle_stream.append(stream) audio, subtitle = '', '' if len(audio_stream) == 1: # if audio tag is und --> set to eng if audio_stream[0]['properties']['language'] == 'und': audio += ' --edit track:a1 --set language=eng' audio += ' --edit track:a1 --set flag-default=1' if len(subtitle_stream) == 1: # if audio tag is und --> set to eng if subtitle_stream[0]['properties']['language'] == 'und': subtitle += ' --edit track:s1 --set language=eng' subtitle += ' --edit track:s1 --set flag-default=1' if audio and subtitle is not '': logger.print_ok('Run mkvpropedit on: ' + filename) cmd = "mkvpropedit " + audio + subtitle + " '" + filename + "'" getters.run_terminal_cmd(cmd) if not regex_utils.is_tv_episode(filename): filename = regex_utils.get_name_until_year(filename) shutil.move(filename, filename.replace('#mkvmerge', '#output')) else: print('Run mkvmerge on: ' + filename) tmp_file = filename.replace('#mkvmerge', '#backup') # TODO instead of using 1 -> use index of first audio track cmd = "mkvmerge -o '" + tmp_file + "' -a 1 -s 'und,eng,ger' --default-track 0 --default-track 1" cmd += " --no-chapters --no-attachments --no-global-tags '" + filename + "'" getters.run_terminal_cmd(cmd) media_info_tmp = getters.get_mkvmerge_info(tmp_file) # TODO remove forced subtitle tracks - das muss ja schon vor mkvmerge passieren.... # TODO set eng sub as default subtitle_stream_tmp = [] for stream in media_info_tmp['streams']: if stream['codec_type'] == 'subtitle': subtitle_stream_tmp.append(stream) logger.print_ok('Run mkvpropedit on: ' + filename) cmd = "mkvpropedit --edit track:s1 --set flag-default=1 '" + tmp_file + "'" getters.run_terminal_cmd(cmd) # Remove everything after (YEAR) if the file is not a tv episode if not regex_utils.is_tv_episode(filename): filename = regex_utils.get_name_until_year(filename) tmp_file = regex_utils.get_name_until_year(tmp_file) # Move resulted tmp file to output shutil.move(tmp_file, filename.replace('#mkvmerge', '#output')) # Move original file to backup shutil.move(filename, filename.replace('#mkvmerge', '#backup'))