自动下载 YouTube 短片--只需简单代码,一劳永逸!

最近,YouTube 短片风靡全球,对吧? 你只需轻轻一卷,就能观看一大堆短片,但如果你想从管理级别下载自己的 YouTube 视频,手动点击并逐个下载很麻烦,对吧?

유튜브 쇼츠 자동 다운로드, 출처: Asoso's K-pop Vault
(自动下载 YouTube 短片,来源:YouTube): Asoso 的 K-pop Vault )

因此,今天我准备了一段简单的 Python 代码,用于自动下载熟人频道中的 YouTube 短片!我将逐行解释,以便初学者也能轻松掌握。

1. 准备:设置 YouTube API 和 yt-dlp

首先,您需要安装 YouTube APIyt-dlp是必需的。YouTube API 密钥为 谷歌云控制台可从 yt-dlp是一个非常有用的工具,可用于从 YouTube 和其他网站下载视频。要获取 YouTube API 密钥,可以使用 YouTube 列表提取:如何使用 API 和 Python 实现自动化 请务必查看这篇文章!

安装命令

VS 代码 在集成开发环境程序的终端,如 yt-dlp 要安装,请运行以下命令。

pip install yt-dlp
유튜브 쇼츠 자동 다운로드를 위한 패키지 설치 - VS code 터미널 화면
(安装自动下载 YouTube 短片的软件包 - VS 代码终端屏幕)

2. 用 Python 代码自动下载 YouTube 短片

유튜브 쇼츠 자동 다운로드
(自动下载 YouTube 短片的 Python 编码过程概述)

现在我们已经完成了基础设置,让我们开始用 Python 编写代码吧!使用下面的脚本(代码),你可以自动下载 YouTube 短片。 它根据每个视频的标题保存文件名,非常适合下载有年龄限制的短片。

从 googleapiclient.discovery 导入构建
导入 yt_dlp
导入 re

输入您的 # API 密钥
API_KEY = "enter_API_key_here

创建 # YouTube API
youtube = build('youtube', 'v3', developerKey=API_KEY)

定义获取 # 短片列表及其 ID 的函数
def get_shorts_titles_and_ids(channel_id, max_results=100):
    shorts_info = []
    next_page_token = None

    while len(shorts_info) < max_results:
        request = youtube.search().list(
            part='snippet'、
            channelId=channel_id、
            maxResults=min(50, max_results - len(shorts_info))、
            type='video'、
            videoDuration='short'、
            pageToken=next_page_token
        )
        response = request.execute()

        for item in response['items']:
            title = item['snippet']['title']
            video_id = item['id']['videoId']
            shorts_info.append((title, video_id))

        next_page_token = response.get('nextPageToken')
        if not next_page_token:
            break

    返回 shorts_info[:max_results]。

# 视频下载函数
def download_shorts(shorts_info):
    for idx, (title, video_id) in enumerate(shorts_info, 1):
        url = f "https://www.youtube.com/watch?v={videoo_id}"
        try:
            sanitised_title = re.sub(r'[\\/*?:"|]', "", title)
            filename = f"{idx}.{sanitised_title}.mp4"

            ydl_opts = {
                format': 'best[ext=mp4]'、
                'outtmpl':文件名
                noplaylist':true、
            }

            with yt_dlp.YoutubeDL(ydl_opts) as ydl:
                print(f "Downloading: {filename}")
                ydl.download([url])
                print(f "Downloaded: {filename}")

        except Exception as e:
            print(f "Failed to download {title}: {e}")

输入并执行 # 频道 ID
channel_id = "enter_channel_id_here
shorts_info = get_shorts_titles_and_ids(channel_id)
download_shorts(shorts_info)

3. 逐行解释代码 - 所有关于自动下载的 YouTube 短片

现在,让我们逐行查看 Python 的编码历史,看看它是如何工作的!

  • API_KEY是输入 YouTube API 密钥的地方。请使用在 Google Cloud Console 中发给您的密钥。
  • youtube = build('youtube', 'v3', developerKey=API_KEY)这是连接 YouTube API 的步骤。
  • get_shorts_titles_and_ids 功能:
    • channel_id指定要下载的 YouTube 频道的 ID。
    • max_results:指定要导入的短裤的最大数量。默认值为 100。
    • 下一页令牌获取多页短片 下一页令牌以使用
    • 视频, 标题提取每个短视频的 ID 和标题,并将其添加到列表中。
  • 下载短片 功能:
    • yt_dlp.YoutubeDL(ydl_opts) as ydl下载短片到 YT-DLP 库。
    • ydl_opts 设置:以 mp4 格式下载、 outtmpl来设置文件名。

