Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)