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

Python脚本下载YouTube播放列表转m4a:指定文件夹保存及报错解决

问题根源

  1. input.mp4找不到:youtube-dl默认会用视频标题生成下载文件名,不是固定的input.mp4,硬写这个文件名自然找不到对应文件。
  2. 文件无法存入指定目录:没有让youtube-dl直接下载到目标目录,后续移动操作也依赖错误的文件名。

修正后的代码方案

方案1:直接下载m4a到目标目录(无需ffmpeg转码)

你已经指定了bestaudio[ext=m4a],youtube-dl会直接下载m4a格式音频,不需要额外转码,步骤更简洁:

import os
import subprocess

# 替换为你的播放列表URL
playlist_url = "PLAYLISTLINK"
# 输出目录
output_dir = "/Users/USER/Documents/VideoBot/Output"

# 确保输出目录存在,不存在则自动创建
os.makedirs(output_dir, exist_ok=True)

# 直接下载m4a到指定目录,用视频标题作为文件名
subprocess.run([
    "youtube-dl",
    "-f", "bestaudio[ext=m4a]",
    "--playlist-start", "1",
    "--playlist-end", "1",
    # 指定输出路径:将文件保存到output_dir,文件名格式为「视频标题.m4a」
    "-o", os.path.join(output_dir, "%(title)s.%(ext)s"),
    playlist_url
])

方案2:保留ffmpeg转码(适用于特殊处理需求)

如果确实需要用ffmpeg处理音频,需指定固定临时文件名并使用完整路径:

import os
import subprocess

playlist_url = "PLAYLISTLINK"
output_dir = "/Users/USER/Documents/VideoBot/Output"
os.makedirs(output_dir, exist_ok=True)

# 定义临时下载文件和最终输出文件的完整路径
temp_video = os.path.join(output_dir, "temp_video.mp4")
final_audio = os.path.join(output_dir, "output.m4a")

# 下载视频到指定临时路径
subprocess.run([
    "youtube-dl",
    "-f", "bestvideo+bestaudio/best",
    "--playlist-start", "1",
    "--playlist-end", "1",
    "-o", temp_video,
    playlist_url
])

# 用ffmpeg提取音频,使用正确的文件路径
subprocess.run([
    "ffmpeg",
    "-i", temp_video,
    "-vn",
    "-acodec", "copy",
    final_audio
])

# 可选:删除临时视频文件
os.remove(temp_video)

关键修正说明

  • 确保目录存在:用os.makedirs(output_dir, exist_ok=True)避免因目录不存在导致的保存/移动失败。
  • 指定下载路径:通过youtube-dl的-o参数直接控制文件保存位置和命名规则,彻底解决找不到文件的问题。
  • 避免硬编码文件名:要么用youtube-dl内置变量(如%(title)s)生成动态文件名,要么指定固定路径的临时文件,杜绝路径错误。

注:youtube-dl已停止维护,推荐使用yt-dlp(youtube-dl的活跃分支),只需将命令中的youtube-dl替换为yt-dlp即可兼容上述代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:40:24