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

如何使用yt-dlp将YouTube音视频直接上传至Azure Blob Storage(无需本地存储)

如何使用yt-dlp将YouTube音视频直接上传至Azure Blob Storage(无需本地存储)

看起来你遇到的问题是因为yt-dlp尝试向**文本模式的标准输出(stdout)**写入二进制数据,而文本模式的流只能接收字符串,因此触发了TypeError: write() argument must be str, not <class 'bytes'>错误。从你的traceback能看出你在Jupyter环境中运行代码,这里的stdout默认就是文本模式,更容易出现这个问题。

我们可以通过调整yt-dlp的配置,让它直接将视频数据写入二进制内存流(BytesIO),再上传到Azure Blob Storage,完美避开这个兼容问题。下面是修正后的代码:

import io
from yt_dlp import YoutubeDL
from azure.storage.blob import BlobServiceClient

# 替换为你的实际配置信息
video_url = 'https://www.youtube.com/watch?v=<your_video_id>'
connect_str = 'DefaultEndpointsProtocol=https;AccountName=your_account;AccountKey=your_key;EndpointSuffix=core.windows.net'
container_name = 'your_container'
blob_name = 'output_video.mp4'

# 初始化Azure Blob客户端
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)

# 配置yt-dlp:直接写入二进制流,避免stdout文本模式问题
ydl_opts = {
    'format': 'best',
    'quiet': True,
    'noplaylist': True,  # 确保只下载单个视频,防止意外下载播放列表
}

with io.BytesIO() as byte_stream:
    # 将二进制流赋值给yt-dlp的stdout,让它直接把下载的数据写入流中
    ydl_opts['stdout'] = byte_stream
    with YoutubeDL(ydl_opts) as ydl:
        ydl.download([video_url])
    
    # 将流的指针重置到起始位置,准备上传
    byte_stream.seek(0)
    # 上传流到Azure Blob Storage
    blob_client.upload_blob(byte_stream, overwrite=True)

print(f'✅ 成功上传 {blob_name} 到Azure Blob Storage!')

关键修改说明:

  1. 移除了outtmpl: '-':不再依赖标准输出(stdout)作为中转,而是直接指定yt-dlp的输出目标为我们的二进制内存流。
  2. 添加ydl_opts['stdout'] = byte_stream:让yt-dlp把下载的二进制视频数据直接写入BytesIO流,彻底避免了文本模式流的类型限制。
  3. 增加noplaylist: True:额外的防护措施,确保只处理单个视频,避免因视频URL包含播放列表参数导致的意外情况。

另外,如果你想保留使用outtmpl: '-'的思路,也可以通过将全局stdout切换为二进制模式来解决,但这种方法可能影响其他输出功能,不推荐在交互式环境(如Jupyter)中使用:

import sys
# 临时将stdout切换为二进制模式
sys.stdout = sys.stdout.detach()

# 然后运行你原来的代码(需调整流的读取逻辑)
# 注意:这种方法可能导致后续print()输出异常,需要谨慎使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:19:35