def do_encode(filtered): """Compression with x264""" print("Qpfile generating") vrf.gk(SRC_CUT, QPFILE) print("\n\n\nVideo encode") vrf.encode(filtered, X264, OUTPUT, **X264_ARGS) print("\n\n\nAudio extraction") eac3to_args = ['eac3to', SRC, '2:', A_SRC, '-log=NUL'] vrf.subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8') print("\n\n\nAudio cut") eztrim(SRC_CLIP, (FRAME_START, FRAME_END), A_SRC, mkvextract_path="mkvextract") print("\n\n\nAudio encode") qaac_args = ['qaac64', A_SRC_CUT, '-V', '127', '--no-delay', '-o', A_ENC_CUT] vrf.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, language="jpn", default_track=True)) mkv.chapters(CHAPTER, "jpn") mkv.mux(OUTPUT_FINAL)
def do_encode(filtered): """Compression with x264""" print('Qpfile generating') vrf.gk(SRC_CUT, QPFILE) print('\n\n\nVideo encode') vrf.encode(filtered, X264, OUTPUT, **X264_ARGS) print('\n\n\nAudio extraction') eac3to_args = ['eac3to', SRC, '2:', A_SRC, '-log=NUL'] vrf.subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8') print('\n\n\nAudio cut') eztrim(SRC_CLIP, (FRAME_START, FRAME_END), A_SRC, mkvextract_path='mkvextract') print('\n\n\nAudio encode') flac_args = ['flac', A_SRC_CUT, '-8'] vrf.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_CUT[:-3] + 'flac', language='jpn', default_track=True)) mkv.mux(OUTPUT_FINAL)
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.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') qaac_args = [ 'qaac64', A_SRC_CUT, '-V', '127', '--no-delay', '-o', A_ENC_CUT ] 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, language='jpn', default_track=True)) mkv.chapters(CHAPTER, 'jpn') mkv.mux(OUTPUT_FINAL)
def do_encode(filtered): """Compression with x264""" print('Qpfile generating') vdf.gk(JPBD.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_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.mux(JPBD.output_final)
def pack(self, path): mkv = MKVFile() mkv.add_track(MKVTrack(path + self.file_name, track_id=0)) mkv.add_track(MKVTrack(path + self.file_name, track_id=1)) for subtitle in self.subtitles: mkv.add_track(subtitle.to_mkv_track(path)) output = path + self.file_name_mkv logger.info("inicia el empaquetado a '{}'".format(self.file_name)) mkv.mux(output, silent=False) return output
def add_subtitle(self, set_default=True): """ Muxes the subtitle in the MKV file and sets it as default if the flag is set appropriately (default True) Parameters ---------- set_default : bool wether to set the muxed subtitle as default subtitle track. Default is `True` """ stats = self._get_stats() subs = self.download_subtitles() movies = list() for idx, _ in enumerate(stats): movies.append({**stats[idx], **subs[idx]}) for movie in movies: if not movie["has_lang"]: sub_track = MKVTrack(movie["sub"]) sub_track.language = self.os_language sub_track.default_track = True if set_default else False mkv_file = MKVFile(movie["file_path"].absolute()) mkv_file.add_track(sub_track) # TODO Handle output folder or file replace config mkv_file.mux(movie["file_path"].stem + "_w_sub.mkv") return True
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')
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)
def addAudio(source, ext): for file in glob.glob("*." + ext): t = MKVTrack(file) lang = file.split('.')[0] t.track_name = lang t.language = langToShort(lang) print("Adding AudioTrack") source.add_track(t)
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)
def addSubs(source, ext): for file in glob.glob("*." + ext): t = MKVTrack(file) lang = file.split('.')[0] if "_" in lang: lang = lang.split('_')[0] else: lang = lang t.track_name = shortToLong(lang) t.language = lang print("Adding new SUB") source.add_track(t)
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.')
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}")
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