Porównaj commity

...

17 Commity

Autor SHA1 Wiadomość Data
Jared-02 4df1390714 Specifics Adjustment 2021-11-17 11:38:08 +08:00
Jared-02 8291497843 Improve the check main or high module 2021-11-07 21:31:27 +08:00
Jared-02 a6debd0c8d fix spelling mistakes 2021-11-07 20:06:28 +08:00
Jared-02 19ea1f4299 fix spelling mistakes 2021-11-03 03:52:13 +08:00
Jared-02 557d6554f0 Improve the logic of choosing main or high 2021-10-25 02:48:50 +08:00
Jared-02 ac5049ad81 Improve Readme.md to Help V2 2021-10-20 02:23:59 +08:00
Jared-02 fa11f0f41e
Improve Readme.md to Help 2021-10-20 02:07:07 +08:00
Jared-02 cac68bafff Refactored Aria2c Settings 2021-10-19 21:04:52 +08:00
Jared-02 8c4bef86df
Performance improvements 2021-10-19 13:25:05 +08:00
Jared-02 aff3544b9e
Update Tools 20211019 2021-10-19 13:17:48 +08:00
tainapedroso 817abba403
Update config.py 2021-09-14 23:53:45 -03:00
tainapedroso 0607cdd3fd
Add files via upload 2021-09-14 23:50:04 -03:00
tainapedroso e7712a2c89
Update get_keys.py 2021-09-14 23:48:48 -03:00
tainapedroso d5ff7ee149
Update get_keys.py 2021-09-14 23:45:35 -03:00
tainapedroso 76b40fa2a8
Install method 2021-09-14 21:01:30 -03:00
tainapedroso 8c03a461ca
requirements 2021-09-14 21:00:34 -03:00
tainapedroso c6f180d599
Update get_keys.py 2021-09-14 20:56:12 -03:00
20 zmienionych plików z 307 dodań i 109 usunięć

Wyświetl plik

