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

如何用youtube-dl将YouTube音频转MP3字节流直接上传至S3存储桶

实现方案

核心思路

通过修改youtube-dl的默认输出配置,让下载+ffmpeg转码的输出直接写入标准输出流而非本地磁盘,再将标准输出的内容转为内存字节流,直接调用BOTO3的S3上传接口即可,全程无本地文件落地。

依赖准备

你需要提前准备两个依赖:

  • boto3:AWS S3官方SDK,可通过pip直接安装
  • ffmpeg:系统层面的音视频转码工具,需提前安装到运行环境中

完整实现代码

from __future__ import unicode_literals
import youtube_dl
import io
import boto3
import subprocess

# 初始化S3客户端,AWS凭证可通过环境变量、~/.aws/credentials等方式提前配置
s3 = boto3.client('s3')
# 自行替换为你的S3桶名称、要保存的文件路径
BUCKET_NAME = '你的S3存储桶名'
S3_FILE_KEY = 'audio/xxx.mp3'

# 目标YouTube视频地址
video_url = 'http://www.youtube.com/watch?v=BaW_jenozKc'

# 组装youtube-dl调用命令,指定输出到标准输出
command = [
    'youtube-dl',
    '-f', 'bestaudio/best',
    '--extract-audio',
    '--audio-format', 'mp3',
    '--audio-quality', '192',
    '--quiet',
    '--no-warnings',
    '-o', '-',
    video_url
]

# 执行命令直接获取MP3字节流,无本地文件生成
mp3_bytes = subprocess.run(command, capture_output=True, check=True).stdout
# 转为BytesIO对象可直接传入S3上传接口
mp3_stream = io.BytesIO(mp3_bytes)

# 直接上传到S3
s3.put_object(
    Bucket=BUCKET_NAME,
    Key=S3_FILE_KEY,
    Body=mp3_stream,
    ContentType='audio/mpeg'
)

关键配置说明

  • -o '-'参数:指定youtube-dl将最终转码完成的MP3内容输出到标准输出(stdout),不生成本地文件
  • 静默模式配置:屏蔽所有日志、警告、进度条输出,避免非音频内容混入MP3字节流导致文件损坏
  • 明确指定转码输出格式为mp3,避免ffmpeg转码异常导致流内容异常

注意事项

  • 如果运行环境需要代理才能访问YouTube,可在youtube-dl命令中添加--proxy 代理地址参数
  • 大文件场景下可以直接把subprocess的stdout流传递给S3分块上传接口,减少内存占用
  • 提前给AWS凭证配置对应S3桶的上传权限,避免上传失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:48:03