运行此代码后,短片将自动从您指定的 YouTube 频道下载。文件名是根据短片标题保存的,因此您可以随心所欲地轻松浏览。

4. FAQ - 常见问题

Q1. 如果无法下载视频,该怎么办?

首先,确保你的 API_KEY 和 channel_id 设置正确,并确保 yt-dlp 是最新版本,如有必要,可在终端通过 pip install --upgrade yt-dlp 进行更新。

问题 2:我可以下载非 YouTube 短片的普通视频吗?

是的,如果从 get_shorts_titles_and_ids 函数中移除 videoDuration='short' 选项,就可以获取并下载上传到频道的所有视频。

问题 3: 如果我只想下载特定分辨率或质量的文件,该怎么办?

您可以通过修改 ydl_opts 中的 "format "选项来指定所需的分辨率。例如,"format": "best[height<=720]"只能下载 720p 或更低分辨率的文件。

Q4. 能否用自定义文件名而不是标题保存视频?

是的,你可以更改文件名变量,将其设置为任何你想要的文件名。例如,如果您以"{idx}.CustomName.mp4 "格式命名,那么您的每个短片都将以唯一的自定义文件名保存。

Q5. 如何下载有年龄限制的视频?

YT-DLP 可绕过大多数年龄限制视频进行下载,但有些视频可能需要额外的身份验证。如果是这种情况,请参阅 YT-DLP 文档,了解如何设置。

Q6. 如果我想一次下载更多短片,该怎么办?

默认情况下,您可以通过调整 max_results 参数来增加要获取的短片数量。 不过,我们建议下载最多 500 个,以考虑到 YouTube API 的请求限制。

Q7. 有什么办法可以加快下载速度?

YT-DLP 默认以优化的速度下载视频,但速度可能因网络环境而异。如果您遇到下载速度缓慢的问题,请尝试切换到其他网络或检查您的网络连接。

问题 8:我能否使用此代码下载播放列表中的视频?

目前的代码只下载特定频道的短片。如果要下载播放列表,可以指定 playlistId 而不是 channelId,并使用 yt-dlp 的播放列表选项。

问题 9: 我的文件在下载时是否有被复制或覆盖的风险?

代码会在文件名中为每个视频添加一个唯一的编号,因此不太可能出现文件重复的情况。 不过,可能会出现标题相同的情况,因此一定要添加一个唯一的编号,如"{idx}.{sanitised_title}.mp4 "或类似内容,确保添加了唯一的编号。

问题 10.我在运行代码时遇到 "Bad Request "错误。原因是什么?

Bad Request"(错误请求)错误可能是由于 API 请求出现问题,也可能是由于 YouTube 方面的政策变更造成的。在这种情况下,请仔细检查 API 设置,或更新 yt-dlp 并重试。

# 术语表

YouTube API是 YouTube 提供的编程接口,允许开发人员将 YouTube 的功能集成到自己的应用程序中[1]。

yt-dlp这是一个命令行程序,可让您从 YouTube 等多个网站下载视频。

谷歌云控制台谷歌提供的基于网络的界面,允许开发人员管理其谷歌云项目和资源。

核心安装和管理 Python 软件包的工具。

IDEIE 是 Integrated Development Environment(集成开发环境)的缩写,是一种在一个程序中提供开发所需工具(如编写、调试和运行代码)的软件。

频道 ID:唯一标识 YouTube 上每个频道的字符串。

API 密钥唯一标识符:应用程序使用 API 时进行身份验证所需的唯一标识符。

功能执行特定任务的代码块,可重复使用并有助于改进程序的结构。

异常处理一种管理程序执行过程中可能出现的错误的编程技术。

决议:显示或图像清晰度的度量,通常用水平像素数乘以垂直像素数表示(如 1920×1080)。

类似文章