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

求助:使用PytubeFix等多库下载YouTube视频时无法获取最高分辨率(仅能下载360p)

求助:使用PytubeFix等多库下载YouTube视频时无法获取最高分辨率(仅能下载360p)

最近我碰到一个特别闹心的问题:不管我怎么调整代码,选择「最高分辨率」下载YouTube视频时,最终得到的始终是640x360的360p画质,感觉就像是下载了YouTube主页上的预览视频一样。

我用的Pytubefix代码是这样的:

from pytubefix import YouTube

video = "https://youtu.be/NI9LXzo0UY0?si=_Jy_CzN-QwI4SOkC"

def Download(link):
    youtube_object = YouTube(link)
    youtube_object = youtube_object.streams.get_highest_resolution()
    try:
        youtube_object.download()
    except:
        print("An error has occurred")
    print("Download is completed successfully")

Download(video)

我先后试了三个库:

  • pytube(已经停更了)
  • pytubefix
  • yt_dlp

结果全都是下载360p的视频,但明明这个视频应该有1080p的最高画质啊,实在搞不懂哪里出问题了😭


问题原因&解决方案

其实核心原因是YouTube的音视频分离机制:1080p及以上的高清画质,YouTube会把视频流和音频流分开存储,而get_highest_resolution()这类方法默认只会下载「音视频复合流」——这类流为了兼容性,最高通常只有720p甚至360p。要拿到真正的高清,得单独下载视频和音频流再合并。

方案1:用Pytubefix手动下载并合并

需要额外安装ffmpeg来合并音视频(可以用pip install ffmpeg-python,或者系统级安装ffmpeg工具):

from pytubefix import YouTube
from pytubefix.cli import on_progress
import ffmpeg
import os

video_url = "https://youtu.be/NI9LXzo0UY0?si=_Jy_CzN-QwI4SOkC"

def download_highest_quality(link):
    youtube_object = YouTube(link, on_progress_callback=on_progress)
    
    # 优先获取1080p纯视频流,没有的话取最高可用分辨率
    video_stream = youtube_object.streams.filter(res="1080p", only_video=True).first()
    if not video_stream:
        print("1080p流不可用,自动切换到最高可用分辨率")
        video_stream = youtube_object.streams.filter(only_video=True).order_by('resolution').desc().first()
    
    # 获取最高质量的音频流
    audio_stream = youtube_object.streams.filter(only_audio=True).first()
    
    try:
        # 分别下载临时文件
        video_file = video_stream.download(filename_prefix="temp_video_")
        audio_file = audio_stream.download(filename_prefix="temp_audio_")
        
        # 用ffmpeg合并音视频
        ffmpeg.concat(ffmpeg.input(video_file), ffmpeg.input(audio_file), v=1, a=1)\
            .output("final_highres_video.mp4").run(overwrite_output=True)
        
        # 清理临时文件
        os.remove(video_file)
        os.remove(audio_file)
        
        print("高清视频下载并合并完成啦!")
    except Exception as e:
        print(f"出错了:{str(e)}")

download_highest_quality(video_url)

方案2:用yt_dlp一键搞定(推荐)

yt_dlp本身支持自动识别并合并音视频流,配置起来更简单:

import yt_dlp

ydl_opts = {
    # 优先选最高清视频+最佳音频,自动合并;如果不行就选最好的复合流
    'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
    'outtmpl': 'my_highres_video.%(ext)s',
}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download(["https://youtu.be/NI9LXzo0UY0?si=_Jy_CzN-QwI4SOkC"])

额外提醒

  • 先确保你的库是最新版本:pip install --upgrade pytubefix yt-dlp,旧版本可能适配不了YouTube的最新API。
  • 先在浏览器里确认目标视频确实能播放1080p,有些视频可能因为版权或地域限制,无法获取高清流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:13:10