gpt4 book ai didi

python - YoutubeDL - 下载完成后如何获取状态对象

转载 作者:行者123 更新时间:2023-11-28 17:32:55 26 4
gpt4 key购买 nike

我基本上是在尝试从似乎是 Youtube-DL 中的钩子(Hook)的状态对象中获取信息,然后我试图将其保存到数据库中。我有一个带有“文件名”等属性的“歌曲”对​​象,我试图在下载完成后保存它,甚至可能会根据进度不断更新数据库。

我有四种方法可以做到这一点,但我无法让它们发挥作用

  • 向 my_hook 函数发送一个 db 和 song 对象,然后在状态 == 完成后将其全部保存在那里。问题是我无法将其他参数传递给 Hook ,除非我遗漏了什么
  • 让 my_hook 函数返回 d 然后保存它,问题是我不认为我可以访问它会返回到(youtube-dl 源)
  • 让 ydl.download([song.url]) 返回一个我可以处理的状态对象,但我认为它不会这样做
  • 我不想这样做,但我可以输出一个 .json 文件并从那里获取它,或者只是猜测我最初口述的文件的名称:(

代码如下所示:

def my_hook(d):
if d['status'] == 'finished':
file_tuple = os.path.split(os.path.abspath(d['filename']))
print("Done downloading {}".format(file_tuple[1]))
if d['status'] == 'downloading':
print(d['filename'], d['_percent_str'], d['_eta_str'])

class MyLogger(object):
def debug(self, msg):
pass

def warning(self, msg):
pass

def error(self, msg):
print(msg)


class Downloader(object):
def get_opts(self):
ydl_opts = {
'format': 'bestaudio/best',
'outtmpl': os.path.join(app.config['VIDEOS_FOLDER'], '%(id)s.%(ext)s'),
'logger': MyLogger(),
'progress_hooks': [my_hook],
}
return ydl_opts

def download(self, song):
ydl = youtube_dl.YoutubeDL(self.get_opts())
ydl.download([song.url])

最佳答案

我在这里得到了答案:https://github.com/rg3/youtube-dl/issues/7120

基本上我的歌曲文件到歌曲请求的一对多模型是错误的 - 重写这种关系允许我使用钩子(Hook)来更新数据库。

关于python - YoutubeDL - 下载完成后如何获取状态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33050960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com