如何使Python模块yt-dlp在下载播放列表时忽略私人视频

问题描述 投票:0回答:2

我正在下载一个包含一些隐藏视频的播放列表,因此 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
python download youtube yt-dlp
2个回答
2
投票

根据我对文档的理解,我认为这将实现你想要的 - 不幸的是我目前无法测试它,所以如果它不起作用,请告诉我:

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)

0
投票

我找到了解决办法。事实上,您使用

'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

© www.soinside.com 2019 - 2024. All rights reserved.