Exemple #1
0
def do_encode(clip: vs.VideoNode)-> None:
    """Compression with x26X"""
    if not os.path.exists(JPBD.output):
        print('\n\n\nVideo encoding')
        vdf.encode(clip, 'x264', JPBD.output, **X264_ARGS, frames=clip.num_frames)

    if not os.path.exists(JPBD.a_src):
        print('\n\n\nAudio extraction')
        eac3to_args = ['eac3to', JPBD.src, '2:', JPBD.a_src, '-log=NUL']
        subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    if not os.path.exists(JPBD.a_src_cut.format(1)):
        print('\n\n\nAudio cutting')
        eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src, JPBD.a_src_cut.format(1))

    if not os.path.exists(JPBD.a_enc_cut.format(1)):
        print('\n\n\nAudio encoding')
        qaac_args = ['ffmpeg', '-i', JPBD.a_src_cut.format(1), '-compression_level', '12',
                     '-lpc_type', 'cholesky', '-lpc_passes', '3', '-exact_rice_parameters', '1',
                     JPBD.a_enc_cut.format(1)]
        subprocess.run(qaac_args, text=True, check=True, encoding='utf-8')

    if not os.path.exists(JPBD.output_final):
        print('\nFinal muxing')
        mkv_args = ['mkvmerge', '-o', JPBD.output_final,
                    '--track-name', '0:AVC BDRip by Vardë@Raws-Maji', '--language', '0:jpn', JPBD.output,
                    '--track-name', '0:FLAC 2.0', '--language', '0:jpn', JPBD.a_enc_cut.format(1)]
        subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')

    # Clean up
    files = [JPBD.a_src, JPBD.a_src_cut.format(1), JPBD.a_enc_cut.format(1)]
    for file in files:
        if os.path.exists(file):
            os.remove(file)
