使用 youtube_dl 在 discord.py 机器人上播放音乐时出现错误代码 1
Getting error code 1, when using youtube_dl to play music on discord.py bot
上下文: 我正在尝试为我的 disord.py bot
创建一个 ;play <youtubeURL>
命令
问题:我无法播放音乐
代码:
ytdl_format_options = {
'format': 'bestaudio/best',
'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s',
'restrictfilenames': True,
'noplaylist': True,
'nocheckcertificate': True,
'ignoreerrors': False,
'logtostderr': False,
'quiet': True,
'no_warnings': True,
'default_search': 'auto',
'source_address': '0.0.0.0'
}
ytdl = youtube_dl.YoutubeDL(ytdl_format_options)
@client.command()
async def play(ctx, url):
#I have code here that makes sure the bot is in the correct VC
guild = ctx.message.guild
voice_client = guild.voice_client
song_info = ytdl.extract_info(url, download=False)
filename = ytdl.prepare_filename(song_info)
song = discord.FFmpegPCMAudio(filename)
player = voice_client.play(song)
错误: 使用标准 python IDE,我没有收到任何错误。但是,使用日志记录模块。我收到错误代码 1:
INFO:discord.player:Preparing to terminate ffmpeg process 21972.
INFO:discord.player:ffmpeg process 21972 successfully terminated with return code of 1.
如有任何help/solutions,我们将不胜感激。
您要使用的文件目前不存在,因为extract_info
中的download=False
参数导致您没有下载它。
我发现我的代码有问题。这是通过ffmpeg播放音乐的正确方式:
import os
import youtube_dl
async def joinMusicChannel(ctx):
try:
channel = ctx.author.voice.channel
except:
await ctx.send(ctx.author.mention + " Please join the music voice channel.")
return False
vc = ctx.voice_client
if vc == None:
await channel.connect()
return True
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
}
def endSong(guild, path):
os.remove(path)
@client.command()
async def play(ctx, url):
data = await joinMusicChannel(ctx)
if data == True:
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
file = ydl.extract_info(url, download=True)
guild = ctx.message.guild
voice_client = guild.voice_client
path = str(file['title']) + "-" + str(file['id'] + ".mp3")
voice_client.play(discord.FFmpegPCMAudio(path), after=lambda x: endSong(guild, path))
voice_client.source = discord.PCMVolumeTransformer(voice_client.source, 1)
上下文: 我正在尝试为我的 disord.py bot
创建一个;play <youtubeURL>
命令
问题:我无法播放音乐
代码:
ytdl_format_options = {
'format': 'bestaudio/best',
'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s',
'restrictfilenames': True,
'noplaylist': True,
'nocheckcertificate': True,
'ignoreerrors': False,
'logtostderr': False,
'quiet': True,
'no_warnings': True,
'default_search': 'auto',
'source_address': '0.0.0.0'
}
ytdl = youtube_dl.YoutubeDL(ytdl_format_options)
@client.command()
async def play(ctx, url):
#I have code here that makes sure the bot is in the correct VC
guild = ctx.message.guild
voice_client = guild.voice_client
song_info = ytdl.extract_info(url, download=False)
filename = ytdl.prepare_filename(song_info)
song = discord.FFmpegPCMAudio(filename)
player = voice_client.play(song)
错误: 使用标准 python IDE,我没有收到任何错误。但是,使用日志记录模块。我收到错误代码 1:
INFO:discord.player:Preparing to terminate ffmpeg process 21972.
INFO:discord.player:ffmpeg process 21972 successfully terminated with return code of 1.
如有任何help/solutions,我们将不胜感激。
您要使用的文件目前不存在,因为extract_info
中的download=False
参数导致您没有下载它。
我发现我的代码有问题。这是通过ffmpeg播放音乐的正确方式:
import os
import youtube_dl
async def joinMusicChannel(ctx):
try:
channel = ctx.author.voice.channel
except:
await ctx.send(ctx.author.mention + " Please join the music voice channel.")
return False
vc = ctx.voice_client
if vc == None:
await channel.connect()
return True
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
}
def endSong(guild, path):
os.remove(path)
@client.command()
async def play(ctx, url):
data = await joinMusicChannel(ctx)
if data == True:
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
file = ydl.extract_info(url, download=True)
guild = ctx.message.guild
voice_client = guild.voice_client
path = str(file['title']) + "-" + str(file['id'] + ".mp3")
voice_client.play(discord.FFmpegPCMAudio(path), after=lambda x: endSong(guild, path))
voice_client.source = discord.PCMVolumeTransformer(voice_client.source, 1)