├── README.md ├── [LoliHouse] Remux Subset.bat └── [LoliHouse] Remux Subset.py /README.md: -------------------------------------------------------------------------------- 1 | # Merge_Subset 2 | 识别字幕种类并用[AssFontSubset](https://github.com/youlun/AssFontSubset)生成字体子集并进行封装 3 | 4 | ## 依赖 5 | 1. [AssFontSubset](https://github.com/youlun/AssFontSubset) 6 | 2. [MKVToolNix](https://mkvtoolnix.download/doc/mkvmerge.html) 7 | 8 | 环境变量请在.bat中修改 9 | 感谢**中津静流**提供.bat思路 10 | 11 | ## 文件结构 12 |
13 | ------------------
14 | |-[LoliHouse] Remux Subset.py
15 | |-[LoliHouse] Remux Subset.bat
16 | |-encoded.mkv
17 | |-encoded.sc.ass__(Optional)__
18 | |-encoded.tc.ass__(Optional)__
19 | |-encoded.jpn.ass__(Optional)__
20 | |--output_mkv
21 | |---encoded.mkv__(After MKVMerge)__
22 | |--output
23 | |---encoded.sc.ass__(Optional)__(After AFS)__
24 | |---encoded.tc.ass__(Optional)__(After AFS)__
25 | |---encoded.jpn.ass__(Optional)__(After AFS)__
26 | |---1.1HPD2Q59.ttf__(Random)__(After AFS)__
27 | |---2.1HPD2Q59.otf__(Random)__(After AFS)__
28 | |---3. ...
29 | |--fonts
30 | |---DFYanKai-W7-WIN-BF.ttf
31 | |---FZZhunYuan-M02.TTF
32 | |---.....
33 | 
34 | 35 | ## 使用方法 36 | 1. 按照上述文件结构准备好文件 37 | 2. 将encoded.mkv拖到[LoliHouse] Remux Subset.bat上 38 | 3. 程序会自动生成带有精简字体集以及字幕的mkv文件(均在output文件夹) 39 | -------------------------------------------------------------------------------- /[LoliHouse] Remux Subset.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/breakertt/Merge_Subset/c9e4dcb5e210c93a0177b29588064f74a8cdda1f/[LoliHouse] Remux Subset.bat -------------------------------------------------------------------------------- /[LoliHouse] Remux Subset.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import time 4 | 5 | afs = sys.argv[1] 6 | mkvmerge = sys.argv[2] 7 | file = sys.argv[3] 8 | print(file) 9 | 10 | #Find Subtitles 11 | sub_dict = {} 12 | sc_list = ["sc","chs","gb","gbk"] 13 | tc_list = ["tc","cht","big5"] 14 | jpn_list = ["jap","jp","jpn"] 15 | for filename in os.listdir(os.getcwd()): 16 | filename_split = filename.split('.') 17 | if len(filename_split) != 3: 18 | continue 19 | #print(filename_split) 20 | if filename_split[0] == file and filename_split[2] == "ass": 21 | lang = filename_split[1].lower() 22 | if lang in sc_list: 23 | sub_dict["sc"] = filename 24 | if lang in tc_list: 25 | sub_dict["tc"] = filename 26 | if lang in jpn_list: 27 | sub_dict["jpn"] = filename 28 | print("Subtitles Found \n%s" % sub_dict) 29 | 30 | #Using AFS 31 | AFS_command = "%s " % afs 32 | for lang, filename in sub_dict.items(): 33 | if len(filename)>2: 34 | AFS_command += "\"" + os.getcwd() + "\\" + "%s\" " % filename 35 | print("Start to run AutoFontSubset by youlun\n") 36 | os.system(AFS_command) 37 | 38 | #Create Mkvmerge command of subs 39 | sub_command = "" 40 | lang_dict = {"sc":"简体", "tc":"繁体", "jpn":"日语"} 41 | sub_default_cmd = " --default-track 0:yes" 42 | for lang in lang_dict: 43 | if lang in sub_dict: 44 | if lang == "jpn": 45 | sub_command += "--language 0:jpn%s --track-name \"0:%s\" \"output/%s\" " %(sub_default_cmd,lang_dict[lang],sub_dict[lang]) 46 | else: 47 | sub_command += "--language 0:chi%s --track-name \"0:%s\" \"output/%s\" " %(sub_default_cmd,lang_dict[lang],sub_dict[lang]) 48 | sub_default_cmd = "" 49 | 50 | #Find Fonts and create command 51 | font_command = "" 52 | for fontfile in os.listdir(".\\output"): 53 | if (os.path.splitext(fontfile)[1].lower() == ".otf") or (os.path.splitext(fontfile)[1].lower() == ".ttf"): 54 | font_command += " --attach-file \"output\\%s\"" % fontfile 55 | 56 | if not os.path.exists("output_mkv"): 57 | os.mkdir("output_mkv") 58 | 59 | inti_command = "%s " % mkvmerge 60 | inti_command += "--output \"output_mkv\\%s.mkv\" --no-subtitles --no-attachments " % file 61 | inti_command += "--language 0:und --default-track 0:yes --language 1:jpn --default-track 1:yes \"%s.mkv\" " % file 62 | 63 | 64 | 65 | #Combine Command 66 | command = inti_command + sub_command + font_command 67 | time.sleep(1) #我想睡一会儿QAQ 68 | os.system(command) 69 | print(command) --------------------------------------------------------------------------------