Exemple #2
0
def do_encode(clip: vs.VideoNode)-> None:
    """Compression with x265"""
    print('\n\n\nVideo encoding')
    if not os.path.exists(JPBD.output):
        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", "4",
            "--no-sao", "--fades",
            "--preset", "slower",
            "--crf", "15", "--qcomp", "0.70",
            "--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')
    eac3to_args = ['eac3to', JPBD.src, '2:', JPBD.a_src, '-log=NUL']
    subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio cutting')
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src, JPBD.a_src_cut.format(1))

    print('\n\n\nAudio encoding')
    qaac_args = ['qaac', 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')

    ffprobe_args = ['ffprobe', '-loglevel', 'quiet', '-show_entries', 'format_tags=encoder', '-print_format', 'default=nokey=1:noprint_wrappers=1', JPBD.a_enc_cut.format(1)]
    encoder_name = subprocess.check_output(ffprobe_args, shell=True, encoding='utf-8')
    f = open("tags_aac.xml", 'w')
    f.writelines(['<?xml version="1.0"?>', '<Tags>', '<Tag>', '<Targets>', '</Targets>',
                  '<Simple>', '<Name>ENCODER</Name>', f'<String>{encoder_name}</String>', '</Simple>',
                  '</Tag>', '</Tags>'])
    f.close()

    print('\nFinal muxing')
    mkv_args = ['mkvmerge', '-o', JPBD.output_final,
                '--timestamps', '0:symphogearg_12_timecode.txt',
                '--track-name', '0:HEVC BDRip by Vardë@Kodoku-no-Kawarini', '--language', '0:jpn', JPBD.output,
                '--tags', '0:tags_aac.xml', '--track-name', '0:AAC 2.0', '--language', '0:jpn', JPBD.a_enc_cut.format(1),
                '--chapter-language', 'fra', '--chapters', JPBD.chapter]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')

    # Clean up
    files = [JPBD.a_src, JPBD.a_src_cut.format(1),
             JPBD.a_enc_cut.format(1), 'tags_aac.xml']
    for file in files:
        if os.path.exists(file):
            os.remove(file)
Exemple #3
0
def do_encode(clip: vs.VideoNode)-> None:
    """Compression with x26X"""
    print('\n\n\nVideo encoding')
    vdf.encode(clip, 'x264', JPBD.output, **X264_ARGS, frames=clip.num_frames)

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

    print('\n\n\nAudio cutting')
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src, JPBD.a_src_cut.format(1))

    print('\n\n\nAudio encoding')
    qaac_args = ['qaac', 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')

    ffprobe_args = ['ffprobe', '-loglevel', 'quiet', '-show_entries', 'format_tags=encoder', '-print_format', 'default=nokey=1:noprint_wrappers=1', JPBD.a_enc_cut.format(1)]
    encoder_name = subprocess.check_output(ffprobe_args, shell=True, encoding='utf-8')
    f = open("tags_aac.xml", 'w')
    f.writelines(['<?xml version="1.0"?>', '<Tags>', '<Tag>', '<Targets>', '</Targets>',
                  '<Simple>', '<Name>ENCODER</Name>', f'<String>{encoder_name}</String>', '</Simple>',
                  '</Tag>', '</Tags>'])
    f.close()

    print('\nFinal muxing')
    mkv_args = ['mkvmerge', '-o', JPBD.output_final,
                '--track-name', '0:AVC BDRip par Vardë@Owlolf', '--language', '0:jpn', JPBD.output,
                '--tags', '0:tags_aac.xml', '--track-name', '0:AAC 2.0', '--language', '0:jpn', JPBD.a_enc_cut.format(1)]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')
    _ = [os.remove(f) for f in [JPBD.a_src, JPBD.a_src_cut.format(1),
                                JPBD.a_enc_cut.format(1), 'tags_aac.xml']]
Exemple #4
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.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)
Exemple #5
0
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)
Exemple #6
0
def do_encode(clip: vs.VideoNode) -> vs.VideoNode:
    """Compression with x26X"""

    if not os.path.isfile(JPBD.output):
        print('\n\n\nVideo encoding')
        bits = clip.format.bits_per_sample
        x265_cmd = f'x265 -o {JPBD.output} - --y4m' + ' '
        x265_cmd += f'--csv {JPBD.name}_log_x265.csv --csv-log-level 2' + ' '
        x265_cmd += '--preset slower' + ' '
        x265_cmd += f'--frames {clip.num_frames} --fps {clip.fps_num}/{clip.fps_den} --output-depth {bits}' + ' '
        x265_cmd += '--rd 3 --no-rect --no-amp --rskip 1 --tu-intra-depth 2 --tu-inter-depth 2 --tskip' + ' '
        x265_cmd += '--merange 48 --weightb' + ' '
        x265_cmd += '--no-strong-intra-smoothing' + ' '
        x265_cmd += '--psy-rd 2.0 --psy-rdoq 1.5 --no-open-gop --keyint 240 --min-keyint 23 --scenecut 40 --rc-lookahead 60 --bframes 16' + ' '
        x265_cmd += '--crf 15 --aq-mode 3 --aq-strength 0.85 --cbqpoffs -2 --crqpoffs -2 --qcomp 0.70' + ' '
        x265_cmd += '--deblock=-1:-1 --no-sao --no-sao-non-deblock' + ' '
        x265_cmd += f'--sar 1 --range limited --colorprim 1 --transfer 1 --colormatrix 1 --min-luma {str(16 << (bits - 8))} --max-luma {str(235 << (bits - 8))}'

        print("Encoder command: ", " ".join(shlex.split(x265_cmd)), "\n")
        process = subprocess.Popen(shlex.split(x265_cmd), 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')
    eac3to_args = ['eac3to', JPBD.src, '2:', JPBD.a_src.format(1), '3:', JPBD.a_src.format(2), '-log=NUL']
    subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio cutting')
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src.format(1), JPBD.a_src_cut.format(1))
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src.format(2), JPBD.a_src_cut.format(2))
Exemple #7
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')
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
def do_encode(clip):
    """Compression with x26X"""
    if not os.path.isfile(JPBD.output):
        print('\n\n\nVideo encoding')
        bits = clip.format.bits_per_sample
        x265_cmd = f'x265 -o {JPBD.output} - --y4m' + ' '
        x265_cmd += f'--csv {JPBD.name}_log_x265.csv --csv-log-level 2' + ' '
        x265_cmd += '--preset slower' + ' '
        x265_cmd += f'--frames {clip.num_frames} --fps {clip.fps_num}/{clip.fps_den} --output-depth {bits}' + ' '
        x265_cmd += '--rd 3 --no-rect --no-amp --rskip 1 --tu-intra-depth 2 --tu-inter-depth 2 --tskip' + ' '
        x265_cmd += '--merange 48 --weightb' + ' '
        x265_cmd += '--no-strong-intra-smoothing' + ' '
        x265_cmd += '--psy-rd 2.0 --psy-rdoq 1.5 --no-open-gop --keyint 240 --min-keyint 23 --scenecut 60 --rc-lookahead 60 --bframes 16' + ' '
        x265_cmd += '--crf 15 --aq-mode 3 --aq-strength 0.90 --cbqpoffs -2 --crqpoffs -2 --qcomp 0.70' + ' '
        x265_cmd += '--deblock=-2:-2 --no-sao --no-sao-non-deblock' + ' '
        x265_cmd += f'--sar 1 --range limited --colorprim 1 --transfer 1 --colormatrix 1 --min-luma {str(16<<(bits - 8))} --max-luma {str(235<<(bits - 8))}'# + ' '

        print("Encoder command: ", " ".join(shlex.split(x265_cmd)), "\n")
        process = subprocess.Popen(shlex.split(x265_cmd), 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')
    eac3to_args = ['eac3to', JPBD.src, '3:', JPBD.a_src.format(1), '4:', JPBD.a_src.format(2), '-log=NUL']
    subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio cutting')
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src.format(1), JPBD.a_src_cut.format(1))
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src.format(2), JPBD.a_src_cut.format(2))

    print('\n\n\nAudio encoding')
    qaac_args = ['qaac', 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')
    qaac_args = ['qaac', JPBD.a_src_cut.format(2), '-V', '127', '--no-delay', '-o', JPBD.a_enc_cut.format(2)]
    subprocess.run(qaac_args, text=True, check=True, encoding='utf-8')

    ffprobe_args = ['ffprobe', '-loglevel', 'quiet', '-show_entries', 'format_tags=encoder', '-print_format', 'default=nokey=1:noprint_wrappers=1', JPBD.a_enc_cut.format(1)]
    encoder_name = subprocess.check_output(ffprobe_args, shell=True, encoding='utf-8')
    f = open("tags_aac.xml", 'w')
    f.writelines(['<?xml version="1.0"?>', '<Tags>', '<Tag>', '<Targets>', '</Targets>',
                  '<Simple>', '<Name>ENCODER</Name>', f'<String>{encoder_name}</String>', '</Simple>',
                  '</Tag>', '</Tags>'])
    f.close()

    print('\nFinal muxing')
    mkv_args = ['mkvmerge', '-o', JPBD.output_final,
                '--track-name', '0:HEVC BDRip by Vardë@Raws-Maji', '--language', '0:jpn', JPBD.output,
                '--tags', '0:tags_aac.xml', '--track-name', '0:AAC 2.0', '--language', '0:jpn', JPBD.a_enc_cut.format(1),
                '--tags', '0:tags_aac.xml', '--track-name', '0:AAC 2.0 Commentary', '--language', '0:jpn', JPBD.a_enc_cut.format(2),
                '--chapter-language', 'jpn', '--chapters', JPBD.chapter]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')

    # Clean up
    files = [JPBD.a_src, JPBD.a_src_cut.format(1),
             JPBD.a_enc_cut.format(1), 'tags_aac.xml']
    for file in files:
        if os.path.exists(file):
            os.remove(file)
Exemple #11
0
def do_encode(clip: vs.VideoNode) -> None:
    """Compression with x26X"""
    print('\n\n\nVideo encoding')
    print('\n\n\nVideo encoding')
    x265_cmd = f'x265 -o {JPBD.output} - --y4m' + ' '
    x265_cmd += f'--csv {JPBD.name}_log_x265.csv --csv-log-level 2' + ' '
    x265_cmd += '--frame-threads 8 --pmode --pme --preset slower' + ' '
    x265_cmd += f'--frames {clip.num_frames} --fps {clip.fps_num/clip.fps_den} --output-depth 10' + ' '
    x265_cmd += '--rd 3 --no-rect --no-amp --rskip 1 --tu-intra-depth 2 --tu-inter-depth 2 --tskip' + ' '
    x265_cmd += '--merange 48 --weightb' + ' '
    x265_cmd += '--no-strong-intra-smoothing' + ' '
    x265_cmd += '--psy-rd 2.0 --psy-rdoq 1.0 --no-open-gop --keyint 360 --min-keyint 12 --scenecut 45 --rc-lookahead 120 --bframes 16' + ' '
    x265_cmd += '--crf 15 --aq-mode 3 --aq-strength 0.85 --qcomp 0.70' + ' '
    x265_cmd += '--deblock=-1:-1 --no-sao --no-sao-non-deblock' + ' '
    x265_cmd += f'--sar 1 --range limited --colorprim 1 --transfer 1 --colormatrix 1 --min-luma {str(16<<2)} --max-luma {str(235<<2)}'  # + ' '

    print("Encoder command: ", " ".join(shlex.split(x265_cmd)), "\n")
    process = subprocess.Popen(shlex.split(x265_cmd), 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')
    eac3to_args = ['eac3to', JPBD.src, '2:', JPBD.a_src, '-log=NUL']
    subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio cutting')
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src,
           JPBD.a_src_cut.format(1))

    print('\n\n\nAudio encoding')
    ffmpeg_args = [
        'ffmpeg', '-i',
        JPBD.a_src_cut.format(1), '-compression_level', '12', '-lpc_type',
        'cholesky', '-lpc_passes', '3', '-exact_rice_parameters', '1',
        JPBD.a_enc_cut.format(1)
    ]
    subprocess.run(ffmpeg_args, text=True, check=True, encoding='utf-8')

    print('\nFinal muxing')
    mkv_args = [
        'mkvmerge', '-o', JPBD.output_final, '--track-name',
        '0:HEVC BDRip by Vardë@Raws-Maji', '--language', '0:jpn', JPBD.output,
        '--track-name', '0:FLAC 2.0', '--language', '0:jpn',
        JPBD.a_enc_cut.format(1)
    ]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')

    # Clean up
    files = [JPBD.a_src, JPBD.a_src_cut.format(1), JPBD.a_enc_cut.format(1)]
    for file in files:
        if os.path.exists(file):
            os.remove(file)
Exemple #12
0
    def _audio_getter(self: EncodeGoBrrr) -> None:
        assert self.file.a_src.format(1)
        if not Path(self.file.a_src.format(1)).exists():
            BasicTool(
                'mkvextract',
                [self.file.src, 'tracks', f'1:{self.file.a_src.format(1)}'])

        assert self.file.a_src_cut.format(1)
        if not Path(self.file.a_src_cut.format(1)).exists():
            eztrim(self.file.clip,
                   (self.file.frame_start, self.file.frame_end),
                   self.file.a_src.format(1), self.file.a_src_cut.format(1))
Exemple #13
0
    def trim_audio(self, ftrim: Optional[acsuite.types.Trim] = None) -> str:
        streams = sorted(self.src.audio_streams(),
                         key=lambda s: s.stream_index)
        if len(streams) == 0:
            return ""
        trims = self.src.audio_src()
        ffmpeg = acsuite.ffmpeg.FFmpegAudio()

        tlist: List[str] = []
        for t in trims:
            audio_cut = acsuite.eztrim(
                t.path,
                t.trim or (0, None),
                ref_clip=self.src.audio_ref(),
                outfile=get_temp_filename(prefix=AUDIO_PFX + "cut_",
                                          suffix=".mka"),
                streams=[s.stream_index for s in streams])[0]
            self.cleanup.add(audio_cut)
            tlist.append(audio_cut)

        if len(tlist) > 1:
            audio_cut = ffmpeg.concat(*tlist)
            self.cleanup.add(audio_cut)

        if ftrim:
            audio_cut = acsuite.eztrim(audio_cut,
                                       ftrim,
                                       ref_clip=self.src.source(),
                                       outfile=get_temp_filename(
                                           prefix=AUDIO_PFX + "fcut_",
                                           suffix=".mka"))[0]
            self.cleanup.add(audio_cut)

        if len(streams) > 1:
            splits = [
                get_temp_filename(prefix=AUDIO_PFX + "split_", suffix=".mka")
                for _ in range(0, len(streams))
            ]
            ffmpeg.split(audio_cut, splits)
            self.cleanup |= set(splits)
            encode = [
                streams[i].codec.encode_audio(f) for i, f in enumerate(splits)
            ]
            self.cleanup |= set(encode)
            audio_cut = get_temp_filename(prefix=AUDIO_PFX + "join_",
                                          suffix=".mka")
            ffmpeg.join(audio_cut, *encode)
        else:
            audio_cut = streams[0].codec.encode_audio(audio_cut)

        self.cleanup.add(audio_cut)

        return audio_cut
Exemple #14
0
    def _audio_getter(self: EncodeGoBrrr):
        assert self.file.a_src
        if not Path(self.file.a_src).exists():
            BasicTool('eac3to', [self.file.src, '2:', self.file.a_src, '-log=NUL'])

        assert self.file.a_src_cut
        if not Path(self.file.a_src_cut).exists():
            eztrim(self.file.clip, (self.file.frame_start, self.file.frame_end), self.file.a_src, self.file.a_src_cut)

        assert self.file.a_enc_cut
        if not Path(self.file.a_enc_cut).exists():
            AudioEncoder('ffmpeg', Path('love_live_common/flac_settings'), self.file)
Exemple #15
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)
Exemple #16
0
def do_encode(clip):
    """Compression with x26X"""
    if not os.path.isfile(WEB.output):
        print('\n\n\nVideo encoding')
        bits = clip.format.bits_per_sample
        x265_cmd = f'x265 -o {WEB.output} - --y4m' + ' '
        x265_cmd += f'--csv {WEB.name}_log_x265.csv --csv-log-level 2' + ' '
        x265_cmd += '--preset slower' + ' '
        x265_cmd += f'--frames {clip.num_frames} --fps {clip.fps_num}/{clip.fps_den} --output-depth {bits}' + ' '
        x265_cmd += '--rd 3 --no-rect --no-amp --rskip 1 --tu-intra-depth 2 --tu-inter-depth 2 --tskip' + ' '
        x265_cmd += '--merange 48 --weightb' + ' '
        # x265_cmd += '--no-strong-intra-smoothing' + ' '
        x265_cmd += '--psy-rd 1.85 --psy-rdoq 1.5 --no-open-gop --keyint 240 --min-keyint 23 --scenecut 40 --rc-lookahead 48 --bframes 16' + ' '
        x265_cmd += '--crf 16 --aq-mode 3 --aq-strength 0.85 --cbqpoffs -2 --crqpoffs -2 --qcomp 0.70' + ' '
        x265_cmd += '--deblock=1:-1 --no-sao --no-sao-non-deblock' + ' '
        x265_cmd += f'--sar 1 --range limited --colorprim 1 --transfer 1 --colormatrix 1 --min-luma {str(16<<(bits - 8))} --max-luma {str(235<<(bits - 8))}'

        print("Encoder command: ", " ".join(shlex.split(x265_cmd)), "\n")
        process = subprocess.Popen(shlex.split(x265_cmd),
                                   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')
    mkv_args = ['mkvextract', WEB.src, 'tracks', f'1:{WEB.a_src}']
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio cutting')
    eztrim(WEB.src_clip, (WEB.frame_start, WEB.frame_end), WEB.a_src,
           WEB.a_src_cut.format(1))

    print('\nFinal muxing')
    mkv_args = [
        'mkvmerge', '-o', WEB.output_final, '--track-name',
        '0:HEVC WEBRip by Vardë@Natsumi-no-Sekai', '--language', '0:jpn',
        WEB.output, '--track-name', '0:AAC 2.0', '--language', '0:jpn',
        WEB.a_src_cut.format(1)
    ]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')
Exemple #17
0
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')
    eac3to_args = ['eac3to', JPBD.src, '2:', JPBD.a_src, '-log=NUL']
    subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio cutting')
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src,
           JPBD.a_src_cut.format(1))

    print('\n\n\nAudio encoding')
    qaac_args = [
        'qaac',
        JPBD.a_src_cut.format(1), '-V', '127', '--no-delay', '-o',
        JPBD.a_enc_cut.format(1) + '.m4a'
    ]
    subprocess.run(qaac_args, text=True, check=True, encoding='utf-8')
    opus_args = [
        'opusenc', '--bitrate', '192',
        JPBD.a_src_cut.format(1),
        JPBD.a_enc_cut.format(1) + '.opus'
    ]
    subprocess.run(opus_args, text=True, check=True, encoding='utf-8')

    print('\nFinal muxing')
    mkv_args = [
        'mkvmerge', '-o', JPBD.name + '_aac.mkv', '--language', '0:jpn',
        JPBD.output, '--language', '0:jpn',
        JPBD.a_enc_cut.format(1) + '.m4a'
    ]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')
    mkv_args = [
        'mkvmerge', '-o', JPBD.name + '_opus.mkv', '--language', '0:jpn',
        JPBD.output, '--language', '0:jpn',
        JPBD.a_enc_cut.format(1) + '.opus'
    ]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')
