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

通过Python上传视频至Dropbox后iPhone无法播放问题求助

问题根因
  • 下载时缺失文件扩展名:调用stream.download()传入的filename仅拼接了视频标题和作者,未追加.mp4后缀,pytube不会自动补全扩展名,本地存储的文件无合法视频后缀。PC端播放器可直接读取文件二进制头识别编码,因此不受影响可正常播放。
  • 上传时未声明MIME类型:调用Dropboxfiles_upload接口时未显式指定文件类型,iOS端Dropbox客户端不会做深度文件头解析,仅依靠文件后缀、上传携带的MIME元数据判断文件类型,识别为通用二进制对象后就不会调用内置视频播放器打开。
修复后的代码
import pathlib
import re
from pytube import YouTube
import dropbox

# 过滤文件名/路径中的非法字符,避免存储、上传报错
def sanitize_filename(filename):
    return re.sub(r'[\\/*?:"<>|]', "_", filename)

yt = YouTube("https://www.youtube.com/watch?v=r8LrSIIqNYg")
stream = yt.streams.get_by_itag(18)
# 处理文件名,补上mp4后缀
title = sanitize_filename(f"{yt.title} - {yt.author}.mp4")
save_path = pathlib.Path(r"C:\Users\Lenovo\OneDrive\Desktop\Zug-Videos")
stream.download(output_path=save_path, filename=title)

dbx = dropbox.Dropbox("MY-Access-Token")

try:
    local_file_path = save_path / title
    with local_file_path.open("rb") as f:
        # 显式指定MP4视频的MIME类型,上传路径同步带后缀
        meta = dbx.files_upload(
            f.read(),
            f"/{title}",
            mode=dropbox.files.WriteMode("overwrite"),
            content_type="video/mp4"
        )
except Exception as e:
    print('Error uploading file to Dropbox: ' + str(e))
补充说明
  • itag=18对应的是H.264+AAC编码的360P MP4流,因此固定使用.mp4后缀和video/mp4MIME类型即可,如果后续下载其他itag的流,需要对应匹配后缀和MIME:比如webm编码流对应后缀为.webm,MIME类型填写video/webm。
  • 已经上传到Dropbox的存量文件,直接在网页端给文件重命名加上.mp4后缀,iOS端即可正常识别播放,无需重新上传。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:24:19