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

如何用yt-dlp在Python/Discord.py中提取音频文件?

解决yt-dlp获取播放列表音频链接时返回故事板图片的问题

问题根源是yt-dlp返回的formats列表包含了故事板图片这类非音频资源,不像yt-dl默认优先返回音视频格式,直接取formats[0]会拿到非音频条目。可以通过以下两种方式解决:

1. 在YDL_OPTIONS中指定音频格式筛选

初始化YoutubeDL时添加format参数,让yt-dlp仅返回音频格式资源:

YDL_OPTIONS = {
    'format': 'bestaudio/best',  # 优先获取质量最优的音频
    'noplaylist': False,  # 允许解析播放列表
    # 保留你原有的其他配置,比如quiet、no_warnings等
}

with YoutubeDL(YDL_OPTIONS) as ydl:
    info = ydl.extract_info(link, download=False)
    if 'entries' in info:
        for i in info['entries']:
            # 此时formats列表内均为音频格式,直接取第一个即可
            URL = {'source': i['formats'][0]['url'], 'title': i['title']}

如果需要指定特定音频格式(比如仅m4a),可将format设置为'm4a/bestaudio'。

2. 手动过滤formats列表中的音频条目

若不想修改全局配置,可在获取条目后手动筛选音频格式:

with YoutubeDL(YDL_OPTIONS) as ydl:
    info = ydl.extract_info(link, download=False)
    if 'entries' in info:
        for i in info['entries']:
            # 筛选音频格式:排除音频编码为none的条目
            audio_formats = [f for f in i['formats'] if f.get('acodec') != 'none']
            # 按比特率从高到低排序,优先选质量好的音频
            audio_formats.sort(key=lambda x: x.get('abr', 0), reverse=True)
            if audio_formats:
                URL = {'source': audio_formats[0]['url'], 'title': i['title']}

内容的提问来源于stack exchange,提问作者Evgenii Rezuev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:01:10