Exemple #18
0
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')
    eac3to_args = ['eac3to', JPBD.src, '2:', JPBD.a_src, '-log=NUL']
    subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio cutting')
    eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end), JPBD.a_src,
           JPBD.a_src_cut.format(1))

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

    ffprobe_args = [
        'ffprobe', '-loglevel', 'quiet', '-show_entries',
        'format_tags=encoder', '-print_format',
        'default=nokey=1:noprint_wrappers=1',
        JPBD.a_enc_cut.format(1) + '.m4a'
    ]
    encoder_name = subprocess.check_output(ffprobe_args,
                                           shell=True,
                                           encoding='utf-8')
    f = open("tags_aac.xml", 'w')
    f.writelines([
        '<?xml version="1.0"?>', '<Tags>', '<Tag>', '<Targets>', '</Targets>',
        '<Simple>', '<Name>ENCODER</Name>', f'<String>{encoder_name}</String>',
        '</Simple>', '</Tag>', '</Tags>'
    ])
    f.close()

    opus_args = [
        'opusenc', '--bitrate', '192',
        JPBD.a_src_cut.format(1),
        JPBD.a_enc_cut.format(1) + '.opus'
    ]
    subprocess.run(opus_args, text=True, check=True, encoding='utf-8')

    opus_args = ['opusenc', '-V']
    encoder_name = subprocess.check_output(opus_args,
                                           shell=True,
                                           encoding='utf-8').splitlines()[0]

    f = open("tags_opus.xml", 'w')
    f.writelines([
        '<?xml version="1.0"?>', '<Tags>', '<Tag>', '<Targets>', '</Targets>',
        '<Simple>', '<Name>ENCODER</Name>',
        f'<String>{encoder_name}, VBR 192k</String>', '</Simple>', '</Tag>',
        '</Tags>'
    ])
    f.close()

    print('\nFinal muxing')
    mkv_args = [
        'mkvmerge', '-o', JPBD.name + '_aac.mkv', '--language', '0:jpn',
        JPBD.output, '--tags', '0:tags_aac.xml', '--language', '0:jpn',
        JPBD.a_enc_cut.format(1) + '.m4a'
    ]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')
    mkv_args = [
        'mkvmerge', '-o', JPBD.name + '_opus.mkv', '--language', '0:jpn',
        JPBD.output, '--tags', '0:tags_opus.xml', '--language', '0:jpn',
        JPBD.a_enc_cut.format(1) + '.opus'
    ]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')

    _ = [
        os.remove(f) for f in [
            JPBD.a_src,
            JPBD.a_src_cut.format(1),
            JPBD.a_enc_cut.format(1) + '.m4a',
            JPBD.a_enc_cut.format(1) + '.opus', 'tags_aac.xml', 'tags_opus.xml'
        ]
    ]
