Esempio n. 1
0
def do_encode(filtered):
    """Compression with x264"""
    print('Qpfile generating')
    src_cut = JPBD.src_cut[:OPSTART] + JPBD.src_cut[
        OPSTART + 2:OPSTART + 2160] + JPBD.src_cut[OPEND + 1:]
    vdf.gk(src_cut, JPBD.qpfile)

    print('\n\n\nVideo encoding')
    vdf.encode(filtered, X264, JPBD.output, **X264_ARGS)

    print('\n\n\nAudio extraction')
    track_01 = USBD.a_src + '_eng.w64'
    track_02 = USBD.a_src + '_jpn.w64'
    eac3to_args = [
        'eac3to', USBD.src, '3:', track_01, '4:', track_02, '-log=NUL'
    ]
    vdf.subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')
    mka = MKVFile()
    mka.add_track(MKVTrack(track_01, 0))
    mka.add_track(MKVTrack(track_02, 0))
    mka.mux(USBD.a_src)

    print('\n\n\nAudio cutting')
    eztrim(
        USBD.src_clip,
        [(USBD.frame_start, USBD.frame_start + OPSTART),
         (USBD.frame_start + OPSTART + 2, USBD.frame_start + OPSTART + 2160),
         (USBD.frame_start + OPEND + 1, USBD.frame_end)],
        USBD.a_src,
        mkvextract_path='mkvextract')

    print('\n\n\nAudio encoding')
    for i in range(1, len(mka.tracks) + 1):
        qaac_args = [
            'qaac64',
            USBD.a_src_cut.format(i), '-V', '127', '--no-delay', '-o',
            USBD.a_enc_cut.format(i)
        ]
        vdf.subprocess.run(qaac_args, text=True, check=True, encoding='utf-8')

    print('\nFinal muxing')
    mkv = MKVFile()
    mkv.add_track(MKVTrack(JPBD.output, language='jpn', default_track=True))
    mkv.add_track(
        MKVTrack(USBD.a_enc_cut.format(2), language='jpn', default_track=True))
    mkv.add_track(
        MKVTrack(USBD.a_enc_cut.format(1), language='eng',
                 default_track=False))
    mkv.chapters(JPBD.chapter, 'jpn')
    mkv.mux(JPBD.output_final)
Esempio n. 2
0
def do_encode(filtered):
    """Compression with x264"""
    print('\n\n\nVideo encoding')
    vdf.encode(filtered,
               X264,
               OUTPUT,
               True,
               **X264_ARGS,
               frames=filtered.num_frames)

    print('\n\n\nAudio extracting')
    mka = MKVFile()
    mka.add_track(MKVTrack(VIDEO_FILES[1], 1))
    mka.mux(AUDIO_SRC)

    print('\n\n\nAudio cutting')
    eztrim(CLIPS_SRC[1], (0, 1),
           AUDIO_SRC,
           outfile=NAME + '_a',
           ffmpeg_path='')
    eztrim(CLIPS_SRC[1], (0, 0),
           AUDIO_SRC,
           outfile=NAME + '_b',
           ffmpeg_path='')

    print('\nFinal muxing')
    mkv_args = [
        'mkvmerge', '-o', NAME + '.mkv', '--language', '0:jpn', OUTPUT,
        '--language', '0:jpn', NAME + '_a' + '.mka', '+', NAME + '_b' + '.mka'
    ]
    vdf.subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')
Esempio n. 3
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)
Esempio n. 4
0
 def add_subtitles(self, subtitles_text: str, language):
     self.logger.debug('Adding subtitles.')
     track = self.get_subtitles_track(language)
     fixed_subtitles_path = self.folder.joinpath('subtitles-fixed.txt')
     with fixed_subtitles_path.open(
             'w', encoding='utf-8') as fixed_subtitles_file:
         fixed_subtitles_file.write(subtitles_text)
     fixed_track = MKVTrack(fixed_subtitles_path.__str__())
     fixed_track.track_name = track.track_name + '-fixed'
     fixed_track.language = track.language
     self.mkv_file.add_track(fixed_track)
     output_name = Path(self.path.stem + '-fixed').with_suffix(
         self.path.suffix)
     output_path = self.path.with_name(output_name)
     self.mkv_file.mux(output_path.__str__())
     os.remove(fixed_subtitles_file.__str__())
     self.logger.debug('Successfully added subtitles.')
