diff options
| author | 2024-10-25 17:27:30 -0400 | |
|---|---|---|
| committer | 2024-10-25 17:27:30 -0400 | |
| commit | fc004701f923bb954a22c7fec2ae8d607e78cb2b (patch) | |
| tree | a5bea4ed6447ea43c099131430e3bd6182ee87d7 /gallery_dl/downloader | |
| parent | 0db541f524e1774865efebcbe5653e9ad76ea2e8 (diff) | |
New upstream version 1.27.7.upstream/1.27.7
Diffstat (limited to 'gallery_dl/downloader')
| -rw-r--r-- | gallery_dl/downloader/ytdl.py | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/gallery_dl/downloader/ytdl.py b/gallery_dl/downloader/ytdl.py index 950a72f..26f328d 100644 --- a/gallery_dl/downloader/ytdl.py +++ b/gallery_dl/downloader/ytdl.py @@ -62,10 +62,18 @@ class YoutubeDLDownloader(DownloaderBase): info_dict = kwdict.pop("_ytdl_info_dict", None) if not info_dict: + url = url[5:] try: - info_dict = ytdl_instance.extract_info(url[5:], download=False) + manifest = kwdict.pop("_ytdl_manifest", None) + if manifest: + info_dict = self._extract_manifest( + ytdl_instance, url, manifest) + else: + info_dict = self._extract_info(ytdl_instance, url) except Exception as exc: self.log.debug("", exc_info=exc) + self.log.warning("%s: %s", exc.__class__.__name__, exc) + if not info_dict: return False @@ -134,6 +142,42 @@ class YoutubeDLDownloader(DownloaderBase): ytdl_instance.process_info(entry) return True + def _extract_info(self, ytdl, url): + return ytdl.extract_info(url, download=False) + + def _extract_manifest(self, ytdl, url, manifest): + extr = ytdl.get_info_extractor("Generic") + video_id = extr._generic_id(url) + + if manifest == "hls": + try: + formats, subtitles = extr._extract_m3u8_formats_and_subtitles( + url, video_id, "mp4") + except AttributeError: + formats = extr._extract_m3u8_formats(url, video_id, "mp4") + subtitles = None + + elif manifest == "dash": + try: + formats, subtitles = extr._extract_mpd_formats_and_subtitles( + url, video_id) + except AttributeError: + formats = extr._extract_mpd_formats(url, video_id) + subtitles = None + + else: + self.log.error("Unsupported manifest type '%s'", manifest) + return None + + info_dict = { + "id" : video_id, + "title" : video_id, + "formats" : formats, + "subtitles": subtitles, + } + # extr._extra_manifest_info(info_dict, url) + return ytdl.process_ie_result(info_dict, download=False) + def _progress_hook(self, info): if info["status"] == "downloading" and \ info["elapsed"] >= self.progress: |