Exemple #19
0
#!/usr/bin/env python3
import ntpath

import lvsfunc as lvf
from acsuite import eztrim

path = r'BDMV/[KUNO-DIY][BDMV][CLANNAD][Blu-ray BOX Disc 1-5 Fin]/CLANNAD_1/BDMV/STREAM/00003.m2ts'
src = lvf.src(path)

if __name__ == "__main__":
    eztrim(src, (0, -48),
           path,
           f"{ntpath.basename(__file__)[3:-3]}_cut.mka",
           ffmpeg_path='')  # noqa
Exemple #20
0
#!/usr/bin/env python3
import ntpath
import os

import lvsfunc as lvf
from acsuite import eztrim

path = r'BDMV/[BDMV][200129][Kimetsu no Yaiba][Vol.7]/BDMV/STREAM/00005.m2ts'
src = lvf.src(path)

if __name__ == "__main__":
    eztrim(src, (0, -24), f"{os.path.splitext(path)[0]}.wav",
           f"{ntpath.basename(__file__)[3:-3]}_cut.wav")
#!/usr/bin/env python3
import os
from acsuite import eztrim
import lvsfunc as lvf

# Note: NCs for this show have AC3 audio, not DTS-HD!
path = r'BDMV/KIXA_90889/BDMV/STREAM/00007.m2ts'
src = lvf.src(path)

