DDownloader 0.3.7__tar.gz → 0.3.8__tar.gz

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.
Files changed (26) hide show
  1. ddownloader-0.3.8/DDownloader/modules/__init__.py +1 -0
  2. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/modules/banners.py +1 -1
  3. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/modules/downloader.py +3 -2
  4. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/modules/helper.py +63 -26
  5. {ddownloader-0.3.7 → ddownloader-0.3.8}/PKG-INFO +1 -1
  6. {ddownloader-0.3.7 → ddownloader-0.3.8}/pyproject.toml +2 -2
  7. ddownloader-0.3.7/DDownloader/modules/__init__.py +0 -1
  8. ddownloader-0.3.7/DDownloader/modules/__pycache__/__init__.cpython-310.pyc +0 -0
  9. ddownloader-0.3.7/DDownloader/modules/__pycache__/args_parser.cpython-310.pyc +0 -0
  10. ddownloader-0.3.7/DDownloader/modules/__pycache__/banners.cpython-310.pyc +0 -0
  11. ddownloader-0.3.7/DDownloader/modules/__pycache__/dash_downloader.cpython-310.pyc +0 -0
  12. ddownloader-0.3.7/DDownloader/modules/__pycache__/helper.cpython-310.pyc +0 -0
  13. ddownloader-0.3.7/DDownloader/modules/__pycache__/hls_downloader.cpython-310.pyc +0 -0
  14. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/__init__.py +0 -0
  15. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/bin/N_m3u8DL-RE.exe +0 -0
  16. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/bin/aria2c.exe +0 -0
  17. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/bin/ffmpeg.exe +0 -0
  18. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/bin/mkvmerge.exe +0 -0
  19. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/bin/mp4decrypt.exe +0 -0
  20. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/bin/shaka-packager.exe +0 -0
  21. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/bin/yt-dlp.exe +0 -0
  22. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/main.py +0 -0
  23. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/modules/args_parser.py +0 -0
  24. {ddownloader-0.3.7 → ddownloader-0.3.8}/DDownloader/modules/streamlink.py +0 -0
  25. {ddownloader-0.3.7 → ddownloader-0.3.8}/LICENSE +0 -0
  26. {ddownloader-0.3.7 → ddownloader-0.3.8}/README.md +0 -0
@@ -0,0 +1 @@
1
+ __version__ = "0.3.8"
@@ -23,7 +23,7 @@ def banners():
23
23
  stdout.write(""+Fore.YELLOW +"╔════════════════════════════════════════════════════════════════════════════╝\n")
24
24
  stdout.write(""+Fore.YELLOW +"║ \x1b[38;2;255;20;147m• "+Fore.GREEN+"GITHUB "+Fore.RED+" |"+Fore.LIGHTWHITE_EX+" GITHUB.COM/THATNOTEASY "+Fore.YELLOW+"║\n")
25
25
  stdout.write(""+Fore.YELLOW +"╚════════════════════════════════════════════════════════════════════════════╝\n")
26
- print(f"{Fore.YELLOW}[DDownloader] - {Fore.GREEN}A DRM-Protected & Non-Protected Content Downloader - {Fore.RED}[V0.3.7] \n{Fore.RESET}")
26
+ print(f"{Fore.YELLOW}[DDownloader] - {Fore.GREEN}A DRM-Protected & Non-Protected Content Downloader - {Fore.RED}[V0.3.8] \n{Fore.RESET}")
27
27
 
28
28
  # =========================================================================================================== #
29
29
 
@@ -61,15 +61,16 @@ class DOWNLOADER:
61
61
  # =========================================================================================================== #
62
62
 
63
63
  def _build_command(self):
64
- self.binary_path = self._get_binary_path("N_m3u8DL-RE")
65
64
  command = [
66
- self.binary_path,
65
+ self._get_binary_path("N_m3u8DL-RE"),
67
66
  f'"{self.manifest_url}"',
68
67
  '-mt',
69
68
  '-M', 'format=mp4',
70
69
  '--save-dir', '"downloads"',
71
70
  '--tmp-dir', '"downloads"',
72
71
  '--del-after-done',
72
+ '--decryption-engine', '"FFMPEG"',
73
+ '--decryption-binary-path', f'"{self._get_binary_path("ffmpeg")}"',
73
74
  '--save-name', f'"{self.output_name}"'
74
75
  ]
75
76
 
@@ -92,52 +92,89 @@ def detect_platform():
92
92
 
93
93
  def get_media_info(file_path):
94
94
  try:
95
- logger.info(f"Parsing media file: {file_path}")
95
+ logger.info(f"📂 Parsing media file: {file_path}")
96
96
  media_info = MediaInfo.parse(file_path)
97
- result = {"file_path": file_path, "tracks": []}
97
+
98
+ result = {
99
+ "file_path": file_path,
100
+ "tracks": [],
101
+ "container": None,
102
+ "file_size": None,
103
+ "duration": None,
104
+ "bit_rate": None,
105
+ }
98
106
 
99
107
  for track in media_info.tracks:
100
108
  track_info = {"track_type": track.track_type}
101
109
 
