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

使用pytube下载YouTube播放列表为MP3格式时遭遇AttributeError问题求助

pytube下载YouTube播放列表为MP3格式时遭遇AttributeError问题求助

嘿,我来帮你搞定这个问题!你碰到的AttributeError: 'Playlist' object has no attribute 'streams'其实是个很典型的逻辑小失误——Playlist对象本身根本没有streams属性,这个属性是属于单个YouTube视频(Video)对象的。你原代码里错误地直接去遍历播放列表的streams,但实际上得先遍历播放列表里的每一个视频,再对每个单独的视频去获取音频流。

另外你提到的“把MP4转成MP3”的需求,我也会在修正后的代码里加上这个功能,用moviepy来做格式转换(需要先安装这个库哦)。

错误代码的核心问题

你原代码里这行是出错的关键:

for video in p.streams:

这里的p是Playlist实例,它没有streams属性,你应该遍历播放列表里的每个视频项,再对每个视频进行操作。

修正后的完整代码

先确保你安装了必要的依赖:

pip install pytube moviepy

然后替换成下面的代码:

from pytube import Playlist, YouTube
from moviepy.editor import AudioFileClip
import os

def download_playlist_as_mp3():
    playlist_url = str(input(f"Playlist URL \n>>"))
    p = Playlist(playlist_url)
    
    # 保存路径设为脚本所在目录
    save_dir = os.path.dirname(os.path.abspath(__file__))
    
    print(f"准备下载播放列表中的 {len(p.video_urls)} 个音频...")
    
    for idx, video_url in enumerate(p.video_urls, 1):
        try:
            yt = YouTube(video_url)
            # 获取仅音频的最高质量流
            audio_stream = yt.streams.filter(only_audio=True).first()
            
            print(f"正在下载第 {idx} 个: {yt.title}")
            # 下载MP4格式的音频文件
            downloaded_file = audio_stream.download(output_path=save_dir)
            
            # 转换为MP3格式
            mp3_filename = os.path.splitext(downloaded_file)[0] + ".mp3"
            with AudioFileClip(downloaded_file) as audio:
                audio.write_audiofile(mp3_filename)
            
            # 删除原MP4文件(可选,不需要保留的话就打开这行)
            os.remove(downloaded_file)
            print(f"第 {idx} 个转换完成: {mp3_filename}")
            
        except Exception as e:
            print(f"处理视频 {video_url} 时出错: {str(e)}")
            continue

if __name__ == "__main__":
    download_playlist_as_mp3()

代码说明

  1. 正确遍历播放列表:通过p.video_urls拿到播放列表里所有视频的URL,逐个处理每个视频
  2. 下载音频流:对每个视频创建YouTube对象,过滤出仅音频的流并下载,默认是MP4容器的AAC音频
  3. 格式转换:用moviepy的AudioFileClip读取下载的MP4文件,导出成标准MP3格式
  4. 错误处理:加了异常捕获,避免单个视频出错导致整个脚本直接中断

额外小提示

  • 如果碰到pytube无法访问视频的情况,可能是YouTube的反爬机制导致,你可以尝试给YouTube对象添加自己的cookie参数(需要从浏览器里导出你的YouTube cookie)
  • 要是不想用moviepy,也可以直接把下载的MP4文件后缀改成.mp3(因为里面的音频编码是AAC,大部分播放器都支持,但严格来说不是标准MP3格式)

备注:内容来源于stack exchange,提问作者iboixq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:04:15