if __name__ == "__main__":
    eztrim(src, (24, -24), f"{os.path.splitext(path)[0]}.wav", f"{__file__[:-3]}_cut.wav")
Exemple #22
0
#!/usr/bin/env python3
import os
from acsuite import eztrim
import lvsfunc as lvf


path = r'DVDISO/(DVDISO)(アニメ) 鉄腕バーディー DECODE VOLUME02 (081022)(iso+mds+jpg)/TETSUWAN_BIRDY_02.d2v'
src = lvf.src(path)

if __name__ == "__main__":
    eztrim(src, (49055, 91628), f"{os.path.splitext(path)[0]} Ta0 stereo 1536 kbps DELAY 0 ms.w64", f"{__file__[:-3]}_cut.wav")
Exemple #23
0
#!/usr/bin/env python3
import ntpath
import os

import lvsfunc as lvf
from acsuite import eztrim

path = r'03/[HorribleSubs] Kaguya-sama wa Kokurasetai S2 - 03 [1080p].mkv'
src = lvf.src(path)

if __name__ == "__main__":
    eztrim(src, (289, 0),
           f"{os.path.splitext(path)[0]}.mkv",
           f"{ntpath.basename(__file__)[3:-3]}_cut.aac",
           ffmpeg_path='')
Exemple #24
0
#!/usr/bin/env python3
import ntpath
import os