Esempio n. 5
0
def do_encode(clip: vs.VideoNode)-> None:
    """Compression with x264"""
    print('\n\n\nVideo encoding')
    x265_args = [
        X265, "--y4m", "--frames", f"{clip.num_frames}", "--sar", "1", "--output-depth", "10",
        "--colormatrix", "bt709", "--colorprim", "bt709", "--transfer", "bt709", "--range", "limited",
        "--min-luma", str(16<<2), "--max-luma", str(235<<2),
        "--fps", f"{clip.fps_num}/{clip.fps_den}",
        "-o", JPBD.output, "-",
        "--frame-threads", "16",
        "--no-sao", "--fades",
        "--preset", "slower",
        "--crf", "14.5", "--qcomp", "0.72",
        "--bframes", "16",
        "--psy-rd", "2.0", "--psy-rdoq", "1.0",
        "--deblock", "-1:-1",
        "--rc-lookahead", "96",
        "--min-keyint", "23", "--keyint", "360",
        "--aq-mode", "3", "--aq-strength", "1.0"
        ]
    print("Encoder command: ", " ".join(x265_args), "\n")
    process = subprocess.Popen(x265_args, stdin=subprocess.PIPE)
    clip.output(process.stdin, y4m=True, progress_update=lambda value, endvalue:
                print(f"\rVapourSynth: {value}/{endvalue} ~ {100 * value // endvalue}% || Encoder: ", end=""))
    process.communicate()

    print('\n\n\nAudio extraction')
    mka = MKVFile()
    mka.add_track(MKVTrack(JPBD.src, 1))
    mka.mux(JPBD.a_src)

    print('\n\n\nAudio cutting')
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src, mkvextract_path='mkvextract')

    print('\n\n\nAudio encoding')
    qaac_args = ['qaac64', JPBD.a_src_cut.format(1), '-V', '127', '--no-delay', '-o', JPBD.a_enc_cut.format(1)]
    subprocess.run(qaac_args, text=True, check=True, encoding='utf-8')

    print('\nFinal muxing')
    mkv = MKVFile()
    mkv.add_track(MKVTrack(JPBD.output, language='jpn', default_track=True))
    mkv.add_track(MKVTrack(JPBD.a_enc_cut.format(1), language='jpn', default_track=True))
    mkv.chapters(JPBD.chapter, 'jpn')
    mkv.mux(JPBD.output_final)
Esempio n. 6
0
def do_encode(filtered):
    """Compression with x264"""
    print('Qpfile generating')
    vdf.gk(SRC_CLIP, QPFILE)

    print('\n\n\nVideo encode')
    vdf.encode(filtered, X264, OUTPUT, **X264_ARGS)

    print('\n\n\nAudio extraction')
    eac3to_args = ['eac3to', SRC, '2:', A_SRC, '-log=NUL']
    vdf.subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio encode')
    flac_args = ['flac', A_SRC, '-8']
    vdf.subprocess.run(flac_args, text=True, check=True, encoding='utf-8')

    print('\nFinal mux')
    mkv = MKVFile()
    mkv.add_track(MKVTrack(OUTPUT, language='jpn', default_track=True))
    mkv.add_track(MKVTrack(A_SRC_ENC, language='jpn', default_track=True))
    mkv.mux(OUTPUT_FINAL)
Esempio n. 7
0
def do_encode(filtered):
    """Compression with x264"""
    print('Qpfile generating')
    vdf.gk(SRC_CUT, QPFILE)

    print('\n\n\nVideo encode')
    vdf.encode(filtered, X264, OUTPUT, **X264_ARGS)

    print('\n\n\nAudio extraction')
    mka = MKVFile()
    mka.add_track(MKVTrack(SRC, 1))
    mka.add_track(MKVTrack(SRC, 2))
    mka.mux(A_SRC)

    print('\n\n\nAudio cut')
    eztrim(SRC_CLIP, (FRAME_START, FRAME_END),
           A_SRC,
           mkvextract_path='mkvextract')

    print('\n\n\nAudio encode')
    for i in range(1, len(mka.tracks) + 1):
        qaac_args = [
            'qaac64',
            A_SRC_CUT.format(i), '-V', '127', '--no-delay', '-o',
            A_ENC_CUT.format(i)
        ]
        vdf.subprocess.run(qaac_args, text=True, check=True, encoding='utf-8')

    print('\nFinal mux')
    mkv = MKVFile()
    mkv.add_track(MKVTrack(OUTPUT, language='jpn', default_track=True))
    mkv.add_track(
        MKVTrack(A_ENC_CUT.format(1), language='jpn', default_track=True))
    mkv.add_track(
        MKVTrack(A_ENC_CUT.format(2), track_name='Commentary', language='jpn'))
    mkv.chapters(CHAPTER, 'jpn')
    mkv.mux(OUTPUT_FINAL)
Esempio n. 8
0
def add_subtitle_tracks_to_mkv_file(mkv_file, subtitles):
  for subtitle in subtitles.keys():
    language = subtitles.get(subtitle)
    subtitle_track = MKVTrack(subtitle, language=language)
    mkv_file.add_track(subtitle_track)
    LOGGER.info(f"Added subtitle {subtitle} with language {language} to mkv file {mkv_file.title}")
Esempio n. 9
0
 def to_mkv_track(self, path):
     track = MKVTrack(path + self.file_name,
                      language=self.lang_ISO_639_2,
                      default_track=self.default,
                      track_name=self.data.title)
     return track