forked from VideoDownloaders/DISNEY-4K-SCRIPT
New
This commit is contained in:
251
pydisney/disneyplus_muxer.py
Normal file
251
pydisney/disneyplus_muxer.py
Normal file
@@ -0,0 +1,251 @@
|
||||
import os, subprocess, sys, contextlib
|
||||
|
||||
class Muxer(object):
|
||||
def __init__(self, CurrentName, SeasonFolder, CurrentHeigh, Type, defaults, mkvmergeexe):
|
||||
self.CurrentName = CurrentName
|
||||
self.SeasonFolder = SeasonFolder
|
||||
self.CurrentHeigh = CurrentHeigh
|
||||
self.Type = Type
|
||||
self.defaults = defaults
|
||||
self.mkvmergeexe = mkvmergeexe
|
||||
|
||||
def mux(self, command):
|
||||
newlines = ['\n', '\r\n', '\r']
|
||||
def unbuffered(proc, stream='stdout'):
|
||||
stream = getattr(proc, stream)
|
||||
with contextlib.closing(stream):
|
||||
while True:
|
||||
out = []
|
||||
last = stream.read(1)
|
||||
# Don't loop forever
|
||||
if last == '' and proc.poll() is not None:
|
||||
break
|
||||
while last not in newlines:
|
||||
# Don't loop forever
|
||||
if last == '' and proc.poll() is not None:
|
||||
break
|
||||
out.append(last)
|
||||
last = stream.read(1)
|
||||
out = ''.join(out)
|
||||
yield out
|
||||
|
||||
proc = subprocess.Popen(
|
||||
command,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
bufsize=1,
|
||||
universal_newlines=True,
|
||||
)
|
||||
for line in unbuffered(proc):
|
||||
if 'Progress:' in line:
|
||||
sys.stdout.write("\r%s" % (line.replace('Progress:', 'Progress:')))
|
||||
sys.stdout.flush()
|
||||
print('')
|
||||
|
||||
return
|
||||
|
||||
def DPMuxer(self):
|
||||
|
||||
VideoInputNoExist = False
|
||||
|
||||
if os.path.isfile('.\\'+self.CurrentName + ' [' + self.CurrentHeigh + 'p].h264'):
|
||||
VideoInputName = '.\\'+self.CurrentName + ' [' + self.CurrentHeigh + 'p].h264'
|
||||
if self.Type == "show":
|
||||
VideoOutputName = '.\\'+self.SeasonFolder+'\\'+self.CurrentName + '.mkv'
|
||||
else:
|
||||
VideoOutputName = '.\\'+self.CurrentName + '.mkv'
|
||||
|
||||
elif os.path.isfile('.\\'+self.CurrentName + ' [' + self.CurrentHeigh + 'p].h265'):
|
||||
VideoInputName = '.\\'+self.CurrentName + ' [' + self.CurrentHeigh + 'p].h265'
|
||||
if self.Type == "show":
|
||||
VideoOutputName = '.\\'+self.SeasonFolder+'\\'+self.CurrentName + '.mkv'
|
||||
else:
|
||||
VideoOutputName = '.\\'+self.CurrentName + '.mkv'
|
||||
|
||||
elif os.path.isfile('.\\'+self.CurrentName + ' [' + self.CurrentHeigh + 'p] [HEVC].h265'):
|
||||
VideoInputName = '.\\'+self.CurrentName + ' [' + self.CurrentHeigh + 'p] [HEVC].h265'
|
||||
if self.Type == "show":
|
||||
VideoOutputName = '.\\'+self.SeasonFolder+'\\'+self.CurrentName + '.mkv'
|
||||
else:
|
||||
VideoOutputName = '.\\'+self.CurrentName + '.mkv'
|
||||
|
||||
elif os.path.isfile('.\\'+self.CurrentName + ' [' + self.CurrentHeigh + 'p] [HDR].h265'):
|
||||
VideoInputName = '.\\'+self.CurrentName + ' [' + self.CurrentHeigh + 'p] [HDR].h265'
|
||||
if self.Type == "show":
|
||||
VideoOutputName = '.\\'+self.SeasonFolder+'\\'+self.CurrentName + '.mkv'
|
||||
else:
|
||||
VideoOutputName = '.\\'+self.CurrentName + '.mkv'
|
||||
else:
|
||||
VideoInputNoExist = True
|
||||
|
||||
if VideoInputNoExist == False:
|
||||
|
||||
AudioExtensionsList=[
|
||||
".ac3",
|
||||
".eac3",
|
||||
".m4a",
|
||||
".dts",
|
||||
".mp3",
|
||||
".aac",
|
||||
]
|
||||
|
||||
SubsExtensionsList= [
|
||||
".srt",
|
||||
".ass",
|
||||
]
|
||||
|
||||
|
||||
language_tag = "English"
|
||||
|
||||
if language_tag == "English":
|
||||
subs_forced = '[Forced]'
|
||||
subs_full = ''
|
||||
subs_sdh = '[SDH]'
|
||||
|
||||
LanguageList = [
|
||||
["English", "eng", "eng", "English", "yes", "no"],
|
||||
["Afrikaans", "af", "afr", "Afrikaans", "no", "no"],
|
||||
["Arabic", "ara", "ara", "Arabic", "no", "no"],
|
||||
["Arabic (Syria)", "araSy", "ara", "Arabic Syria", "no", "no"],
|
||||
["Arabic (Egypt)", "araEG", "ara", "Arabic Egypt", "no", "no"],
|
||||
["Arabic (Kuwait)", "araKW", "ara", "Arabic Kuwait", "no", "no"],
|
||||
["Arabic (Lebanon)", "araLB", "ara", "Arabic Lebanon", "no", "no"],
|
||||
["Arabic (Algeria)", "araDZ", "ara", "Arabic Algeria", "no", "no"],
|
||||
["Arabic (Bahrain)", "araBH", "ara", "Arabic Bahrain", "no", "no"],
|
||||
["Arabic (Iraq)", "araIQ", "ara", "Arabic Iraq", "no", "no"],
|
||||
["Arabic (Jordan)", "araJO", "ara", "Arabic Jordan", "no", "no"],
|
||||
["Arabic (Libya)", "araLY", "ara", "Arabic Libya", "no", "no"],
|
||||
["Arabic (Morocco)", "araMA", "ara", "Arabic Morocco", "no", "no"],
|
||||
["Arabic (Oman)", "araOM", "ara", "Arabic Oman", "no", "no"],
|
||||
["Arabic (Saudi Arabia)", "araSA", "ara", "Arabic Saudi Arabia", "no", "no"],
|
||||
["Arabic (Tunisia)", "araTN", "ara", "Arabic Tunisia", "no", "no"],
|
||||
["Arabic (United Arab Emirates)", "araAE", "ara", "Arabic United Arab Emirates", "no", "no"],
|
||||
["Arabic (Yemen)", "araYE", "ara", "Arabic Yemen", "no", "no"],
|
||||
["Armenian", "hye", "arm", "Armenian", "no", "no"],
|
||||
["Assamese", "asm", "asm", "Assamese", "no", "no"],
|
||||
["Bangla", "ben", "ben", "Bengali", "no", "no"],
|
||||
["Basque", "eus", "baq", "Basque", "no", "no"],
|
||||
["Bulgarian", "bul", "bul", "Bulgarian", "no", "no"],
|
||||
["Cantonese", "None", "chi", "Cantonese", "no", "no"],
|
||||
["Catalan", "cat", "cat", "Catalan", "no", "no"],
|
||||
["Simplified Chinese", "zhoS", "chi", "Chinese Simplified", "no", "no"],
|
||||
["Traditional Chinese", "zhoT", "chi", "Chinese Traditional", "no", "no"],
|
||||
["Croatian", "hrv", "hrv", "Croatian", "no", "no"],
|
||||
["Czech", "ces", "cze", "Czech", "no", "no"],
|
||||
["Danish", "dan", "dan", "Danish", "no", "no"],
|
||||
["Dutch", "nld", "dut", "Dutch", "no", "no"],
|
||||
["Estonian", "est", "est", "Estonian", "no", "no"],
|
||||
["Filipino", "fil", "fil", "Filipino", "no", "no"],
|
||||
["Finnish", "fin", "fin", "Finnish", "no", "no"],
|
||||
["Flemish", "nlBE", "dut", "Flemish", "no", "no"],
|
||||
["French", "fra", "fra", "French", "no", "no"],
|
||||
["French Canadian", "caFra", "fre", "French Canadian", "no", "no"],
|
||||
["German", "deu", "ger", "German", "no", "no"],
|
||||
["Greek", "ell", "gre", "Greek", "no", "no"],
|
||||
["Gujarati", "guj", "guj", "Gujarati", "no", "no"],
|
||||
["Hebrew", "heb", "heb", "Hebrew", "no", "no"],
|
||||
["Hindi", "hin", "hin", "Hindi", "no", "no"],
|
||||
["Hungarian", "hun", "hun", "Hungarian", "no", "no"],
|
||||
["Icelandic", "isl", "ice", "Icelandic", "no", "no"],
|
||||
["Indonesian", "ind", "ind", "Indonesian", "no", "no"],
|
||||
["Italian", "ita", "ita", "Italian", "no", "no"],
|
||||
["Japanese", "jpn", "jpn", "Japanese", "no", "no"],
|
||||
["Kannada (India)", "kan", "kan", "Kannada (India)", "no", "no"],
|
||||
["Khmer", "khm", "khm", "Khmer", "no", "no"],
|
||||
["Klingon", "tlh", "tlh", "Klingon", "no", "no"],
|
||||
["Korean", "kor", "kor", "Korean", "no", "no"],
|
||||
["Lithuanian", "lit", "lit", "Lithuanian", "no", "no"],
|
||||
["Latvian", "lav", "lav", "Latvian", "no", "no"],
|
||||
["Malay", "msa", "may", "Malay", "no", "no"],
|
||||
["Malayalam", "mal", "mal", "Malayalam", "no", "no"],
|
||||
["Mandarin", "None", "chi", "Mandarin", "no", "no"],
|
||||
["Mandarin Chinese (Simplified)", "zh-Hans", "chi", "Simplified", "no", "no"],
|
||||
["Mandarin Chinese (Traditional)", "zh-Hant", "chi", "Traditional", "no", "no"],
|
||||
["Yue Chinese", "yue", "chi", "(Yue Chinese)", "no", "no"],
|
||||
["Manipuri", "mni", "mni", "Manipuri", "no", "no"],
|
||||
["Marathi", "mar", "mar", "Marathi", "no", "no"],
|
||||
["No Dialogue", "zxx", "zxx", "No Dialogue", "no", "no"],
|
||||
["Norwegian", "nor", "nor", "Norwegian", "no", "no"],
|
||||
["Persian", "fas", "per", "Persian", "no", "no"],
|
||||
["Polish", "pol", "pol", "Polish", "no", "no"],
|
||||
["Portuguese", "por", "por", "Portuguese", "no", "no"],
|
||||
["Brazilian Portuguese", "brPor", "por", "Brazilian Portuguese", "no", "no"],
|
||||
["Punjabi", "pan", "pan", "Punjabi", "no", "no"],
|
||||
["Romanian", "ron", "rum", "Romanian", "no", "no"],
|
||||
["Russian", "rus", "rus", "Russian", "no", "no"],
|
||||
["Serbian", "srp", "srp", "Serbian", "no", "no"],
|
||||
["Sinhala", "sin", "sin", "Sinhala", "no", "no"],
|
||||
["Slovak", "slk", "slo", "Slovak", "no", "no"],
|
||||
["Slovenian", "slv", "slv", "Slovenian", "no", "no"],
|
||||
["Spanish", "spa", "spa", "Spanish", "no", "no"],
|
||||
["European Spanish", "euSpa", "spa", "European Spanish", "no", "no"],
|
||||
["Swedish", "swe", "swe", "Swedish", "no", "no"],
|
||||
["Tagalog", "tgl", "tgl", "Tagalog", "no", "no"],
|
||||
["Tamil", "tam", "tam", "Tamil", "no", "no"],
|
||||
["Telugu", "tel", "tel", "Telugu", "no", "no"],
|
||||
["Thai", "tha", "tha", "Thai", "no", "no"],
|
||||
["Turkish", "tur", "tur", "Turkish", "no", "no"],
|
||||
["Ukrainian", "ukr", "ukr", "Ukrainian", "no", "no"],
|
||||
["Urdu", "urd", "urd", "Urdu", "no", "no"],
|
||||
["Vietnamese", "vie", "vie", "Vietnamese", "no", "no"], ]
|
||||
|
||||
ALLAUDIOS = []
|
||||
for audio_language, subs_language, language_id, language_name, audio_default, subs_default in LanguageList:
|
||||
for AudioExtension in AudioExtensionsList:
|
||||
if os.path.isfile('.\\' + self.CurrentName + ' ' + language_id + AudioExtension):
|
||||
if language_id == self.defaults['audio']:
|
||||
ALLAUDIOS = ALLAUDIOS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name, '--default-track', '0:yes', '(', '.\\' + self.CurrentName + ' ' + language_id + AudioExtension, ')']
|
||||
else:
|
||||
ALLAUDIOS = ALLAUDIOS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name, '--default-track', '0:no', '(', '.\\' + self.CurrentName + ' ' + language_id + AudioExtension, ')']
|
||||
|
||||
OnlyOneLanguage = False
|
||||
if len(ALLAUDIOS) == 9:
|
||||
OnlyOneLanguage = True
|
||||
|
||||
elif len(ALLAUDIOS) == 18:
|
||||
if ALLAUDIOS[1] == ALLAUDIOS[10]:
|
||||
if ' - Audio Description' in ALLAUDIOS[7] or ' - Audio Description' in ALLAUDIOS[16]:
|
||||
OnlyOneLanguage = True
|
||||
else:
|
||||
OnlyOneLanguage = False
|
||||
|
||||
ALLSUBS = []
|
||||
for audio_language, subs_language, language_id, language_name, audio_default, subs_default in LanguageList:
|
||||
if subs_language == self.defaults['sub']:
|
||||
subs_default == 'yes'
|
||||
for SubsExtension in SubsExtensionsList:
|
||||
if os.path.isfile('.\\' + self.CurrentName + ' ' + 'forced-' + subs_language + SubsExtension):
|
||||
if subs_language == self.defaults['sub']:
|
||||
ALLSUBS = ALLSUBS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name + ' ' + subs_forced, '--forced-track', '0:yes', '--default-track', '0:no', '--compression', '0:none', '(', '.\\' + self.CurrentName + ' ' + 'forced-' + subs_language + SubsExtension, ')']
|
||||
else:
|
||||
ALLSUBS = ALLSUBS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name + ' ' + subs_forced, '--forced-track', '0:yes', '--default-track', '0:' + subs_default, '--compression', '0:none', '(', '.\\' + self.CurrentName + ' ' + 'forced-' + subs_language + SubsExtension, ')']
|
||||
if OnlyOneLanguage == True:
|
||||
pass
|
||||
if os.path.isfile('.\\' + self.CurrentName + ' ' + subs_language + SubsExtension):
|
||||
if subs_language == self.defaults['sub']:
|
||||
ALLSUBS = ALLSUBS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name + ' ' + subs_full, '--forced-track', '0:no', '--default-track', '0:yes', '--compression', '0:none', '(', '.\\' + self.CurrentName + ' ' + subs_language + SubsExtension, ')']
|
||||
else:
|
||||
ALLSUBS = ALLSUBS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name + ' ' + subs_full, '--forced-track', '0:no', '--default-track', '0:' + subs_default, '--compression', '0:none', '(', '.\\' + self.CurrentName + ' ' + subs_language + SubsExtension, ')']
|
||||
elif os.path.isfile('.\\' + self.CurrentName + ' ' + subs_language + SubsExtension):
|
||||
if subs_language == self.defaults['sub']:
|
||||
ALLSUBS = ALLSUBS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name + ' ' + subs_full, '--forced-track', '0:no', '--default-track', '0:yes', '--compression', '0:none', '(', '.\\' + self.CurrentName + ' ' + subs_language + SubsExtension, ')']
|
||||
else:
|
||||
ALLSUBS = ALLSUBS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name + ' ' + subs_full, '--forced-track', '0:no', '--default-track', '0:no', '--compression', '0:none', '(', '.\\' + self.CurrentName + ' ' + subs_language + SubsExtension, ')']
|
||||
if os.path.isfile('.\\' + self.CurrentName + ' ' + 'sdh-' + subs_language + SubsExtension):
|
||||
ALLSUBS = ALLSUBS + ['--language', '0:' + language_id, '--track-name', '0:' + language_name + ' ' + subs_sdh, '--forced-track', '0:no', '--default-track', '0:no', '--compression', '0:none', '(', '.\\' + self.CurrentName + ' ' + 'sdh-' + subs_language + SubsExtension, ')']
|
||||
|
||||
#MUX
|
||||
|
||||
mkvmerge_command_video = [self.mkvmergeexe,
|
||||
'--output',
|
||||
VideoOutputName,
|
||||
'--language',
|
||||
'0:und',
|
||||
'--default-track',
|
||||
'0:yes',
|
||||
'(',
|
||||
VideoInputName,
|
||||
')']
|
||||
|
||||
mkvmerge_command = mkvmerge_command_video + ALLAUDIOS + ALLSUBS
|
||||
self.mux(mkvmerge_command)
|
||||
Reference in New Issue
Block a user