easyrip 4.11.3__py3-none-any.whl → 4.12.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- easyrip/__init__.py +1 -10
- easyrip/easyrip_command.py +19 -9
- easyrip/easyrip_main.py +33 -34
- easyrip/easyrip_mlang/__init__.py +2 -11
- easyrip/easyrip_mlang/global_lang_val.py +26 -164
- easyrip/easyrip_mlang/lang_en.py +2 -2
- easyrip/easyrip_mlang/lang_tag_val.py +145 -0
- easyrip/easyrip_mlang/lang_zh_Hans_CN.py +12 -12
- easyrip/easyrip_mlang/translator.py +24 -29
- easyrip/global_val.py +1 -1
- easyrip/ripper/param.py +57 -17
- easyrip/ripper/ripper.py +278 -203
- {easyrip-4.11.3.dist-info → easyrip-4.12.0.dist-info}/METADATA +1 -1
- easyrip-4.12.0.dist-info/RECORD +32 -0
- easyrip-4.11.3.dist-info/RECORD +0 -31
- {easyrip-4.11.3.dist-info → easyrip-4.12.0.dist-info}/WHEEL +0 -0
- {easyrip-4.11.3.dist-info → easyrip-4.12.0.dist-info}/entry_points.txt +0 -0
- {easyrip-4.11.3.dist-info → easyrip-4.12.0.dist-info}/licenses/LICENSE +0 -0
- {easyrip-4.11.3.dist-info → easyrip-4.12.0.dist-info}/top_level.txt +0 -0
|
@@ -5,12 +5,7 @@ from time import sleep
|
|
|
5
5
|
from typing import Final
|
|
6
6
|
|
|
7
7
|
from ..easyrip_web.third_party_api import zhconvert
|
|
8
|
-
from .global_lang_val import
|
|
9
|
-
Lang_tag,
|
|
10
|
-
Lang_tag_language,
|
|
11
|
-
Lang_tag_region,
|
|
12
|
-
Lang_tag_script,
|
|
13
|
-
)
|
|
8
|
+
from .global_lang_val import Lang_tag
|
|
14
9
|
|
|
15
10
|
|
|
16
11
|
def translate_subtitles(
|
|
@@ -64,52 +59,52 @@ def translate_subtitles(
|
|
|
64
59
|
match Lang_tag.from_str(infix):
|
|
65
60
|
case (
|
|
66
61
|
Lang_tag(
|
|
67
|
-
language=
|
|
68
|
-
script=
|
|
62
|
+
language=Lang_tag.Language.zh,
|
|
63
|
+
script=Lang_tag.Script.Hans,
|
|
69
64
|
region=_,
|
|
70
65
|
)
|
|
71
66
|
| Lang_tag(
|
|
72
|
-
language=
|
|
67
|
+
language=Lang_tag.Language.zh,
|
|
73
68
|
script=_,
|
|
74
|
-
region=
|
|
69
|
+
region=Lang_tag.Region.CN,
|
|
75
70
|
)
|
|
76
71
|
):
|
|
77
72
|
# 简体 -> 繁体 or 非 CN 简体 CN 化
|
|
78
73
|
match target_lang_tag:
|
|
79
74
|
case Lang_tag(
|
|
80
|
-
language=
|
|
75
|
+
language=Lang_tag.Language.zh,
|
|
81
76
|
script=_,
|
|
82
|
-
region=
|
|
77
|
+
region=Lang_tag.Region.HK,
|
|
83
78
|
):
|
|
84
79
|
zhconvert_target_lang = zhconvert.Target_lang.HK
|
|
85
80
|
|
|
86
81
|
case Lang_tag(
|
|
87
|
-
language=
|
|
82
|
+
language=Lang_tag.Language.zh,
|
|
88
83
|
script=_,
|
|
89
|
-
region=
|
|
84
|
+
region=Lang_tag.Region.TW,
|
|
90
85
|
):
|
|
91
86
|
zhconvert_target_lang = zhconvert.Target_lang.TW
|
|
92
87
|
|
|
93
88
|
case Lang_tag(
|
|
94
|
-
language=
|
|
95
|
-
script=
|
|
89
|
+
language=Lang_tag.Language.zh,
|
|
90
|
+
script=Lang_tag.Script.Hant,
|
|
96
91
|
region=_,
|
|
97
92
|
):
|
|
98
93
|
zhconvert_target_lang = zhconvert.Target_lang.Hant
|
|
99
94
|
|
|
100
95
|
case Lang_tag(
|
|
101
|
-
language=
|
|
102
|
-
script=
|
|
103
|
-
region=
|
|
96
|
+
language=Lang_tag.Language.zh,
|
|
97
|
+
script=Lang_tag.Script.Hant,
|
|
98
|
+
region=Lang_tag.Region.CN,
|
|
104
99
|
): # 特殊情况
|
|
105
100
|
raise Exception(
|
|
106
101
|
gettext("Unsupported language tag: {}", target_lang_tag)
|
|
107
102
|
)
|
|
108
103
|
|
|
109
104
|
case Lang_tag(
|
|
110
|
-
language=
|
|
105
|
+
language=Lang_tag.Language.zh,
|
|
111
106
|
script=_,
|
|
112
|
-
region=
|
|
107
|
+
region=Lang_tag.Region.CN,
|
|
113
108
|
):
|
|
114
109
|
zhconvert_target_lang = zhconvert.Target_lang.CN
|
|
115
110
|
|
|
@@ -120,28 +115,28 @@ def translate_subtitles(
|
|
|
120
115
|
|
|
121
116
|
case (
|
|
122
117
|
Lang_tag(
|
|
123
|
-
language=
|
|
124
|
-
script=
|
|
118
|
+
language=Lang_tag.Language.zh,
|
|
119
|
+
script=Lang_tag.Script.Hant,
|
|
125
120
|
region=_,
|
|
126
121
|
)
|
|
127
122
|
| Lang_tag(
|
|
128
|
-
language=
|
|
123
|
+
language=Lang_tag.Language.zh,
|
|
129
124
|
script=_,
|
|
130
|
-
region=
|
|
125
|
+
region=Lang_tag.Region.HK | Lang_tag.Region.TW,
|
|
131
126
|
)
|
|
132
127
|
):
|
|
133
128
|
# 繁体 -> 简体
|
|
134
129
|
match target_lang_tag:
|
|
135
130
|
case Lang_tag(
|
|
136
|
-
language=
|
|
131
|
+
language=Lang_tag.Language.zh,
|
|
137
132
|
script=_,
|
|
138
|
-
region=
|
|
133
|
+
region=Lang_tag.Region.CN,
|
|
139
134
|
):
|
|
140
135
|
zhconvert_target_lang = zhconvert.Target_lang.CN
|
|
141
136
|
|
|
142
137
|
case Lang_tag(
|
|
143
|
-
language=
|
|
144
|
-
script=
|
|
138
|
+
language=Lang_tag.Language.zh,
|
|
139
|
+
script=Lang_tag.Script.Hans,
|
|
145
140
|
region=_,
|
|
146
141
|
):
|
|
147
142
|
zhconvert_target_lang = zhconvert.Target_lang.Hans
|
easyrip/global_val.py
CHANGED
|
@@ -4,7 +4,7 @@ from functools import cache
|
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
6
|
PROJECT_NAME = "Easy Rip"
|
|
7
|
-
PROJECT_VERSION = "4.
|
|
7
|
+
PROJECT_VERSION = "4.12.0"
|
|
8
8
|
PROJECT_TITLE = f"{PROJECT_NAME} v{PROJECT_VERSION}"
|
|
9
9
|
PROJECT_URL = "https://github.com/op200/EasyRip"
|
|
10
10
|
PROJECT_RELEASE_API = "https://api.github.com/repos/op200/EasyRip/releases/latest"
|
easyrip/ripper/param.py
CHANGED
|
@@ -29,6 +29,8 @@ class Preset_name(enum.Enum):
|
|
|
29
29
|
|
|
30
30
|
vvenc = "vvenc"
|
|
31
31
|
|
|
32
|
+
ffv1 = "ffv1"
|
|
33
|
+
|
|
32
34
|
h264_amf = "h264_amf"
|
|
33
35
|
h264_nvenc = "h264_nvenc"
|
|
34
36
|
h264_qsv = "h264_qsv"
|
|
@@ -66,6 +68,16 @@ class Preset_name(enum.Enum):
|
|
|
66
68
|
prefix=prefix,
|
|
67
69
|
)
|
|
68
70
|
|
|
71
|
+
def get_param_name_set[T: set[LiteralString] | None](
|
|
72
|
+
self, default: T = None, /
|
|
73
|
+
) -> set[LiteralString] | T:
|
|
74
|
+
return _PRESET__PARAM_NAME_SET.get(self, default)
|
|
75
|
+
|
|
76
|
+
def get_param_default_dict[T: dict[LiteralString, LiteralString] | None](
|
|
77
|
+
self, default: T = None, /
|
|
78
|
+
) -> dict[LiteralString, LiteralString] | T:
|
|
79
|
+
return _PRESET__DEFAULT_PARAMS.get(self, default)
|
|
80
|
+
|
|
69
81
|
|
|
70
82
|
class Audio_codec(enum.Enum):
|
|
71
83
|
copy = "copy"
|
|
@@ -119,8 +131,19 @@ class Muxer(enum.Enum):
|
|
|
119
131
|
)
|
|
120
132
|
return DEFAULT
|
|
121
133
|
|
|
134
|
+
@classmethod
|
|
135
|
+
def to_help_string(cls, prefix: str = ""):
|
|
136
|
+
return textwrap.indent(
|
|
137
|
+
reduce(
|
|
138
|
+
lambda acc,
|
|
139
|
+
add: f"{acc}{' ' if add.endswith(acc.split()[-1][-4:]) else '\n'}{add}",
|
|
140
|
+
tuple[str](cls._member_map_),
|
|
141
|
+
),
|
|
142
|
+
prefix=prefix,
|
|
143
|
+
)
|
|
144
|
+
|
|
122
145
|
|
|
123
|
-
|
|
146
|
+
_X265_PARAM_NAME_SET: Final[set[LiteralString]] = {
|
|
124
147
|
"crf",
|
|
125
148
|
"qpmin",
|
|
126
149
|
"qpmax",
|
|
@@ -148,6 +171,7 @@ X265_PARAMS_NAME: Final[tuple[LiteralString, ...]] = (
|
|
|
148
171
|
"open-gop",
|
|
149
172
|
"gop-lookahead",
|
|
150
173
|
"rc-lookahead",
|
|
174
|
+
"lookahead-slices",
|
|
151
175
|
"rect",
|
|
152
176
|
"amp",
|
|
153
177
|
"cbqpoffs",
|
|
@@ -160,8 +184,13 @@ X265_PARAMS_NAME: Final[tuple[LiteralString, ...]] = (
|
|
|
160
184
|
"max-tu-size",
|
|
161
185
|
"level-idc",
|
|
162
186
|
"sao",
|
|
163
|
-
|
|
164
|
-
|
|
187
|
+
# 性能
|
|
188
|
+
"lookahead-threads",
|
|
189
|
+
"asm",
|
|
190
|
+
"frame-threads",
|
|
191
|
+
"pools",
|
|
192
|
+
}
|
|
193
|
+
_X264_PARAM_NAME_SET: Final[set[LiteralString]] = {
|
|
165
194
|
"threads",
|
|
166
195
|
"crf",
|
|
167
196
|
"psy-rd",
|
|
@@ -182,8 +211,29 @@ X264_PARAMS_NAME: Final[tuple[LiteralString, ...]] = (
|
|
|
182
211
|
"fast-pskip",
|
|
183
212
|
"partitions",
|
|
184
213
|
"direct",
|
|
185
|
-
|
|
214
|
+
}
|
|
215
|
+
_FFV1_PARAM_NAME_SET: Final[set[LiteralString]] = {
|
|
216
|
+
"slicecrc",
|
|
217
|
+
"coder",
|
|
218
|
+
"context",
|
|
219
|
+
"qtable",
|
|
220
|
+
"remap_mode",
|
|
221
|
+
"remap_optimizer",
|
|
222
|
+
}
|
|
186
223
|
|
|
224
|
+
_PRESET__PARAM_NAME_SET: Final[dict[Preset_name, set[LiteralString]]] = {
|
|
225
|
+
Preset_name.x264: _X264_PARAM_NAME_SET,
|
|
226
|
+
Preset_name.x264fast: _X264_PARAM_NAME_SET,
|
|
227
|
+
Preset_name.x264slow: _X264_PARAM_NAME_SET,
|
|
228
|
+
Preset_name.x265: _X265_PARAM_NAME_SET,
|
|
229
|
+
Preset_name.x265fast4: _X265_PARAM_NAME_SET,
|
|
230
|
+
Preset_name.x265fast3: _X265_PARAM_NAME_SET,
|
|
231
|
+
Preset_name.x265fast2: _X265_PARAM_NAME_SET,
|
|
232
|
+
Preset_name.x265fast: _X265_PARAM_NAME_SET,
|
|
233
|
+
Preset_name.x265slow: _X265_PARAM_NAME_SET,
|
|
234
|
+
Preset_name.x265full: _X265_PARAM_NAME_SET,
|
|
235
|
+
Preset_name.ffv1: _FFV1_PARAM_NAME_SET,
|
|
236
|
+
}
|
|
187
237
|
|
|
188
238
|
_DEFAULT_X265_PARAMS: Final[dict[LiteralString, LiteralString]] = {
|
|
189
239
|
"crf": "20",
|
|
@@ -236,19 +286,9 @@ _DEFAULT_X265_PARAMS: Final[dict[LiteralString, LiteralString]] = {
|
|
|
236
286
|
}
|
|
237
287
|
|
|
238
288
|
|
|
239
|
-
|
|
240
|
-
Preset_name
|
|
241
|
-
|
|
242
|
-
Preset_name.x264slow: X264_PARAMS_NAME,
|
|
243
|
-
Preset_name.x265: X265_PARAMS_NAME,
|
|
244
|
-
Preset_name.x265fast4: X265_PARAMS_NAME,
|
|
245
|
-
Preset_name.x265fast3: X265_PARAMS_NAME,
|
|
246
|
-
Preset_name.x265fast2: X265_PARAMS_NAME,
|
|
247
|
-
Preset_name.x265fast: X265_PARAMS_NAME,
|
|
248
|
-
Preset_name.x265slow: X265_PARAMS_NAME,
|
|
249
|
-
Preset_name.x265full: X265_PARAMS_NAME,
|
|
250
|
-
}
|
|
251
|
-
DEFAULT_PRESET_PARAMS: Final[dict[Preset_name, dict[LiteralString, LiteralString]]] = {
|
|
289
|
+
_PRESET__DEFAULT_PARAMS: Final[
|
|
290
|
+
dict[Preset_name, dict[LiteralString, LiteralString]]
|
|
291
|
+
] = {
|
|
252
292
|
Preset_name.x264fast: {
|
|
253
293
|
"threads": "auto",
|
|
254
294
|
"crf": "20",
|