
Recherche avancée
Médias (1)
-
Revolution of Open-source and film making towards open film making
6 octobre 2011, par
Mis à jour : Juillet 2013
Langue : English
Type : Texte
Autres articles (71)
-
MediaSPIP v0.2
21 juin 2013, parMediaSPIP 0.2 est la première version de MediaSPIP stable.
Sa date de sortie officielle est le 21 juin 2013 et est annoncée ici.
Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
Comme pour la version précédente, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...) -
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
MediaSPIP version 0.1 Beta
16 avril 2011, parMediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)
Sur d’autres sites (7199)
-
discord.py music bot slowing down for longer audio queries
1er janvier 2023, par BoblugeSo I'm trying to make a music bot with discord.py. Shown below is a minimum working example of the bot with the problematic functions :


import os

import discord
from discord.ext import commands
from discord import player as p

import yt_dlp as youtube_dl

intents = discord.Intents.default()
intents.members = True

bot = commands.Bot(command_prefix=';')

class Music(commands.Cog):
 def __init__(self, bot):
 self.bot = bot
 self.yt-dlp_opts = {
 'format': 'bestaudio/best',
 'outtmpl': '%(extractor)s-%(id)s-%(title)s.%(ext)s',
 'restrictfilenames': True,
 'noplaylist': True,
 'playlistend': 1,
 'nocheckcertificate': True,
 'ignoreerrors': False,
 'logtostderr': False,
 'quiet': True,
 'no_warnings': True,
 'default_search': 'auto',
 'source_address': '0.0.0.0', # bind to ipv4 since ipv6 addresses cause issues sometimes
 }
 self.ffmpeg_opts = {
 'options': '-vn',
 # Source: https://stackoverflow.com/questions/66070749/
 "before_options": "-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5",
 }
 self.cur_stream = None
 self.cur_link = None

 @commands.command(aliases=["p"])
 async def play(self, ctx, url):
 yt-dlp = youtube_dl.YoutubeDL(self.ytdl_opts)
 data = yt-dlp.extract_info(url, download=False)
 filename = data['url'] # So far only works with links
 print(filename)
 audio = p.FFmpegPCMAudio(filename, **self.ffmpeg_opts)
 self.cur_stream = audio
 self.cur_link = filename

 # You must be connected to a voice channel first
 await ctx.author.voice.channel.connect()
 ctx.voice_client.play(audio)
 await ctx.send(f"now playing")

 @commands.command(aliases=["ff"])
 async def seek(self, ctx):
 """
 Fast forwards 10 seconds
 """
 ctx.voice_client.pause()
 for _ in range(500):
 self.cur_stream.read() # 500*20ms of audio = 10000ms = 10s
 ctx.voice_client.resume()

 await ctx.send(f"fast forwarded 10 seconds")

 @commands.command(aliases=["j"])
 async def jump(self, ctx, time):
 """
 Jumps to a time in the song, input in the format of HH:MM:SS
 """
 ctx.voice_client.stop()
 temp_ffempg = {
 'options': '-vn',
 # Keyframe skipping when passed as an input option (fast)
 "before_options": f"-ss {time} -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5",
 }
 new_audio = p.FFmpegPCMAudio(self.cur_link, **temp_ffempg)
 self.cur_stream = new_audio
 ctx.voice_client.play(new_audio)
 await ctx.send(f"skipped to {time}")


bot.add_cog(Music(bot))
bot.run(os.environ["BOT_TOKEN"])



My
requirements.txt
file :

discord.py[voice]==1.7.3
yt-dlp==2021.9.2



To play a song in Discord the following format is used :


;p 



Where
is any link that yt-dlp supports. Under normal circumstances, the
;p
command is used with songs that are relatively short, to whichseek()
andjump()
work extremely quickly to do what they are supposed to do. For example if I execute these sequence of commands in Discord :

;p https://www.youtube.com/watch?v=n8X9_MgEdCg <- 4 min song



And when the bot starts playing, spam the following :


;ff
;ff
;ff
;ff
;ff



The bot is able to almost instantly seek five 10-second increments of the song. Additionally, I can jump to the three minute mark very quickly with :


;j 00:03:00