import lvsfunc as lvf
from acsuite import eztrim

ep = "02"  # The only annoying thing about using SubsPlease over Erai now is the CRC
path = f'{ep}/[SubsPlease] Majo no Tabitabi - {ep} (1080p) [66DF9727].mkv'
src = lvf.src(path)

if __name__ == "__main__":
    eztrim(src, (240, 0),
           path,
           f"{ep}/{ntpath.basename(__file__)[3:-3]}_cut.mka",
           ffmpeg_path='')
Exemple #25
0
#!/usr/bin/env python3
import os
from acsuite import eztrim
import lvsfunc as lvf


path = r'[BDMV]冴えない彼女の育てかた♭Vol.01~Vol.06/[BDMV]冴えない彼女の育てかた♭ VOL.05/BDMV/STREAM/00002.m2ts'
src = lvf.src(path)

if __name__ == "__main__":
    eztrim(src, (0, 32847), f"{os.path.splitext(path)[0]}.wav", f"{__file__[:-3]}_cut.wav")
Exemple #26
0
#!/usr/bin/env python3
import os
from acsuite import eztrim
import lvsfunc as lvf

path = r'BDMV/[BDMV][190402][マナリアフレンズ II]/BD/BDMV/STREAM/00012.m2ts'
src = lvf.src(path)

