easyrip 3.13.2__py3-none-any.whl → 4.9.1__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 +5 -1
- easyrip/__main__.py +124 -15
- easyrip/easyrip_command.py +457 -148
- easyrip/easyrip_config/config.py +269 -0
- easyrip/easyrip_config/config_key.py +28 -0
- easyrip/easyrip_log.py +120 -42
- easyrip/easyrip_main.py +509 -259
- easyrip/easyrip_mlang/__init__.py +20 -45
- easyrip/easyrip_mlang/global_lang_val.py +18 -16
- easyrip/easyrip_mlang/lang_en.py +1 -1
- easyrip/easyrip_mlang/lang_zh_Hans_CN.py +101 -77
- easyrip/easyrip_mlang/translator.py +12 -10
- easyrip/easyrip_prompt.py +73 -0
- easyrip/easyrip_web/__init__.py +2 -1
- easyrip/easyrip_web/http_server.py +56 -42
- easyrip/easyrip_web/third_party_api.py +60 -8
- easyrip/global_val.py +21 -1
- easyrip/ripper/media_info.py +10 -3
- easyrip/ripper/param.py +482 -0
- easyrip/ripper/ripper.py +260 -574
- easyrip/ripper/sub_and_font/__init__.py +10 -0
- easyrip/ripper/{font_subset → sub_and_font}/ass.py +95 -84
- easyrip/ripper/{font_subset → sub_and_font}/font.py +72 -79
- easyrip/ripper/{font_subset → sub_and_font}/subset.py +122 -81
- easyrip/utils.py +129 -27
- easyrip-4.9.1.dist-info/METADATA +92 -0
- easyrip-4.9.1.dist-info/RECORD +31 -0
- easyrip/easyrip_config.py +0 -198
- easyrip/ripper/__init__.py +0 -10
- easyrip/ripper/font_subset/__init__.py +0 -7
- easyrip-3.13.2.dist-info/METADATA +0 -89
- easyrip-3.13.2.dist-info/RECORD +0 -29
- {easyrip-3.13.2.dist-info → easyrip-4.9.1.dist-info}/WHEEL +0 -0
- {easyrip-3.13.2.dist-info → easyrip-4.9.1.dist-info}/entry_points.txt +0 -0
- {easyrip-3.13.2.dist-info → easyrip-4.9.1.dist-info}/licenses/LICENSE +0 -0
- {easyrip-3.13.2.dist-info → easyrip-4.9.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: easyrip
|
|
3
|
+
Version: 4.9.1
|
|
4
|
+
Author: op200
|
|
5
|
+
License-Expression: AGPL-3.0-or-later
|
|
6
|
+
Project-URL: Homepage, https://github.com/op200/EasyRip
|
|
7
|
+
Project-URL: Source, https://github.com/op200/EasyRip
|
|
8
|
+
Classifier: Topic :: Multimedia
|
|
9
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
|
14
|
+
Classifier: Operating System :: Microsoft :: Windows :: Windows 11
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
18
|
+
Classifier: Intended Audience :: Information Technology
|
|
19
|
+
Classifier: Typing :: Typed
|
|
20
|
+
Requires-Python: >=3.12
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: prompt-toolkit>=3.0.52
|
|
24
|
+
Requires-Dist: fonttools>=4.61.1
|
|
25
|
+
Requires-Dist: pycryptodome>=3.23.0
|
|
26
|
+
Dynamic: license-file
|
|
27
|
+
|
|
28
|
+
# Easy Rip
|
|
29
|
+
|
|
30
|
+
Self-use codec tool
|
|
31
|
+
自用压制工具
|
|
32
|
+
|
|
33
|
+
**[Easy Rip Web Panel
|
|
34
|
+
Easy Rip 网页版控制台](https://op200.github.io/EasyRip-WebPanel/)**
|
|
35
|
+
|
|
36
|
+
## Start
|
|
37
|
+
|
|
38
|
+
1. Install [Python](https://www.python.org/)
|
|
39
|
+
安装 [Python](https://www.python.org/)
|
|
40
|
+
2. Install Easy Rip using pip: `pip install -U easyrip`
|
|
41
|
+
使用 pip 安装 Easy Rip: `pip install -U easyrip`
|
|
42
|
+
3. The you can use Easy Rip directly, run the command `easyrip`
|
|
43
|
+
然后你就可以直接 Easy Rip 了,运行命令 `easyrip`
|
|
44
|
+
|
|
45
|
+
* (If you have special requirements and want to use a separate file, you can download it from [Github Actions](https://github.com/op200/EasyRip/actions))
|
|
46
|
+
(如果你有特殊需求,想使用独立文件,可以在 [Github Actions](https://github.com/op200/EasyRip/actions) 中下载)
|
|
47
|
+
* (The file `BatchScriptPackage` in [Releases](https://github.com/op200/EasyRip/releases) is a bat script collection. It is used to facilitate ordinary users, it only has Chinese.)
|
|
48
|
+
([Releases](https://github.com/op200/EasyRip/releases) 中每隔一段时间发布一次名为 `BatchScriptPackage` 的 bat 脚本包,用于方便一般用户,其内只有中文。)
|
|
49
|
+
|
|
50
|
+
## Usage
|
|
51
|
+
|
|
52
|
+
Run `easyrip`, input `help` to get help doc
|
|
53
|
+
运行 `easyrip`,键入 `help` 获取帮助文档
|
|
54
|
+
|
|
55
|
+
[View usage in wiki
|
|
56
|
+
在 Wiki 中查看用法](https://github.com/op200/EasyRip/wiki)
|
|
57
|
+
|
|
58
|
+
## Dependency
|
|
59
|
+
|
|
60
|
+
* ### Python 3.14 (must >=3.12)
|
|
61
|
+
|
|
62
|
+
If you want to develop, you need to install dependencies. If you just want to use them, you don't need to manually install dependencies.
|
|
63
|
+
如果你想开发,需要安装依赖,如果你只是想使用,不需要手动安装依赖。
|
|
64
|
+
|
|
65
|
+
```pwsh
|
|
66
|
+
pip install -U prompt-toolkit fonttools pycryptodome
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
* [prompt-toolkit](https://pypi.org/project/prompt-toolkit/)
|
|
70
|
+
* [fonttools](https://pypi.org/project/fonttools/)
|
|
71
|
+
* [pycryptodome](https://pypi.org/project/pycryptodome/)
|
|
72
|
+
|
|
73
|
+
* ### CLI
|
|
74
|
+
|
|
75
|
+
Command line dependencies are necessary.
|
|
76
|
+
命令行依赖是必须的。
|
|
77
|
+
|
|
78
|
+
* [ffmpeg & ffprobe](https://ffmpeg.org/)
|
|
79
|
+
* [flac](https://xiph.org/flac/)
|
|
80
|
+
* [mp4box](https://gpac.io/)
|
|
81
|
+
* [mp4fpsmod](https://github.com/nu774/mp4fpsmod)
|
|
82
|
+
* [mkvpropedit & mkvmerge](https://mkvtoolnix.download/)
|
|
83
|
+
<!-- * [MediaInfo](https://mediaarea.net/en/MediaInfo) -->
|
|
84
|
+
|
|
85
|
+
## Supported languages
|
|
86
|
+
|
|
87
|
+
* en
|
|
88
|
+
* zh-Hans-CN
|
|
89
|
+
|
|
90
|
+
If you want to add or modify translation, edit the `easyrip/easyrip_mlang`
|
|
91
|
+
|
|
92
|
+
Or add translate file, see [Wiki](https://github.com/op200/EasyRip/wiki/Language-file) for details
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
easyrip/__init__.py,sha256=PIvSPDgswsIkWL4dsCe87knnxKmtvcrWYzmqAwZix_M,765
|
|
2
|
+
easyrip/__main__.py,sha256=bPVlHqJb3BG-qZOY4JlJdKj7MKeRb_3EfoMbfoNN-gU,4943
|
|
3
|
+
easyrip/easyrip_command.py,sha256=X9_8t9Sxl1-gILpsQ5PueCwozTQgjgL2cImzOZ6pO7w,27837
|
|
4
|
+
easyrip/easyrip_log.py,sha256=i5r3OPGQ55c3_zCN0fmriPXiWxibq-w35FbNT7VfuuM,15610
|
|
5
|
+
easyrip/easyrip_main.py,sha256=QgIrsonjXNin72nv7WWePTlpj9soGZCBVv1cwFNS4a4,44691
|
|
6
|
+
easyrip/easyrip_prompt.py,sha256=A5S7ybeJSGFkCmwdJ9TCQ_-lde7NWgkbFytZ2KnvkWI,2145
|
|
7
|
+
easyrip/global_val.py,sha256=8kU9EXFlb7UoXTfTdW6l038FqRbwAH1iUaWJRPSuLtg,773
|
|
8
|
+
easyrip/utils.py,sha256=N1rMF1MyoC-YFBgy10_u29cFoowfhR-5Viea93O7wQ4,8750
|
|
9
|
+
easyrip/easyrip_config/config.py,sha256=aj6Vg1rJkvICSTZ0ZONznR_MkvVr5u5ngkX_zfZopvU,9859
|
|
10
|
+
easyrip/easyrip_config/config_key.py,sha256=_jjdKOunskUoG7UUWOz3QZK-s4LF_x6hmM9MKttyS2Q,766
|
|
11
|
+
easyrip/easyrip_mlang/__init__.py,sha256=QHZt4BYJFkJuaPkN89pt_zkM2grifJakyRZbeyfH8f4,1893
|
|
12
|
+
easyrip/easyrip_mlang/global_lang_val.py,sha256=Un20KGMVVMQbOaV_7VaHg3E1dvK2Y7kI1cPzq_sFWKY,9984
|
|
13
|
+
easyrip/easyrip_mlang/lang_en.py,sha256=heUSPeVtY1Nf9eDhrjPM28N3PLsu62op3llbXAfXvAs,140
|
|
14
|
+
easyrip/easyrip_mlang/lang_zh_Hans_CN.py,sha256=N--5dJI9FS3bjZkVVI5htNBvOprvAtkIYjNoTTlvn-Y,18642
|
|
15
|
+
easyrip/easyrip_mlang/translator.py,sha256=Vg0S0p2rpMNAy3LHTdK7qKFdkPEXlOoCCXcaH7PyAC4,5939
|
|
16
|
+
easyrip/easyrip_web/__init__.py,sha256=tMyEeaSGeEJjND7MF0MBv9aDiDgaO3MOnppwxA70U2c,177
|
|
17
|
+
easyrip/easyrip_web/http_server.py,sha256=iyulCAFQrJlz86Lrr-Dm3fhOnNCf79Bp6fVHhr0ephY,8350
|
|
18
|
+
easyrip/easyrip_web/third_party_api.py,sha256=GhP6LmR1sVMeLLbnj82r-QYjoUdSnyaU9xp0LRnRLsw,4623
|
|
19
|
+
easyrip/ripper/media_info.py,sha256=mQq_vbQ7S9fWpb39HLkoZlAL-pqNfwxewv6X776Nf50,5078
|
|
20
|
+
easyrip/ripper/param.py,sha256=y1n2XaW55TJQ_r858pB4kYZVgT6TRpmS5vv9iMEIESc,11736
|
|
21
|
+
easyrip/ripper/ripper.py,sha256=yrqVlLLe68RZI9BVVMAEJ4AplrwlvBDt8h0m3yLrO9o,50345
|
|
22
|
+
easyrip/ripper/sub_and_font/__init__.py,sha256=cBT7mxL7RRFaJXFPXuZ7RT-YK6FbnanaU5v6U9BOquw,153
|
|
23
|
+
easyrip/ripper/sub_and_font/ass.py,sha256=eGi1eIDWAV1Ti_BYIAcAMwrAlXJ5f_zGYte3nNu4PeE,25532
|
|
24
|
+
easyrip/ripper/sub_and_font/font.py,sha256=X2dPcPzbwQf3fv_g_mxO-zY7puVAX9Nv-9QHn88q4oA,7745
|
|
25
|
+
easyrip/ripper/sub_and_font/subset.py,sha256=qGH3H26nHnyGFfFwvktEIKncHpm086DqxYjVhNoVDdM,18654
|
|
26
|
+
easyrip-4.9.1.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
27
|
+
easyrip-4.9.1.dist-info/METADATA,sha256=M2A05LL_xR25O-Gx1AY0O0XproQkXhc2e6bfE-AU2F4,3506
|
|
28
|
+
easyrip-4.9.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
29
|
+
easyrip-4.9.1.dist-info/entry_points.txt,sha256=D6GBMMTzZ-apgX76KyZ6jxMmIFqGYwU9neeLLni_qKI,49
|
|
30
|
+
easyrip-4.9.1.dist-info/top_level.txt,sha256=kuEteBXm-Gf90jRQgH3-fTo-Z-Q6czSuUEqY158H4Ww,8
|
|
31
|
+
easyrip-4.9.1.dist-info/RECORD,,
|
easyrip/easyrip_config.py
DELETED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import os
|
|
3
|
-
import sys
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
|
|
6
|
-
from . import global_val
|
|
7
|
-
from .easyrip_log import log
|
|
8
|
-
from .easyrip_mlang import all_supported_lang_map, gettext
|
|
9
|
-
|
|
10
|
-
PROJECT_NAME = global_val.PROJECT_NAME
|
|
11
|
-
CONFIG_VERSION = "2.9.4"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class config:
|
|
15
|
-
_config_dir: Path
|
|
16
|
-
_config_file: Path
|
|
17
|
-
_config: dict | None = None
|
|
18
|
-
|
|
19
|
-
@classmethod
|
|
20
|
-
def init(cls):
|
|
21
|
-
if sys.platform == "win32":
|
|
22
|
-
# Windows: C:\Users\<用户名>\AppData\Roaming\<app_name>
|
|
23
|
-
cls._config_dir = Path(os.getenv("APPDATA", ""))
|
|
24
|
-
elif sys.platform == "darwin":
|
|
25
|
-
# macOS: ~/Library/Application Support/<app_name>
|
|
26
|
-
cls._config_dir = (
|
|
27
|
-
Path(os.path.expanduser("~")) / "Library" / "Application Support"
|
|
28
|
-
)
|
|
29
|
-
else:
|
|
30
|
-
# Linux: ~/.config/<app_name>
|
|
31
|
-
cls._config_dir = Path(os.path.expanduser("~")) / ".config"
|
|
32
|
-
cls._config_dir = Path(cls._config_dir) / PROJECT_NAME
|
|
33
|
-
cls._config_file = Path(cls._config_dir) / "config.json"
|
|
34
|
-
|
|
35
|
-
if not cls._config_file.is_file():
|
|
36
|
-
cls._config_dir.mkdir(exist_ok=True)
|
|
37
|
-
with cls._config_file.open("wt", encoding="utf-8", newline="\n") as f:
|
|
38
|
-
json.dump(
|
|
39
|
-
{
|
|
40
|
-
"version": CONFIG_VERSION,
|
|
41
|
-
"user_profile": {
|
|
42
|
-
"language": "auto",
|
|
43
|
-
"check_update": True,
|
|
44
|
-
"check_dependent": True,
|
|
45
|
-
"startup_directory": "",
|
|
46
|
-
"force_log_file_path": "",
|
|
47
|
-
"log_print_level": log.LogLevel.send.name,
|
|
48
|
-
"log_write_level": log.LogLevel.send.name,
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
f,
|
|
52
|
-
ensure_ascii=False,
|
|
53
|
-
indent=3,
|
|
54
|
-
)
|
|
55
|
-
else:
|
|
56
|
-
with cls._config_file.open("rt", encoding="utf-8") as f:
|
|
57
|
-
try:
|
|
58
|
-
data = json.load(f)
|
|
59
|
-
if data.get("version") != CONFIG_VERSION:
|
|
60
|
-
log.warning(
|
|
61
|
-
"The config version is not match, use '{}' to regenerate config file",
|
|
62
|
-
"config clear",
|
|
63
|
-
)
|
|
64
|
-
except json.JSONDecodeError as e:
|
|
65
|
-
log.error(f"{e!r} {e}", deep=True)
|
|
66
|
-
|
|
67
|
-
cls._read_config()
|
|
68
|
-
|
|
69
|
-
@classmethod
|
|
70
|
-
def open_config_dir(cls):
|
|
71
|
-
if not cls._config_dir.is_dir():
|
|
72
|
-
cls.init()
|
|
73
|
-
os.startfile(cls._config_dir)
|
|
74
|
-
|
|
75
|
-
@classmethod
|
|
76
|
-
def regenerate_config(cls):
|
|
77
|
-
cls._config_file.unlink(missing_ok=True)
|
|
78
|
-
|
|
79
|
-
cls.init()
|
|
80
|
-
log.info("Regenerate config file")
|
|
81
|
-
|
|
82
|
-
@classmethod
|
|
83
|
-
def _read_config(cls) -> bool:
|
|
84
|
-
try:
|
|
85
|
-
if not cls._config_dir.is_dir():
|
|
86
|
-
raise AttributeError
|
|
87
|
-
except AttributeError:
|
|
88
|
-
cls.init()
|
|
89
|
-
|
|
90
|
-
with cls._config_file.open("rt", encoding="utf-8") as f:
|
|
91
|
-
try:
|
|
92
|
-
cls._config = json.load(f)
|
|
93
|
-
except json.JSONDecodeError as e:
|
|
94
|
-
log.error(f"{e!r} {e}", deep=True)
|
|
95
|
-
return False
|
|
96
|
-
return True
|
|
97
|
-
|
|
98
|
-
@classmethod
|
|
99
|
-
def _write_config(cls, new_config: dict | None = None) -> bool:
|
|
100
|
-
if not cls._config_dir.is_dir():
|
|
101
|
-
cls.init()
|
|
102
|
-
if new_config is not None:
|
|
103
|
-
cls._config = new_config
|
|
104
|
-
del new_config
|
|
105
|
-
|
|
106
|
-
with cls._config_file.open("wt", encoding="utf-8", newline="\n") as f:
|
|
107
|
-
try:
|
|
108
|
-
json.dump(cls._config, f, ensure_ascii=False, indent=3)
|
|
109
|
-
except json.JSONDecodeError as e:
|
|
110
|
-
log.error(f"{e!r} {e}", deep=True)
|
|
111
|
-
return False
|
|
112
|
-
return True
|
|
113
|
-
|
|
114
|
-
@classmethod
|
|
115
|
-
def set_user_profile(cls, key: str, val: str | int | float | bool) -> bool:
|
|
116
|
-
if cls._config is None:
|
|
117
|
-
if not cls._read_config():
|
|
118
|
-
return False
|
|
119
|
-
|
|
120
|
-
if cls._config is None:
|
|
121
|
-
log.error("Config is None")
|
|
122
|
-
return False
|
|
123
|
-
|
|
124
|
-
if "user_profile" not in cls._config:
|
|
125
|
-
log.error("User profile is not found in config")
|
|
126
|
-
return False
|
|
127
|
-
|
|
128
|
-
if key in cls._config["user_profile"]:
|
|
129
|
-
cls._config["user_profile"][key] = val
|
|
130
|
-
else:
|
|
131
|
-
log.error("Key '{}' is not found in user profile", key)
|
|
132
|
-
return False
|
|
133
|
-
return cls._write_config()
|
|
134
|
-
|
|
135
|
-
@classmethod
|
|
136
|
-
def get_user_profile(cls, key: str) -> str | int | float | bool | None:
|
|
137
|
-
if cls._config is None:
|
|
138
|
-
cls._read_config()
|
|
139
|
-
if cls._config is None:
|
|
140
|
-
return None
|
|
141
|
-
if not isinstance(cls._config["user_profile"], dict):
|
|
142
|
-
log.error("User profile is not a valid dictionary")
|
|
143
|
-
return None
|
|
144
|
-
if key not in cls._config["user_profile"]:
|
|
145
|
-
log.error("Key '{}' is not found in user profile", key)
|
|
146
|
-
return None
|
|
147
|
-
return cls._config["user_profile"][key]
|
|
148
|
-
|
|
149
|
-
@classmethod
|
|
150
|
-
def show_config_list(cls):
|
|
151
|
-
if cls._config is None:
|
|
152
|
-
cls.init()
|
|
153
|
-
if cls._config is None:
|
|
154
|
-
log.error("Config is None")
|
|
155
|
-
return
|
|
156
|
-
|
|
157
|
-
user_profile: dict = cls._config["user_profile"]
|
|
158
|
-
length_key = max(len(k) for k in user_profile.keys())
|
|
159
|
-
length_val = max(len(str(v)) for v in user_profile.values())
|
|
160
|
-
for k, v in user_profile.items():
|
|
161
|
-
log.send(
|
|
162
|
-
f"{k:>{length_key}} = {v!s:<{length_val}} - {cls._get_config_about(k)}",
|
|
163
|
-
)
|
|
164
|
-
|
|
165
|
-
@classmethod
|
|
166
|
-
def _get_config_about(cls, key: str) -> str:
|
|
167
|
-
return (
|
|
168
|
-
{
|
|
169
|
-
"language": gettext(
|
|
170
|
-
"Easy Rip's language, support incomplete matching. Support: {}",
|
|
171
|
-
", ".join(
|
|
172
|
-
("auto", *(str(tag) for tag in all_supported_lang_map.keys()))
|
|
173
|
-
),
|
|
174
|
-
),
|
|
175
|
-
"check_update": gettext("Auto check the update of Easy Rip"),
|
|
176
|
-
"check_dependent": gettext(
|
|
177
|
-
"Auto check the versions of all dependent programs"
|
|
178
|
-
),
|
|
179
|
-
"startup_directory": gettext(
|
|
180
|
-
"Program startup directory, when the value is empty, starts in the working directory"
|
|
181
|
-
),
|
|
182
|
-
"force_log_file_path": gettext(
|
|
183
|
-
"Force change of log file path, when the value is empty, it is the working directory"
|
|
184
|
-
),
|
|
185
|
-
"log_print_level": gettext(
|
|
186
|
-
"Logs this level and above will be printed, and if the value is '{}', they will not be printed. Support: {}",
|
|
187
|
-
log.LogLevel.none.name,
|
|
188
|
-
", ".join(log.LogLevel._member_names_),
|
|
189
|
-
),
|
|
190
|
-
"log_write_level": gettext(
|
|
191
|
-
"Logs this level and above will be written, and if the value is '{}', the '{}' only be written when 'server', they will not be written. Support: {}",
|
|
192
|
-
log.LogLevel.none.name,
|
|
193
|
-
log.LogLevel.send.name,
|
|
194
|
-
", ".join(log.LogLevel._member_names_),
|
|
195
|
-
),
|
|
196
|
-
}
|
|
197
|
-
| (cls._config or dict())
|
|
198
|
-
).get(key, "None about")
|
easyrip/ripper/__init__.py
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: easyrip
|
|
3
|
-
Version: 3.13.2
|
|
4
|
-
Requires-Python: >=3.12
|
|
5
|
-
Description-Content-Type: text/markdown
|
|
6
|
-
License-File: LICENSE
|
|
7
|
-
Requires-Dist: pycryptodome>=3.21.0
|
|
8
|
-
Requires-Dist: fonttools>=4.60.1
|
|
9
|
-
Dynamic: description
|
|
10
|
-
Dynamic: description-content-type
|
|
11
|
-
Dynamic: license-file
|
|
12
|
-
Dynamic: requires-dist
|
|
13
|
-
Dynamic: requires-python
|
|
14
|
-
|
|
15
|
-
# Easy Rip
|
|
16
|
-
|
|
17
|
-
Self-use codec tool
|
|
18
|
-
自用压制工具
|
|
19
|
-
|
|
20
|
-
**[Easy Rip Web Panel
|
|
21
|
-
Easy Rip 网页版控制台](https://op200.github.io/EasyRip-WebPanel/)**
|
|
22
|
-
|
|
23
|
-
## Start
|
|
24
|
-
|
|
25
|
-
* If you have Python environment
|
|
26
|
-
如果你有 Python 环境
|
|
27
|
-
|
|
28
|
-
1. You can `pip install -U git+https://github.com/op200/EasyRip.git` to pull the version from the repositoryand, or `pip install -U easyrip` to obtain the stable version.
|
|
29
|
-
你可以 `pip install -U git+https://github.com/op200/EasyRip.git` 获取仓库中的版本,或者 `pip install -U easyrip` 获取稳定版。
|
|
30
|
-
|
|
31
|
-
2. After installation, run `easyrip` on command.
|
|
32
|
-
安装后直接在命令行运行 `easyrip`。
|
|
33
|
-
|
|
34
|
-
* Or if you want to download a standalone exe file (not recommended)
|
|
35
|
-
或者如果你想下载一个独立的可执行文件(不推荐)
|
|
36
|
-
|
|
37
|
-
*
|
|
38
|
-
Download exe in [Actions](https://github.com/op200/EasyRip/actions).
|
|
39
|
-
Or download exe or bat script collection in [Releases](https://github.com/op200/EasyRip/releases).
|
|
40
|
-
|
|
41
|
-
在 [Actions](https://github.com/op200/EasyRip/actions) 中下载最新的 exe。
|
|
42
|
-
或者在 [Releases](https://github.com/op200/EasyRip/releases) 中下载 exe 或 bat 脚本包。
|
|
43
|
-
|
|
44
|
-
*
|
|
45
|
-
The file `BatchScriptPackage` in [Releases](https://github.com/op200/EasyRip/releases) is a bat script collection.
|
|
46
|
-
It is used to facilitate ordinary users, it only has Chinese.
|
|
47
|
-
|
|
48
|
-
[Releases](https://github.com/op200/EasyRip/releases) 中每隔一段时间发布一次名为 BatchScriptPackage 的 bat 脚本包
|
|
49
|
-
用于方便一般用户,其内只有中文
|
|
50
|
-
|
|
51
|
-
## Usage
|
|
52
|
-
|
|
53
|
-
Run `easyrip`, input `help` to get help doc
|
|
54
|
-
运行 `easyrip`,键入 `help` 获取帮助文档
|
|
55
|
-
|
|
56
|
-
[View usage in wiki
|
|
57
|
-
在 Wiki 中查看用法](https://github.com/op200/EasyRip/wiki)
|
|
58
|
-
|
|
59
|
-
## Dependency
|
|
60
|
-
|
|
61
|
-
* ### Python 3.13 (must >=3.12)
|
|
62
|
-
|
|
63
|
-
If you want to develop, you need to install dependencies. If you just want to use them, you don't need to install additional dependencies.
|
|
64
|
-
如果你想开发,需要安装依赖,如果你只是想使用,不需要额外安装依赖。
|
|
65
|
-
|
|
66
|
-
```pwsh
|
|
67
|
-
pip install -U pycryptodome fonttools
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
* ### CLI
|
|
71
|
-
|
|
72
|
-
Command line dependencies are necessary.
|
|
73
|
-
命令行依赖是必须的。
|
|
74
|
-
|
|
75
|
-
* [ffmpeg & ffprobe](https://ffmpeg.org/)
|
|
76
|
-
* [flac](https://xiph.org/flac/)
|
|
77
|
-
* [mp4box](https://gpac.io/)
|
|
78
|
-
* [mp4fpsmod](https://github.com/nu774/mp4fpsmod)
|
|
79
|
-
* [mkvpropedit & mkvmerge](https://mkvtoolnix.download/)
|
|
80
|
-
<!-- * [MediaInfo](https://mediaarea.net/en/MediaInfo) -->
|
|
81
|
-
|
|
82
|
-
## Supported languages
|
|
83
|
-
|
|
84
|
-
* en
|
|
85
|
-
* zh-CN
|
|
86
|
-
|
|
87
|
-
If you want to add or modify translation, edit the `easyrip/easyrip_mlang`
|
|
88
|
-
|
|
89
|
-
Or add translate file, see [Wiki](https://github.com/op200/EasyRip/wiki/Language-file) for details
|
easyrip-3.13.2.dist-info/RECORD
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
easyrip/__init__.py,sha256=BlDIN9htmQXETt7M8pjYSOVrKevuuyfRn2ajQI4J7us,648
|
|
2
|
-
easyrip/__main__.py,sha256=sHDhRLs4waIZmA9vj7XZYzElbNoaLYF2dYYprTnStF0,988
|
|
3
|
-
easyrip/easyrip_command.py,sha256=1dZWJI6J4r9S4PbkqLQe08NwFpRJdLa66tS72iaOVHA,17176
|
|
4
|
-
easyrip/easyrip_config.py,sha256=sEWHPFo3tHd7lNshX9D2sAFUseAMuyF86OfU19SQaGU,7274
|
|
5
|
-
easyrip/easyrip_log.py,sha256=B3Bu5FeNkVkIr73YX1JtAfeTWGed1GEKoMcjodU0W7g,12722
|
|
6
|
-
easyrip/easyrip_main.py,sha256=wMRWNtJCMQ_S63eEJP0xjj1ZO6rNEvpaOO1knF_hm1s,34217
|
|
7
|
-
easyrip/global_val.py,sha256=4xOeGRlE_pig5HNb3joi5Wq4trs7iwTpbUnuN2kCfEQ,238
|
|
8
|
-
easyrip/utils.py,sha256=jJVcSGhniG0gzoFxYFNlpS-h7x4XTlf2qyrGIJFbnrU,5499
|
|
9
|
-
easyrip/easyrip_mlang/__init__.py,sha256=0XYa0kcnUPH1aaRV3ceIPuYO1Oov8LBxgVjel-1slvI,3226
|
|
10
|
-
easyrip/easyrip_mlang/global_lang_val.py,sha256=sxiyqUnc63OD6dJrgEKXMelinCCvc3CYEZHoaLmMLCE,9992
|
|
11
|
-
easyrip/easyrip_mlang/lang_en.py,sha256=Gp8gZWx91SjvkrgZ_24l6-QbKVtKQjFRyEtue_LMaO0,138
|
|
12
|
-
easyrip/easyrip_mlang/lang_zh_Hans_CN.py,sha256=lmSCdykUA3EJx_QmLwDcF8qRigQHATmiJ3y3Do2UV1s,16413
|
|
13
|
-
easyrip/easyrip_mlang/translator.py,sha256=z3hnhCfySNolM3zyKaW9BcqxDWolUQxS_ENGQTUJ_1w,5885
|
|
14
|
-
easyrip/easyrip_web/__init__.py,sha256=D61bN2V-aEdvF4C_5eIqnWTbIMYme8hUC6E4sePxqz0,147
|
|
15
|
-
easyrip/easyrip_web/http_server.py,sha256=lhXcDnSMQE8EnuPzxknSZk7RKDL3Cm-iWoLbwvSijBM,8407
|
|
16
|
-
easyrip/easyrip_web/third_party_api.py,sha256=bFwdgae-iRHD7dXNRXw8rLNSyl0LQljFWfwQMTDoY34,2647
|
|
17
|
-
easyrip/ripper/__init__.py,sha256=o5gj8QRvkuVc0S9jbRjVOWXpLAaQKC0-n-o6Zx9Dowo,171
|
|
18
|
-
easyrip/ripper/media_info.py,sha256=N1xdoJ_Ojivqm7a6pMfPmIvwiPm0pGjKgBbkDPyC1qU,4973
|
|
19
|
-
easyrip/ripper/ripper.py,sha256=xwl8MkKwZ-wcb8OZmzGftabRDw5rbd7IkDubsU55SVI,65084
|
|
20
|
-
easyrip/ripper/font_subset/__init__.py,sha256=a6UoRH1AU1l5FkFgQ-wQxOswLmovgVUUl3rLaJnN8Co,88
|
|
21
|
-
easyrip/ripper/font_subset/ass.py,sha256=ncgTIHvM5XpXn4N-D6SOeiqGrItGhfyWEeqtEPaQEvA,25002
|
|
22
|
-
easyrip/ripper/font_subset/font.py,sha256=pulTYCNRqsUypcDPM_lX0xrpt6qWEwMIUmai-jH0qUE,8430
|
|
23
|
-
easyrip/ripper/font_subset/subset.py,sha256=li_sze_g9mTFzLFLM1U3tFiNXAlMsigQmBKdi0dl-IE,16761
|
|
24
|
-
easyrip-3.13.2.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
|
25
|
-
easyrip-3.13.2.dist-info/METADATA,sha256=8F71DMyphj7hgRw-MmJ0S4ugV4ZYMey-8jDcGeumuF0,3021
|
|
26
|
-
easyrip-3.13.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
27
|
-
easyrip-3.13.2.dist-info/entry_points.txt,sha256=D6GBMMTzZ-apgX76KyZ6jxMmIFqGYwU9neeLLni_qKI,49
|
|
28
|
-
easyrip-3.13.2.dist-info/top_level.txt,sha256=kuEteBXm-Gf90jRQgH3-fTo-Z-Q6czSuUEqY158H4Ww,8
|
|
29
|
-
easyrip-3.13.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|