From some experimentation, the
seek()
andjump()
functions seem to work quickly for songs that are under 10 minutes. If I try the exact same sequence of commands but with a 15 minute song likehttps://www.youtube.com/watch?v=Ks9Ck5LfGWE
or longerhttps://www.youtube.com/watch?v=VThrx5MRJXA
(10 hours classical music), there is an evident slowdown when running the;ff
command. However, when I include a few seconds of delay between firings of the;ff
command, the seeking is just as fast as previously mentioned. I'm not exactly sure what is going on with yt-dlp/FFmpeg behind the scenes when streaming, but I speculate that there is some sort of internal buffer, and songs that pass a certain length threshold are processed differently.

For longer songs, the
seek()
command takes longer to get to the desired position, which makes sense since this site specifies that-ss
used as an input option loops through keyframes (as there must be more keyframes in longer songs). However, if the following commands are run in Discord :

;p https://www.youtube.com/watch?v=VThrx5MRJXA <- 10 hour classical music
;j 09:00:00 <- jump to 9 hour mark
;j 00:03:00 <- jump to 3 minute mark



The first seek command takes around 5 to 10 seconds to perform a successful seek, which isn't bad, but it could be better. The second seek command takes around the same time as the first command, which doesn't make sense to me, because I thought less keyframes were skipped in order to reach the 3 minute mark.


So I'm wondering what's going on, and how to potentially solve the following :


- 

- What is actually going on with the
seek()
command ? My implementation ofseek()
uses discord.py'sdiscord.player.FFmpegPCMAudio.read()
method, which apparently runs slower if the song's length is longer ? Why ? - Why does input seeking for long YouTube videos take almost the same time no matter where I seek to ?
- How the yt-dlp and FFmpeg commands work behind the scenes to stream a video from YouTube (or any other website that YTDL supports). Does yt-dlp and FFmpeg behave differently for audio streams above a certain length threshold ?
- Potential ways to speed up
seek()
andjump()
for long songs. I recall some well-known discord music bots were able to do this very quickly.










- What is actually going on with the
-
Python Discord music bot stops playing a couple of minutes into any song
9 mars 2023, par knewbyI am trying to put together a Python Discord music bot as a fun little project. Outside of the required discord library I'm currently using the YouTube API to search for videos and parse the URL (not shown in code), yt-dlp which is a fork of yt_download that is still maintained to get the info from the YT URL, and FFMPEG to play the song obtained from yt-dlp through the bot. My play command seems to work as the 1st YT video result will start to play, but roughly 30-90 seconds into the audio, it stops playing. I get this message in the console :


2023-02-23 14:54:44 IN discord.player ffmpeg process 4848 successfully terminated with return code of 0.


So there is no error for me to go off of. I've included the full output from the console below...


-----------------------------------
groovy-jr#6741 is up and running
-----------------------------------
2023-02-23 14:53:23 INFO discord.voice_client Connecting to voice...
2023-02-23 14:53:23 INFO discord.voice_client Starting voice handshake... (connection attempt 1)
2023-02-23 14:53:24 INFO discord.voice_client Voice handshake complete. Endpoint found us-south1655.discord.media
2023-02-23 14:54:44 INFO discord.player ffmpeg process 4848 successfully terminated with return code of 0. <= AUDIO STOPS



I'm currently developing this project on a Windows 11 machine, but I've had the issue running it on my Ubuntu machine as well. I am just hosting the bot directly from the VSCode terminal for development.


I've been trying to do research on this problem, the problem is I can't find many recent information for the issue. There was another post that talked about a similar problem and had an answer suggesting the following FFMPEG options be used which I tried to no avail.


FFMPEG_OPTIONS = {
 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
 'options': '-vn',
 }



I'll include the problem file below :


import discord
from discord.ext import commands
from discord import FFmpegPCMAudio
import responses
import youtubeSearch as YT
import yt_dlp

async def send_message(message, user_message, is_private = False):
 try:
 response = responses.handle_response(user_message)
 await message.author.send(response) if is_private else await message.channel.send(response)
 except Exception as e:
 print(e)

