You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord音乐Bot问题:实现YT-DLP逐个下载播放列表

解决Discord音乐Bot中YT-DLP逐个下载播放列表条目的问题

核心思路

不要让YT-DLP一次性处理整个播放列表的下载,而是先提取播放列表的条目清单,再循环遍历每个条目单独执行下载逻辑,这样就能实现逐个下载、逐个加入播放队列的效果。

代码修改方案

假设你原本的代码是直接传入播放列表URL让YT-DLP批量下载,修改后的关键逻辑如下:

import yt_dlp
import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())
play_queue = []

@bot.command()
async def play(ctx, url: str):
    # YT-DLP基础配置
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality':�:,
}地实测激manual林/PV(false OR哦不对,修正配置内容
            'preferredquality': '192',
        }],
        'quiet': True,
        'no_warnings': True,
    }

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        # 第一步:仅提取播放列表元数据,不触发下载
        playlist_info = ydl.extract_info(url, download=False)
        
        # 判断当前链接是否为播放列表
        if 'entries' in playlist_info:
            # 遍历每个播放列表条目
            for entry in playlist_info['entries']:
                # 跳过已被删除或不可用的条目
                if entry is None:
                    continue
                # 第二步:单独处理每个条目,触发下载
                entry_audio_info = ydl.extract_info(entry['url'], download=True)
                audio_path = ydl.prepare_filename(entry_audio_info)
                # 将音频文件加入播放队列
                play_queue.append(audio_path)
                await ctx.send(f"已加入队列:{entry['title']}")
        else:
            # 单个音频的处理逻辑(保持原有逻辑即可)
            single_audio_info = ydl.extract_info(url, download=True)
            audio_path = ydl.prepare_filename(single_audio_info)
            play_queue.append(audio_path)
            await ctx.send(f"已加入队列:{single_audio_info['title']}")

# 替换为你的Bot Token
bot.run('YOUR_DISCORD_BOT_TOKEN')

关键修改说明

  • 先获取播放列表结构:通过extract_info(url, download=False)获取播放列表的所有条目信息,而不是直接下载整个列表。
  • 逐个条目下载:遍历playlist_info['entries'],对每个条目的URL单独调用extract_info(download=True),实现单条目下载。
  • 容错处理:加入对None条目的判断,避免因播放列表中存在已删除视频导致的报错。

内容的提问来源于stack exchange,提问作者Leon Brenn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 05:24:57