Python 获取youtube_dl进度挂钩中下载视频的URL
如何获取使用youtube_dl下载的视频的URL 我可以使用进度挂钩获取下载的其他特性,如文件路径:Python 获取youtube_dl进度挂钩中下载视频的URL,python,youtube-dl,Python,Youtube Dl,如何获取使用youtube_dl下载的视频的URL 我可以使用进度挂钩获取下载的其他特性,如文件路径: def progress_hook(response): if response["status"] == "finished": file_name = response["filename"] ydl_opts = { 'progress_hooks': [progress_hook] } 我还
def progress_hook(response):
if response["status"] == "finished":
file_name = response["filename"]
ydl_opts = {
'progress_hooks': [progress_hook]
}
我还想获取文件来自的URL。我不知道该怎么做。类似于
url=response[“url”]
的东西会很好,但是有了进度挂钩。因为似乎没有办法做到这一点,我重新构造了我的程序,一次只下载一个,所以对我来说下载的内容非常明确
要使用它,您需要创建一个实例,将要下载的URL列表传递给构造函数
然后,当您准备好时,可以对对象调用start\u download\u process
。它将等待当前曲目完成并且进度挂钩
完全完成后再下载另一个曲目
class YoutubeManager:
def __init__(self, url_list):
self.base_url = "https://www.youtube.com"
self.current_download_url = ""
self.url_list = url_list
self.currently_downloading = False
self.current_download_count = 0
ydl_opts = {
'format': 'bestaudio/best',
'noplaylist': True,
'continue_dl': True,
'progress_hooks': [self.progress_hook],
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192', }]
}
self.youtube_dl_manager = youtube_dl.YoutubeDL(ydl_opts)
def start_download_process(self):
self.currently_downloading = True
self.current_download_count += 1
with self.youtube_dl_manager as youtube_dl_manager:
self.current_download_url = self.url_list.pop()
youtube_dl_manager.download([self.base_url + self.current_download_url])
def continue_download_process(self):
self.current_download_count += 1
with self.youtube_dl_manager as youtube_dl_manager:
self.current_download_url = self.url_list.pop()
youtube_dl_manager.download([self.base_url + self.current_download_url])
def progress_hook(self, response):
if response["status"] == "finished":
file_name = response["filename"]
print("Downloaded " + file_name)
# You can do something with self.current_download_url and file_name here
if len(self.url_list) != 0:
self.continue_download_process()
else:
self.currently_downloading = False
如果您只使用一个YoutubeDL对象,为什么不将URL设为模块级变量?好的,请您解释一下我如何做到这一点?@VukVojta我可能理解您现在所说的。您建议我保存传递给我的
YoutubeDL
对象的URL,以便稍后下载并引用。不幸的是,除非我重组我的程序,否则没有一个超简单的方法可以做到这一点。我希望找到一种方法来获取刚刚下载的任何文件的URL。但是,如果我必须对它进行重组,一次下载一个,我想我可以做到。从询问如何制作一个可变模块级到在5天内编写一个精简的python类,这本身就是一项成就,也是一个很好的例子,说明了我正在进行的工作。