102
- if track.track_type == "Video":
110
+ if track.track_type == "General":
111
+ result.update({
112
+ "container": getattr(track, "format", None),
113
+ "file_size": getattr(track, "file_size", None),
114
+ "duration": getattr(track, "duration", None),
115
+ "bit_rate": getattr(track, "overall_bit_rate", None),
116
+ "title": getattr(track, "title", None),
117
+ "encoded_application": getattr(track, "encoded_application", None),
118
+ "encoded_library": getattr(track, "encoded_library", None),
119
+ "writing_library": getattr(track, "writing_library", None),
120
+ "file_creation_date": getattr(track, "file_created_date", None),
121
+ })
122
+
123
+ elif track.track_type == "Video":
103
124
  track_info.update({
104
- "codec": track.codec,
105
- "width": track.width,
106
- "height": track.height,
107
- "frame_rate": track.frame_rate,
108
- "bit_rate": track.bit_rate,
109
- "duration": track.duration,
110
- "aspect_ratio": track.display_aspect_ratio,
125
+ "codec": getattr(track, "codec_id", getattr(track, "format", None)),
126
+ "codec_profile": getattr(track, "format_profile", None),
127
+ "width": getattr(track, "width", None),
128
+ "height": getattr(track, "height", None),
129
+ "frame_rate": getattr(track, "frame_rate", None),
130
+ "bit_rate": getattr(track, "bit_rate", None),
131
+ "duration": getattr(track, "duration", None),
132
+ "aspect_ratio": getattr(track, "display_aspect_ratio", None),
133
+ "hdr_format": getattr(track, "hdr_format", None),
134
+ "bit_depth": getattr(track, "bit_depth", None),
135
+ "color_space": getattr(track, "colour_primaries", None),
136
+ "color_range": getattr(track, "colour_range", None),
137
+ "color_transfer": getattr(track, "transfer_characteristics", None),
138
+ "chroma_subsampling": getattr(track, "chroma_subsampling", None),
111
139
  })
140
+
112
141
  elif track.track_type == "Audio":
113
142
  track_info.update({
114
- "codec": track.codec,
115
- "channels": track.channel_s,
116
- "sample_rate": track.sampling_rate,
117
- "bit_rate": track.bit_rate,
118
- "duration": track.duration,
119
- "language": track.language,
143
+ "codec": getattr(track, "codec_id", getattr(track, "format", None)),
144
+ "codec_profile": getattr(track, "format_profile", None),
145
+ "channels": getattr(track, "channel_s", None),
146
+ "sample_rate": getattr(track, "sampling_rate", None),
147
+ "bit_rate": getattr(track, "bit_rate", None),
148
+ "duration": getattr(track, "duration", None),
149
+ "language": getattr(track, "language", "Unknown"),
150
+ "compression_mode": getattr(track, "compression_mode", None),
151
+ "bit_depth": getattr(track, "bit_depth", None),
120
152
  })
153
+
121
154
  elif track.track_type == "Text":
122
155
  track_info.update({
123
- "language": track.language,
124
- "format": track.format,
156
+ "format": getattr(track, "format", None),
157
+ "language": getattr(track, "language", "Unknown"),
158
+ "default": getattr(track, "default", None),
159
+ "forced": getattr(track, "forced", None),
160
+ "format_profile": getattr(track, "format_profile", None),
125
161
  })
126
- elif track.track_type == "General":
162
+
163
+ elif track.track_type == "Chapters":
127
164
  track_info.update({
128
- "file_size": track.file_size,
129
- "format": track.format,
130
- "duration": track.duration,
131
- "overall_bit_rate": track.overall_bit_rate,
165
+ "title": getattr(track, "title", None),
166
+ "chapter_count": getattr(track, "part_count", None),
132
167
  })
133
168
 
134
- result["tracks"].append(track_info)
169
+ if any(value is not None for value in track_info.values()): # Avoid empty entries
170
+ result["tracks"].append(track_info)
135
171
 
136
- logger.info(f"Successfully extracted media information for: {file_path}")
172
+ logger.info(f"Successfully extracted media info for: {file_path}")
137
173
  return result
138
174
 
139
175
  except Exception as e:
140
- logger.error(f"Error occurred while parsing media file '{file_path}': {e}")
176
+ logger.error(f"Error parsing media file '{file_path}': {e}")
141
177
  return None
178
+
142
179
 
143
180
  # =========================================================================================================== #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: DDownloader
3
- Version: 0.3.7
3
+ Version: 0.3.8
4
4
  Summary: A downloader for DRM-protected & Non DRM-protected content.
5
5
  License: MIT License
6
6
 
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "DDownloader"
7
- version = "0.3.7"
7
+ version = "0.3.8"
8
8
  description = "A downloader for DRM-protected & Non DRM-protected content."
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  authors = [
@@ -25,7 +25,7 @@ classifiers = [
25
25
 
26
26
  [tool.poetry]
27
27
  name = "DDownloader"
28
- version = "0.3.7"
28
+ version = "0.3.8"
29
29
  description = "A downloader for DRM-protected & Non DRM-protected content."
30
30
  authors = ["ThatNotEasy <apidotmy@proton.me>"]
31
31
  license = "MIT"
@@ -1 +0,0 @@
1
- __version__ = "0.3.7"
File without changes
File without changes