Python Discord YouTube下载Bot报错求助:FFmpeg找不到video.mp4
解决Discord Bot YouTube下载时FFmpeg找不到文件的问题
核心问题定位
你遇到的video.mp4: No such file or directory错误,本质是文件路径不匹配——要么视频没下载到你指定的位置,要么FFmpeg/Discord Bot调用时用了错误的文件名/路径。
分步修复方案
1. 确认视频实际下载路径
YouTube下载库(比如pytube)默认会用视频标题作为文件名,且可能下载到非当前工作目录。先添加路径打印代码,明确文件位置:
from pytube import YouTube import os # 替换成你的视频链接测试 yt = YouTube("https://www.youtube.com/watch?v=示例链接") stream = yt.streams.get_highest_resolution() file_path = stream.download() # 打印关键路径信息 print(f"视频实际保存路径:{file_path}") print(f"Bot当前工作目录:{os.getcwd()}")
运行后,你会看到视频的真实文件名和存储位置,后续操作必须用这个真实路径,不能硬写video.mp4。
2. 修正FFmpeg调用路径
如果你的Bot需要用FFmpeg转码,必须把下载得到的file_path作为输入路径,而非硬编码的文件名:
import subprocess # 用真实路径调用FFmpeg subprocess.run([ "ffmpeg", "-i", file_path, # 这里用下载得到的真实路径 "-c:v", "libx264", "-c:a", "aac", "./processed_video.mp4" ])
3. 适配Replit文件系统限制
Replit的临时存储会自动清理文件,建议创建持久化目录存放下载文件:
# 先创建持久化目录(不存在则自动创建) os.makedirs("./bot_downloads", exist_ok=True) # 指定下载路径到持久化目录 file_path = stream.download(output_path="./bot_downloads")
4. 修正Discord发送文件的代码
发送文件时直接使用下载得到的file_path,不要用固定文件名:
import discord # 在video命令里发送文件 await ctx.send( content=f"已下载视频:{yt.title}", file=discord.File(file_path) )
完整可测试的video命令示例
把你的原有video命令替换成以下代码,验证功能:
@bot.command() async def video(ctx, url: str): from pytube import YouTube import os import discord # 创建持久化下载目录 os.makedirs("./bot_downloads", exist_ok=True) try: # 下载视频 yt = YouTube(url) # 选择带音频的MP4流(避免无声音频问题) stream = yt.streams.filter(progressive=True, file_extension="mp4").first() file_path = stream.download(output_path="./bot_downloads") # 发送到Discord频道 await ctx.send(f"✅ 下载完成:{yt.title}", file=discord.File(file_path)) # 清理临时文件(可选,节省Replit存储空间) os.remove(file_path) except Exception as e: await ctx.send(f"❌ 出错了:{str(e)}")
内容的提问来源于stack exchange,提问作者Peepo
相关产品推荐
相关产品推荐

