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

Streamlit+Pytube部署后跨设备直接下载音视频问题求助

解决Streamlit+Pytube部署后跨设备无法下载文件的问题

核心原因

部署后Pytube默认将文件保存到服务器本地路径,前端浏览器无法直接访问服务器本地文件,导致跨设备下载失败。要实现浏览器直接触发下载,需要将文件内容转为内存字节流,通过Streamlit的下载组件推送给前端。

具体实现步骤

1. 用内存缓冲区替代本地文件存储

使用Python的BytesIO创建内存缓冲区,让Pytube将音视频内容直接写入缓冲区,避免生成本地文件。Pytube的Stream对象提供了stream_to_buffer()方法支持此操作。

2. 使用Streamlit的st.download_button触发下载

这个组件可以直接将内存中的字节流作为下载内容发送给浏览器,自动触发类似Chrome下载图片的原生下载行为,兼容手机、电脑等多设备。

完整代码示例

import streamlit as st
from pytube import YouTube
from io import BytesIO

# 封装音频下载函数,返回字节缓冲区和文件名
def get_audio_buffer(url):
    yt = YouTube(url)
    audio_stream = yt.streams.filter(only_audio=True, file_extension="mp4").first()
    buffer = BytesIO()
    audio_stream.stream_to_buffer(buffer)
    buffer.seek(0)  # 将缓冲区指针移到开头,确保读取完整内容
    return buffer, f"{yt.title}_audio.mp4"

# 封装视频下载函数
def get_video_buffer(url):
    yt = YouTube(url)
    video_stream = yt.streams.get_highest_resolution()
    buffer = BytesIO()
    video_stream.stream_to_buffer(buffer)
    buffer.seek(0)
    return buffer, f"{yt.title}.mp4"

# 页面UI
st.title("YouTube 音视频下载工具")
video_url = st.text_input("请输入YouTube视频链接")

if video_url:
    try:
        yt = YouTube(video_url)
        st.subheader(f"视频标题: {yt.title}")
        st.image(yt.thumbnail_url, caption="视频缩略图")

        # 音频下载按钮
        audio_buf, audio_name = get_audio_buffer(video_url)
        st.download_button(
            label="📥 下载音频",
            data=audio_buf,
            file_name=audio_name,
            mime="audio/mp4"
        )

        # 视频下载按钮
        video_buf, video_name = get_video_buffer(video_url)
        st.download_button(
            label="📥 下载高清视频",
            data=video_buf,
            file_name=video_name,
            mime="video/mp4"
        )
    except Exception as e:
        st.error(f"操作失败: {str(e)}")

关键注意事项

  • MIME类型设置:确保st.download_button的mime参数与文件类型匹配,音频用audio/mp4,视频用video/mp4,浏览器才能正确识别并触发对应下载行为。
  • 内存优化:如果处理大体积视频,可考虑分块读取或限制下载分辨率,避免服务器内存溢出。
  • 部署兼容性:此方法兼容Streamlit Cloud、Heroku、Docker等主流部署环境,无需额外配置文件访问权限。

内容的提问来源于stack exchange,提问作者Tural Məmmədov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:27:28