Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #9
0
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)
Beispiel #10
0
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)
Beispiel #11
0
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'))