我正在下载一个包含一些隐藏视频的播放列表,因此 python 给了我下载错误,我想立即下载整个播放列表。有解决办法吗? 我正在尝试看看是否可以让它忽略那些隐藏的视频
我的代码:
from yt_dlp import YoutubeDL
url = 'https://www.youtube.com/playlist?list=PLzMXToX8KzqhKrURIhVTJMb0v-HeDM3gs'
ydl_opts = {'format': 'mp4'}
with YoutubeDL(ydl_opts) as ydl:
ydl.download(url)
终端中给出的错误:
Enter your URL: https://youtube.com/playlist?list=PLzMXToX8KzqhKrURIhVTJMb0v-HeDM3gs
[youtube:tab] PLzMXToX8KzqhKrURIhVTJMb0v-HeDM3gs: Downloading webpage
WARNING: [youtube:tab] YouTube said: INFO - 8 unavailable videos are hidden
[youtube:tab] PLzMXToX8KzqhKrURIhVTJMb0v-HeDM3gs: Downloading API JSON with unavailable videos
WARNING: [youtube:tab] YouTube said: INFO - Unavailable videos will be hidden during playback
[download] Downloading playlist: English Grammar
[youtube:tab] playlist English Grammar: Downloading 52 videos
[download] Downloading video 1 of 52
[youtube] JGXK_99nc5s: Downloading webpage
[youtube] JGXK_99nc5s: Downloading android player API JSON
ERROR: [youtube] JGXK_99nc5s: Private video. Sign in if you've been granted access to this video
根据我对文档的理解,我认为这将实现你想要的 - 不幸的是我目前无法测试它,所以如果它不起作用,请告诉我:
import yt_dlp
ydl_opts = {
'ignoreerrors': True
}
url = 'https://www.youtube.com/playlist?list=PLzMXToX8KzqhKrURIhVTJMb0v-HeDM3gs'
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
error_code = ydl.download(url)
我找到了解决办法。事实上,您使用
'ignoreerrors': True
。您可以直接将其传递给YoutubeDl
。
with YoutubeDL(
{'quiet': True, "logger": CustomLogger(), 'ignoreerrors': True}
) as temp:
info_temp = temp.extract_info(link, download=False)
我使用的其他选项取决于你。
安静 - 仅隐藏控制台上的详细信息。
CustomLogger()
是我实现的自定义记录器,因此它不会将日志打印在控制台上而是打印到文件中。
download=False
这样就不会立即下载。我已经在其他地方实现了下载。我的脚本可以下载,也可以获取有关视频或播放列表的信息,而无需下载。
当我们使用
YoutubeDl
时,我们正在创建一个 yt_dlp.YoutubeDL.YoutubeDL
对象,然后可以使用该对象从 YouTube 链接获取各种详细信息。那么 temp
那么就是那个物体。
重要的是
ignoreerror
。 YoutubeDl
就在程序开始的地方。所以我们通常有一个名为 yt_opts
的字典,其中我们指定将传递给 YoutubeDL
的键值对。这样你就可以直接通过它们。
或者更好的是,你确实可以创建这个
yt_opts
字典。所以我们会这样做:
link = "https://youtu.be/SaC8X-IHGiU?si=rkAN-ICgDk-7b2Em"
yt_opts({'ignoreerrors: True})
with YoutubeDL(yt_opts) as temp:
info_temp = temp.extractinfo(link, download=False)
# do more with info_temp eg `info_temp.get('title')` etc