if __name__ == "__main__":
    eztrim(src, (1988, 2984), f"{os.path.splitext(path)[0]}.wav",
           f"{__file__[3:-3]}_cut.wav")
Exemple #27
0
#!/usr/bin/env python3
import ntpath

import lvsfunc as lvf
from acsuite import eztrim

path = f'BDMV/AKUDWAFTER/BDMV/STREAM/00002.m2ts'
src = lvf.src(path)

if __name__ == "__main__":
    # Twice because there's both a 2.0 and a 5.1 track
    eztrim(src, (24, -24), f"{path[:-5]}_1.wav",
           f"{ntpath.basename(__file__)[3:-3]}_51_cut.wav")
    eztrim(src, (24, -24), f"{path[:-5]}_2.wav",
           f"{ntpath.basename(__file__)[3:-3]}_20_cut.wav")
Exemple #28
0
audio_out = source[:-3] + 'aac'
tempfile = source[:-3] + '_temp.aac'

# process audio
demux_cmd = [
    'ffmpeg', '-hide_banner', '-loglevel', '16', '-i', source, '-map', '0:a:0',
    '-c', 'copy', tempfile
]
subprocess.run(demux_cmd)

if ed:
    clip = vs.core.lsmas.LWLibavSource(source)
    trim = [(0, ed), (ed + 2152, ed + 2157), (ed, ed + 2152),
            (ed + 2157, None)]
    # shifting ~210ms of silence from end of the ED to its beginning for better sync with video. if this desync was an artistic choice, it was _not_ a good one.
    acsuite.eztrim(clip, trim, tempfile, audio_out, quiet=True)
    os.remove(tempfile)
    os.remove(source + '.lwi')
else:
    os.rename(tempfile, audio_out)

# process video
filter_process = subprocess.Popen(['vspipe', '--y4m', script, '-'],
                                  stdout=subprocess.PIPE)
encode_process = subprocess.Popen(['x264'] + encode_args.split() +
                                  ['--demuxer', 'y4m', '-o', video_out, '-'],
                                  stdin=filter_process.stdout)
filter_process.stdout.close()
encode_process.communicate()