@ -1 +1,57 @@
# Netflix-videos-downloader
## 快速开始
```
pip install -r requirements.txt
```
## 参数
```
基础参数:
-h--help 显示完整参数设置帮助文档并退出
-q <数字> 视频分辨率默认选择最高1080可选4807201080等
-o <目录路径>
下载临时文件夹
-f <目录路径>
mkv混流输出文件夹不指定默认输出到下载临时文件夹
-s <数字> 季数Season不指定默认下载所有季
-e <数字> 集数Episode不指定默认下载全集
"-e 1" 下载第1集;
"-e 1-7" 下载第1-7集;
"-e 2,5" 下载第2集、第5集
-p--prompt
下载前交互式提示输入yes/no
--AD 语言代码,--alang 语言代码
指定音轨语言默认下载原始语言Original最高码率音轨
语言代码位置:"/helpers/Muxer.py"
--slang 语言代码
指定字幕语言,默认下载所有语言字幕,
例如"--slang zhoS zhoT" 即指定简体中文、繁体中文字幕
--flang 语言代码
指定“场景字幕”语言Force Subtitle
--all-audios
下载所有语言音轨
--all-forced
下载所有语言“场景字幕”
--audio-bitrate <数字>
指定音频码率默认下载最高码率音轨可选128256448等
--aformat-2c--audio-format-2ch
指定下载2.0声道音轨
--aformat-51ch--audio-format-51ch
指定下载5.1声道音轨
--keep 混流mkv后保留原始素材文件默认删除
-keys--license
仅输出widevine key到控制台并退出
--no-aria2c 不调用aria2c下载器使用Python下载器默认使用aria2c
不推荐使用此参数
--nv 不下载视频Video
--na 不下载音频Audio
--ns 不下载字幕Subtitle
额外配置文件参数Manifest
--main 指定 H.264 Main
--high 指定 H.264 High
--hevc 指定 H.265
--hdr 指定 H.265 HDR
--check 比较H.264 Main/H.264 High二者质量优劣
```

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -34,11 +34,11 @@ MUXER = {
"DEFAULT": False, # to use the normal renaming. EX: Stranger Things S01E01 [1080p].mkv
"AUDIO": "hin", # default audio language.
"SUB": "None", # default subtitle language. EX: "eng" or "spa"
"GROUP": "Tandav", # to change the group name!. it's also possible to use this "--gr LOL", on the ripping commands.
"noTitle": False, # this will remove titles from the episodes EX: (The Witcher S01E01). insstead of (The Witcher S01E01 The End's Beginning).
"GROUP": "TJUPT", # to change the group name!. it's also possible to use this "--gr LOL", on the ripping commands.
"noTitle": True, # this will remove titles from the episodes EX: (The Witcher S01E01). insstead of (The Witcher S01E01 The End's Beginning).
"scheme": "p2p", # add/change any needed scheme naming. it's also possible to use this "--muxscheme repack", on the ripping commands.
"schemeslist": {
"p2p": "{t}.{r}.{s}.WEB-DL.{ac}.{vc}-{gr}",
"p2p": "{t}.{r}.{s}.WEB-DL.{vc}.{ac}-{gr}",
"test": "{t}.{r}.{s}.WEB-DL-{gr}",
},
"EXTRAS": [], # extra mkvmerge.exe commands.
@ -48,7 +48,7 @@ MUXER = {
#####################################(PATHS)#####################################
PATHS = {
"DL_FOLDER": "E:/#rips", #
"DL_FOLDER": f"{dirPath}", #
"DIR_PATH": f"{dirPath}",
"BINARY_PATH": f"{dirPath}/bin",
"COOKIES_PATH": f"{dirPath}/configs/Cookies",
@ -60,6 +60,19 @@ PATHS = {
ARIA2C = {
"enable_logging": False, # True
"enable_pass_config_to_aria2c": True, #传递aria2c参数
"file_allocation": "none", # 文件预分配方式:机械硬盘 falloc固态硬盘 none
"http_proxy_aria2c": "http://127.0.0.1:7890", # 代理地址,根据需要修改
"https_proxy_aria2c": "http://127.0.0.1:7890",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
"connection": "64", # 单服务器最大连接线程数
"split": "64", # 单任务最大连接线程数
"summary_interval": "0", # 下载进度摘要输出间隔时间
"continue_aria2c": "true", # 断点续传
"max_tries": "0", # 最大尝试次数0 表示无限
"piece_length": "1M", # HTTP/FTP下载分片大小
"min_split_size": "4M", # 文件最小分段大小,理论上值越小下载速度越快
"disk_cache": "64M", # 磁盘缓存,提升读写性能,有足够内存情况下增加
}
SETTINGS = {
@ -67,7 +80,7 @@ SETTINGS = {
}
#####################################(VPN)#####################################
# 不要修改这部分
VPN = {
"proxies": None, # "http://151.253.165.70:8080",
"nordvpn": {
@ -78,7 +91,7 @@ VPN = {
},
"private": {
"port": "8080",
"email": "abdalhmohmd8@gmail.com",
"email": "xxx",
"passwd": "123456",
"http": "http://{email}:{passwd}@{ip}:{port}",
},
@ -105,8 +118,8 @@ Config["NETFLIX"] = {
"cookies_txt": f"{dirPath}/configs/Cookies/cookies.txt",
"keys_file": f"{dirPath}/configs/KEYS/netflix.keys",
"token_file": f"{dirPath}/configs/Tokens/netflix_token.json",
"email": "Cfklop@max07.club",
"password": "1111",
"email": "xxxxxx@gmail.com",
"password": "123123",
"manifest_language": "en-US",
"metada_language": "en",
"manifestEsn": "NFCDIE-03-{}".format(utils().random_hex(30)),

Wyświetl plik

@ -318,10 +318,15 @@ class Muxer(object):
def LanguageList(self):
LanguageList = [
["Hindi", "hin", "hin", "Hindi"],
["Tamil", "tam", "tam", "Tamil"],
["Telugu", "tel", "tel", "Telugu"],
["Simplified Chinese", "zhoS", "chi", "Simplified Chinese"],
["Traditional Chinese", "zhoT", "chi", "Traditional Chinese"],
["Mandarin (Putonghua)", "zho", "zh-cmn", "Mandarin"],
["Mandarin (Guoyu)", "zho", "chi", "Chinese"],
["Cantonese", "zho", "zh-yue", "Cantonese"],
["Taiwanese", "zho", "zh-nan", "Minnan"],
["Chinese", "zho", "chi", "Chinese"],
["English", "eng", "eng", "English"],
["British English", "enGB", "eng", "British English"],
["Afrikaans", "af", "afr", "Afrikaans"],
["Arabic", "ara", "ara", "Arabic"],
["Arabic (Syria)", "araSy", "ara", "Arabic Syria"],
@ -348,16 +353,15 @@ class Muxer(object):
["Assamese", "asm", "asm", "Assamese"],
["Bengali", "ben", "ben", "Bengali"],
["Basque", "eus", "baq", "Basque"],
["British English", "enGB", "eng", "British English"],
["Bulgarian", "bul", "bul", "Bulgarian"],
["Cantonese", "None", "chi", "Cantonese"],
["Catalan", "cat", "cat", "Catalan"],
["Simplified Chinese", "zhoS", "chi", "Chinese Simplified"],
["Traditional Chinese", "zhoT", "chi", "Chinese Traditional"],
["Croatian", "hrv", "hrv", "Croatian"],
["Czech", "ces", "cze", "Czech"],
["Danish", "dan", "dan", "Danish"],
["Dutch", "nld", "dut", "Dutch"],
["Hindi", "hin", "hin", "Hindi"],
["Tamil", "tam", "tam", "Tamil"],
["Telugu", "tel", "tel", "Telugu"],
["Estonian", "est", "est", "Estonian"],
["Filipino", "fil", "fil", "Filipino"],
["Finnish", "fin", "fin", "Finnish"],
@ -496,8 +500,6 @@ class Muxer(object):
self.mkvmerge,
"--output",
outputVideo,
"--title",
'RAB',
"(",
inputVideo,
")",
@ -585,7 +587,7 @@ class Muxer(object):
"--language",
f"0:{language_id}",
"--track-name",
f"0:Forced",
f"0:{language_name} Forced",
"--forced-track",
"0:yes",
"--default-track",
@ -604,7 +606,7 @@ class Muxer(object):
"--language",
f"0:{language_id}",
"--track-name",
f"0:SDH",
f"0:{language_name} SDH",
"--forced-track",
"0:no",
"--default-track",

Wyświetl plik

@ -52,7 +52,7 @@ def __profiles(profile, addHEVCDO=False):
elif profile == "Main KEYS":
profiles += [
"playready-h264mpl30-dash",
"playready-h264bpl30-dash",
]
elif profile == "HEVC KEYS":
@ -60,15 +60,15 @@ def __profiles(profile, addHEVCDO=False):
"hevc-main-L30-dash-cenc",
"hevc-main10-L30-dash-cenc",
"hevc-main10-L30-dash-cenc-prk",
"hevc-main-L31-dash-cenc"
"hevc-main-L31-dash-cenc",
"hevc-main10-L31-dash-cenc",
"hevc-main10-L31-dash-cenc-prk",
"hevc-main-L40-dash-cenc",
"hevc-main-L40-dash-cenc",
"hevc-main10-L40-dash-cenc",
"hevc-main10-L40-dash-cenc-prk",
"hevc-main-L41-dash-cenc",
"hevc-main10-L40-dash-cenc-prk",
"hevc-main-L41-dash-cenc",
"hevc-main10-L41-dash-cenc",
"hevc-main10-L41-dash-cenc-prk"
"hevc-main10-L41-dash-cenc-prk",
]
if addHEVCDO:
profiles += [
@ -80,18 +80,16 @@ def __profiles(profile, addHEVCDO=False):
elif profile == 'HDR-10 KEYS':
profiles += [
"hevc-hdr-main10-L30-dash-cenc",
"hevc-hdr-main10-L30-dash-cenc-prk",
"hevc-hdr-main10-L31-dash-cenc",
"hevc-hdr-main10-L31-dash-cenc-prk",
"hevc-hdr-main10-L40-dash-cenc",
"hevc-hdr-main10-L41-dash-cenc",
"hevc-hdr-main10-L40-dash-cenc-prk",
"hevc-hdr-main10-L41-dash-cenc-prk"
'hevc-hdr-main10-L30-dash-cenc',
'hevc-hdr-main10-L30-dash-cenc-prk',
'hevc-hdr-main10-L31-dash-cenc',
'hevc-hdr-main10-L31-dash-cenc-prk',
'hevc-hdr-main10-L40-dash-cenc',
'hevc-hdr-main10-L40-dash-cenc-prk',
]
else:
profiles += [
"playready-h264mpl30-dash",
"playready-h264mpl30-dash",
]
return profiles
@ -156,4 +154,4 @@ def GettingKEYS_Netflixv2(nfID, profile): #
Correct, keyswvdecrypt = wvdecrypt.start_process()
KEYS = keyswvdecrypt
return KEYS
return KEYS

Wyświetl plik

@ -19,14 +19,12 @@ def MSLprofiles():
"playready-h264mpl31-dash",
],
"FHD": [
"playready-h264bpl30-dash",
"playready-h264mpl22-dash",
"playready-h264mpl30-dash",
"playready-h264mpl31-dash",
"playready-h264mpl40-dash",
],
"ALL": [
"playready-h264bpl30-dash",
"playready-h264mpl22-dash",
"playready-h264mpl30-dash",
"playready-h264mpl31-dash",
@ -334,7 +332,7 @@ class get_manifest:
else f"{size_in_bytes/1073741824:0.2f} GiB"
)
vid_url = downloadable["urls"][0]["url"]
L3 = 'L3' if 'SEGMENT_MAP_2KEY' in str(downloadable['tags']) else '' #
L3 = 'L3' if 'SEGMENT_MAP_2KEY' in str(downloadable['tags']) else ''
VideoList.append(
{
@ -348,7 +346,7 @@ class get_manifest:
"Url": vid_url,
"Bitrate": str(downloadable["bitrate"]),
"Profile": downloadable["content_profile"],
"L3": L3 #
"L3": L3
}
)
@ -366,6 +364,7 @@ class get_manifest:
return VideoList
def ParseVideo(self, resp, getHigh):
manifest = resp["result"]
VideoList = []
checkerinfo = ""
@ -409,24 +408,46 @@ class get_manifest:
if getHigh:
HighVideoList = self.HighVideoMSL()
# 变量赋值
if not HighVideoList == []:
checkerinfo = "\nNetflix Profile Checker v1.0\nMAIN: {}kbps | {}\nHIGH: {}kbps | {}\n\n{}\n"
checkerinfo = checkerinfo.format(
str(dict(VideoList[-1])["Bitrate"]),
str(dict(VideoList[-1])["Profile"]),
str(dict(HighVideoList[-1])["Bitrate"]),
str(dict(HighVideoList[-1])["Profile"]),
"result: MAIN is Better"
if int(dict(VideoList[-1])["Bitrate"])
>= int(dict(HighVideoList[-1])["Bitrate"])
else "result: HIGH is Better",
main_max = dict(VideoList[-1])
high_max = dict(HighVideoList[-1])
else:
self.logger.info("Error: Getting Manifest")
exit(-1)
# 判断 main 或 high要求
# main 和 high 的 vmaf 不同时选择 vmaf 更高者
# main 和 high 的 vmaf 相同时选择 bitrate 更高者
if main_max["vmaf"]:
if int(main_max["vmaf"]) >= int(high_max["vmaf"]) and int(main_max["Bitrate"]) >= int(high_max["Bitrate"]):
check_high_or_main = "MAIN"
else:
check_high_or_main = "HIGH"
# vmaf = None 时,通过码率判断
elif main_max["Bitrate"]:
if int(main_max["Bitrate"]) >= int(high_max["Bitrate"]):
check_high_or_main = "MAIN"
else:
check_high_or_main = "HIGH"
else:
self.logger.info("Error: Getting Manifest")
exit(-1)
checkerinfo = "\nNetflix Profile Checker v1.1\n2021-11-07 Jared_mod\n\nMain Profile Rate: {}kbps | VMAF: {} | {}\nHigh Profile Rate: {}kbps | VMAF: {} | {}\nResult: {} is Better!\n".format(
str(main_max["Bitrate"]),
str(main_max["vmaf"]),
str(main_max["Profile"]),
str(high_max["Bitrate"]),
str(high_max["vmaf"]),
str(high_max["Profile"]),
check_high_or_main,
)
self.logger.debug("HighVideoList: {}".format(HighVideoList))
VideoList += HighVideoList
self.logger.debug("HighVideoList: {}".format(HighVideoList))
if check_high_or_main == "HIGH":
VideoList = HighVideoList
VideoList = sorted(VideoList, key=lambda k: int(k["Bitrate"]))
return VideoList, checkerinfo
def ParseAudioSubs(self, resp):

Wyświetl plik

@ -163,67 +163,120 @@ class aria2:
def aria2Options(
self,
allow_overwrite=True,
file_allocation=None,
auto_file_renaming=False,
async_dns=False,
retry_wait=5,
summary_interval=0,
enable_color=False,
connection=16,
concurrent_downloads=16,
split=16,
enable_color=True,
concurrent_downloads=5,
header="skip",
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
user_agent="",
uri_selector="inorder",
console_log_level="skip",
download_result="hide",
quiet="false",
extra_commands=[],
# Jared_mod settings
connection=64,
split=64,
http_proxy_aria2c="",
https_proxy_aria2c="",
save_session_interval=1,
auto_save_interval=30,
force_save="false",
min_split_size="4M",
max_tries="0",
piece_length="1M",
summary_interval=0,
continue_aria2c="true",
file_allocation="none",
disk_cache="64M",
):
if self.config["enable_pass_config_to_aria2c"]:
file_allocation = self.config["file_allocation"]
http_proxy_aria2c = self.config["http_proxy_aria2c"]
https_proxy_aria2c = self.config["https_proxy_aria2c"]
user_agent = self.config["user_agent"]
connection = self.config["connection"]
split = self.config["split"]
summary_interval = self.config["summary_interval"]
continue_aria2c = self.config["continue_aria2c"]
max_tries = self.config["max_tries"]
piece_length = self.config["piece_length"]
min_split_size = self.config["min_split_size"]
disk_cache = self.config["disk_cache"]
else: pass
options = [] + extra_commands
allow_overwrite = self.convert_args(allow_overwrite)
quiet = self.convert_args(quiet)
file_allocation = self.convert_args(file_allocation)
auto_file_renaming = self.convert_args(auto_file_renaming)
async_dns = self.convert_args(async_dns)
retry_wait = self.convert_args(retry_wait)
enable_color = self.convert_args(enable_color)
connection = self.convert_args(connection)
concurrent_downloads = self.convert_args(concurrent_downloads)
split = self.convert_args(split)
header = self.convert_args(header)
user_agent = self.convert_args(user_agent)
uri_selector = self.convert_args(uri_selector)
console_log_level = self.convert_args(console_log_level)
download_result = self.convert_args(download_result)
connection = self.convert_args(connection)
split = self.convert_args(split)
http_proxy_aria2c = self.convert_args(http_proxy_aria2c)
https_proxy_aria2c = self.convert_args(https_proxy_aria2c)
save_session_interval = self.convert_args(save_session_interval)
auto_save_interval = self.convert_args(auto_save_interval)
force_save = self.convert_args(force_save)
min_split_size = self.convert_args(min_split_size)
max_tries = self.convert_args(max_tries)
piece_length = self.convert_args(piece_length)
summary_interval = self.convert_args(summary_interval)
continue_aria2c = self.convert_args(continue_aria2c)
file_allocation = self.convert_args(file_allocation)
disk_cache = self.convert_args(disk_cache)
##############################################################################
options += self.append_commands(options, "--allow-overwrite=", allow_overwrite)
options += self.append_commands(options, "--quiet=", quiet)
options += self.append_commands(options, "--file-allocation=", file_allocation)
options += self.append_commands(
options, "--auto-file-renaming=", auto_file_renaming
)
options += self.append_commands(options, "--async-dns=", async_dns)
options += self.append_commands(options, "--retry-wait=", retry_wait)
options += self.append_commands(options, "--enable-color=", enable_color)
options += self.append_commands(
options, "--max-connection-per-server=", connection
)
options += self.append_commands(
options, "--max-concurrent-downloads=", concurrent_downloads
)
options += self.append_commands(options, "--split=", split)
options += self.append_commands(options, "--header=", header)
options += self.append_commands(options, "--user-agent=", user_agent)
options += self.append_commands(options, "--uri-selector=", uri_selector)
options += self.append_commands(
options, "--console-log-level=", console_log_level
)
options += self.append_commands(options, "--download-result=", download_result)
options += self.append_commands(
options, "--max-connection-per-server=", connection
)
options += self.append_commands(options, "--split=", split)
options += self.append_commands(options, "--http-proxy=", http_proxy_aria2c)
options += self.append_commands(options, "--https-proxy=", https_proxy_aria2c)
options += self.append_commands(options, "--save-session-interval=", save_session_interval)
options += self.append_commands(options, "--auto-save-interval=", auto_save_interval)
options += self.append_commands(options, "--force-save=", force_save)
options += self.append_commands(options, "--min-split-size=", min_split_size)
options += self.append_commands(options, "--max-tries=", max_tries)
options += self.append_commands(options, "--piece-length=", piece_length)
options += self.append_commands(options, "--summary-interval=", summary_interval)
options += self.append_commands(options, "--continue=", continue_aria2c)
options += self.append_commands(options, "--file-allocation=", file_allocation)
options += self.append_commands(options, "--disk-cache=", disk_cache)
return options
def aria2DisableProxies(self):

Wyświetl plik

@ -386,6 +386,10 @@ class ripprocess(object):
return "Mandarin Chinese (Simplified)", "zh-Hans"
elif code == "cmn-Hant":
return "Mandarin Chinese (Traditional)", "zh-Hant"
elif code == "zh-TW":
return "Chinese", "zho"
elif code == "zh-CN":
return "Chinese", "zho"
elif code == "es-419":
return "Spanish", "spa"
elif code == "es-ES":
@ -674,16 +678,18 @@ class ripprocess(object):
outputName = inputName.replace(replace_str, ext)
self.logger.info(("{} -> {}").format(inputName, outputName))
ff = ffmpy.FFmpeg(
executable=self.bin["ffmpeg"],
inputs={inputName: None},
outputs={outputName: "-c:a copy"},
global_options="-vn -sn -y -hide_banner -loglevel panic",
)
ff.run()
time.sleep(0.05)
if os.path.isfile(outputName) and os.path.getsize(outputName) > 1024 * 1024:
os.remove(inputName)
#直接重命名到目标格式移除ffmpeg混流过程
os.rename(inputName, outputName)
#ff = ffmpy.FFmpeg(
# executable=self.bin["ffmpeg"],
# inputs={inputName: None},
# outputs={outputName: "-c:a copy"},
# global_options="-vn -sn -y -hide_banner -loglevel panic",
#)
#ff.run()
#time.sleep(0.05)
#if os.path.isfile(outputName) and os.path.getsize(outputName) > 1024 * 1024:
# os.remove(inputName)
self.logger.info("Done!")
return

Wyświetl plik

@ -0,0 +1,20 @@
{
"token": "token.bin",
"client_info":
{
"company_name": "Google",
"model_name": "Spacecastgfsc100",
"architecture_name": "armeabi-v7a",
"device_name": "Spacecastgfsc100",
"product_name": "Spacecastgfsc100",
"build_info": "boundary/nitrogen6x/nitrogen6x:6.0.1/1.0.0-ga/20160530:eng/release-keys",
"device_id": "R29vZ2xlU3BhY2VjYXN0Z2ZzYzEwMDAwMDAwMDAxAAA=",
"os_version": "8.0.12"
},
"capabilities":
{
"session_token": 1,
"max_hdcp_version": "HDCP_V1",
"oem_crypto_api_version": 9
}
}

Plik binarny nie jest wyświetlany.

25
requirements.txt 100644
Wyświetl plik

@ -0,0 +1,25 @@
bs4
colorama
wcwidth
requests
ffmpy
inquirer
pycountry
tqdm
future
cssutils
pycaption
pymediainfo
isodate
untangle
tldextract
unidecode
yarl
natsort
titlecase
prettytable
termcolor
pproxy
pysrt
protobuf
pycryptodomex

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -299,8 +299,11 @@ class netflix:
def downloadFile2(self, url, file_name):
with open(file_name, "wb") as f:
response = requests.get(url, stream=True)
#response.encoding = 'UTF-8'
# 避免ssl错误卡死关闭requests模块ssl证书验证verify=False
# 关闭后,控制台持续输出警告,建议开启证书验证,取消注释下行代码可以屏蔽
# requests.packages.urllib3.disable_warnings()
response = requests.get(url, stream=True, verify=False)
# response.encoding = 'UTF-8'
f.write(response.content)
return
@ -319,11 +322,6 @@ class netflix:
auto_file_renaming=False,
async_dns="skip",
retry_wait=5,
summary_interval=0,
enable_color=True,
connection=16,
concurrent_downloads=16,
split=16,
uri_selector="inorder",
console_log_level="warn",
download_result="hide",
@ -389,17 +387,19 @@ class netflix:
return "DDP5.1"
def RemuxVideo(self, outputVideoTemp, outputVideo, Name):
self.logger.info("\nRemuxing video...")
ff = ffmpy.FFmpeg(
executable=self.bin["ffmpeg"],
inputs={outputVideoTemp: None},
outputs={outputVideo: "-c copy"},
global_options="-y -hide_banner -loglevel warning",
)
ff.run()
time.sleep(50.0 / 1000.0)
os.remove(outputVideoTemp)
#self.logger.info("\nRemuxing video...")
#ff = ffmpy.FFmpeg(
# executable=self.bin["ffmpeg"],
# inputs={outputVideoTemp: None},
# outputs={outputVideo: "-c copy"},
# global_options="-y -hide_banner -loglevel warning",
#)
#ff.run()
#time.sleep(50.0 / 1000.0)
#os.remove(outputVideoTemp)
#解密视频文件直接重命名移除ffmpeg混流过程
os.rename(outputVideoTemp, outputVideo)
self.logger.info("Done!")
return True
@ -461,6 +461,7 @@ class netflix:
if not only1key == []:
KEYS = only1key
# 未解密视频传递ripprocess模块解密
self.ripprocess.mp4_decrypt(
encrypted=inputVideo,
decrypted=outputVideoTemp,
@ -470,18 +471,21 @@ class netflix:
silent=silent,
)
if not "NETFLIX".lower() in list(
map(lambda x: x.lower(), self.video_settings["skip_video_demux"])
):
self.ripprocess.DemuxVideo(
outputVideoTemp=outputVideoTemp,
outputVideo=outputVideo,
ffmpeg=True,
mp4box=False,
)
else:
os.rename(outputVideoTemp, outputVideo)
#不理解这个模块的判断逻辑操作是把解密的视频传入ffmpeg重新封装
#if not "NETFLIX".lower() in list(
# map(lambda x: x.lower(), self.video_settings["skip_video_demux"])
#):
# self.ripprocess.DemuxVideo(
# outputVideoTemp=outputVideoTemp,
# outputVideo=outputVideo,
# ffmpeg=True,
# mp4box=False,
# )
#else:
# os.rename(outputVideoTemp, outputVideo)
#移除判断,解密后视频文件直接重命名
os.rename(outputVideoTemp, outputVideo)
return True
def SubtitleThreader(self, subtitlesList, name):