def run_discord_bot():
 intents = discord.Intents.default()
 intents.message_content = True

 TOKEN = 'xxxxxx'
 client = commands.Bot(command_prefix = '-', intents=intents)

 @client.event
 async def on_ready():
 print('-----------------------------------')
 print(f'{client.user} is up and running')
 print('-----------------------------------')

 @client.command(name='play', aliases=['p'], pass_context = True)
 async def play(ctx, *, search_term:str = None):
 if ctx.author.voice:
 voice = None
 if search_term == None:
 await ctx.send('No song specified.')
 return
 if not ctx.voice_client:
 channel = ctx.message.author.voice.channel
 voice = await channel.connect()
 else:
 voice = ctx.guild.voice_client
 
 url = YT.singleSearch(search_term)
 
 YTDLP_OPTIONS = {
 'format': 'bestaudio/best',
 'extractaudio': True,
 'audioformat': 'mp3',
 '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': 'ytsearch',
 'source_address': '0.0.0.0',
 }

 =====> FFMPEG_OPTIONS = {
 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5',
 'options': '-vn',
 }

 with yt_dlp.YoutubeDL(YTDLP_OPTIONS) as ydl:
 info = ydl.extract_info(url, download=False)
 playUrl = info['url']

 source = FFmpegPCMAudio(playUrl, options=FFMPEG_OPTIONS)
 voice.play(source)
 else:
 await ctx.send('You must be in a voice channel to play a song!')
 return

 @client.command(pass_context = True)
 async def leave(ctx):
 if ctx.voice_client:
 await ctx.guild.voice_client.disconnect()
 else:
 await ctx.send("I'm not in a voice channel!")

 @client.command(pass_context = True)
 async def pause(ctx):
 voice = discord.utils.get(client.voice_clients, guild = ctx.guild)
 if voice.is_playing():
 voice.pause()
 else:
 await ctx.send('No audio playing...')

 @client.command(pass_context = True)
 async def resume(ctx):
 voice = discord.utils.get(client.voice_clients, guild = ctx.guild)
 if voice.is_paused():
 voice.resume()
 else:
 await ctx.send('No audio paused...')

 @client.command(pass_context = True)
 async def stop(ctx):
 voice = discord.utils.get(client.voice_clients, guild = ctx.guild)
 voice.stop()

 client.run(TOKEN)



I appreciate any guidance I can get !


-
music bot stops after playing music for 30-50 secs
19 mars 2023, par ra1nb0wconst { QueryType } = require("discord-player")
const player = require("../../client/player")
const Discord = require('discord.js')

module.exports = {
 name: 'play',
 cooldown: 5,
 aliases: ['p'],
 description: "Plays a song",
 usage: "?p <song></song>vid-URL>",
 category: "Music",

 async execute(client, message, args) {
 const songTitle = args.join(" ")
 const queue = await player.createQueue(message.guild);
 const nosongEmbed = new Discord.MessageEmbed()
 .setColor('#3d35cc')
 .setDescription(`‼️ - Please provide a song URL or song name!`)

 if (!songTitle) return message.reply({ embeds: [nosongEmbed] })
 

 const novcEmbed = new Discord.MessageEmbed()
 .setColor('#3d35cc')
 .setDescription(`‼️ - You have to be in a Voice Channel to use this command!`)

 if (!message.member.voice.channel) return message.reply({ embeds: [novcEmbed] })
 if (!queue.connection) await queue.connect(message.member.voice.channel)

 let url = songTitle
 
 // Search for the song using the discord-player
 const result = await player.search(url, {
 requestedBy: message.author,
 searchEngine: QueryType.AUTO
 })

 // finish if no tracks were found
 if (result.tracks.length === 0)
 return message.reply("No results")

 // Add the track to the queue
 const song = result.tracks[0]
 await queue.addTrack(song)
 const embed = new Discord.MessageEmbed()
 .setColor("AQUA")
 .setDescription(`**[${song.title}](${song.url})** has been added to the Queue`)
 .setThumbnail(song.thumbnail)
 .setFooter({ text: `Duration: ${song.duration}`})
 message.reply({ embeds: [embed] })
 if (!queue.playing) await queue.play()
 

 

 }
 
 }




i used the command then the song just stops playing after 30-50 seconds, it is supposed to play till the music finishes and then keep staying in the voice channel until a few mins of no music


i have reinstalled ffmpeg


using :
discord.js : 13.14.0
discord-player : 5.2.2