# muxing
Exemple #29
0
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')
    eac3to_args = [
        'eac3to',
        JPBD.src,
        '2:',
        JPBD.a_src.format(1),
        #    '3:', JPBD.a_src.format(2),
        '-log=NUL'
    ]
    subprocess.run(eac3to_args, text=True, check=True, encoding='utf-8')

    print('\n\n\nAudio cutting & encoding')
    # for i in range(1, 2+1):
    for i in range(1, 1 + 1):
        eztrim(JPBD.src_clip, (JPBD.frame_start, JPBD.frame_end),
               JPBD.a_src.format(i), JPBD.a_src_cut.format(i))

        # Encode in AAC
        qaac_args = [
            'qaac',
            JPBD.a_src_cut.format(i), '-V', '127', '--no-delay', '-o',
            JPBD.a_enc_cut.format(i) + '.m4a'
        ]
        subprocess.run(qaac_args, text=True, check=True, encoding='utf-8')

        # Encode in Opus
        opus_args = [
            'opusenc', '--bitrate', '192',
            JPBD.a_src_cut.format(i),
            JPBD.a_enc_cut.format(i) + '.opus'
        ]
        subprocess.run(opus_args, text=True, check=True, encoding='utf-8')

    # Blanck cut and encode
    eztrim(JPBD.src_clip, (0, ENDCARD_LENGTH), 'blank.wav', 'blank_cut.wav')
    qaac_args = [
        'qaac', 'blank_cut.wav', '-V', '127', '--no-delay', '-o',
        'blank_cut.m4a'
    ]
    subprocess.run(qaac_args, text=True, check=True, encoding='utf-8')

    opus_args = [
        'opusenc', '--bitrate', '192', 'blank_cut.wav', 'blank_cut.opus'
    ]
    subprocess.run(opus_args, text=True, check=True, encoding='utf-8')

    # Recup encoder name
    ffprobe_args = [
        'ffprobe', '-loglevel', 'quiet', '-show_entries',
        'format_tags=encoder', '-print_format',
        'default=nokey=1:noprint_wrappers=1',
        JPBD.a_enc_cut.format(1) + '.m4a'
    ]
    encoder_name = subprocess.check_output(ffprobe_args,
                                           shell=True,
                                           encoding='utf-8')
    fil = open("tags_aac.xml", 'w')
    fil.writelines([
        '<?xml version="1.0"?>', '<Tags>', '<Tag>', '<Targets>', '</Targets>',
        '<Simple>', '<Name>ENCODER</Name>', f'<String>{encoder_name}</String>',
        '</Simple>', '</Tag>', '</Tags>'
    ])
    fil.close()

    opus_args = ['opusenc', '-V']
    encoder_name = subprocess.check_output(opus_args,
                                           shell=True,
                                           encoding='utf-8').splitlines()[0]
    fil = open("tags_opus.xml", 'w')
    fil.writelines([
        '<?xml version="1.0"?>', '<Tags>', '<Tag>', '<Targets>', '</Targets>',
        '<Simple>', '<Name>ENCODER</Name>',
        f'<String>{encoder_name}, VBR 192k</String>', '</Simple>', '</Tag>',
        '</Tags>'
    ])
    fil.close()

    print('\nFinal muxing')
    mkv_args = [
        'mkvmerge',
        '-o',
        JPBD.name + '_aac.mkv',
        '--language',
        '0:jpn',
        '--track-name',
        '0:AVC BDRip by Vardë@YameteTomete',
        JPBD.output,
        '--tags',
        '0:tags_aac.xml',
        '--language',
        '0:jpn',
        '--track-name',
        '0:AAC 2.0',
        JPBD.a_enc_cut.format(1) + '.m4a',
        '+',
        'blank_cut.m4a',
        # '--tags', '0:tags_aac.xml', '--language', '0:jpn', '--track-name', '0:AAC 2.0 Commentary', JPBD.a_enc_cut.format(2) + '.m4a', '+', 'blank_cut.m4a',
        '--chapter-language',
        'en',
        '--chapters',
        JPBD.chapter
    ]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')

    mkv_args = [
        'mkvmerge',
        '-o',
        JPBD.name + '_opus.mkv',
        '--language',
        '0:jpn',
        '--track-name',
        '0:AVC BDRip by Vardë@YameteTomete',
        JPBD.output,
        '--tags',
        '0:tags_opus.xml',
        '--language',
        '0:jpn',
        '--track-name',
        '0:Opus 2.0',
        JPBD.a_enc_cut.format(1) + '.opus',
        '+',
        'blank_cut.opus',
        # '--tags', '0:tags_opus.xml', '--language', '0:jpn', '--track-name', '0:Opus 2.0 Commentary', JPBD.a_enc_cut.format(2) + '.opus', '+', 'blank_cut.opus',
        '--chapter-language',
        'en',
        '--chapters',
        JPBD.chapter
    ]
    subprocess.run(mkv_args, text=True, check=True, encoding='utf-8')

    # Clean up
    files = [
        'tags_aac.xml', 'tags_opus.xml', 'blank_cut.wav', 'blank_cut.m4a',
        'blank_cut.opus'
    ]
    for file in files:
        if os.path.exists(file):
            os.remove(file)

    # for i in range(1, 2+1):
    for i in range(1, 1 + 1):
        files = [
            JPBD.a_src.format(i),
            JPBD.a_src_cut.format(i),
            JPBD.a_enc_cut.format(i) + '.m4a',
            JPBD.a_enc_cut.format(i) + '.opus'
        ]
        for file in files:
            if os.path.exists(file):
                os.remove(file)
Exemple #30
0
path = r'BDMV/[BDMV][190402][マナリアフレンズ II]/BD/BDMV/STREAM/00009.m2ts'
src = lvf.src(path)

prev_start = 16688

if __name__ == "__main__":
    files = [f"{__file__[:-3]}_{i}_cut.wav" for i in 'ABCD']

    trims = [(24, prev_start), (0, 24), (prev_start + 240, 0),
             (prev_start, prev_start + 240)]

    print("\n[*] Trimming tracks")
    for f, t in zip(files, trims):
        print(f"    [+] Trimming {f} with trims {t}")
        eztrim(src, t, f"{os.path.splitext(path)[0]}.wav", f, quiet=True)

    print("\n[*] Writing concact file")
    concat = open(f"{__file__[:-3]}_concat.txt", "w")
    for f in files:
        print(f"    [+] Adding {f}")
        concat.write(f"file {f}\n")
    concat.close()

    print("\n[*] Concatinating trimmed tracks")
    subprocess.run([
        "ffmpeg", "-f", "concat", "-i", f"{__file__[:-3]}_concat.txt",
        "-loglevel", "panic", "-stats", "-c", "copy",
        f"{__file__[3:-3]}_cut.wav"
    ])
    print("   [+] Tracks successfully concatinated")