
Recherche avancée
Médias (1)
-
1 000 000 (wav version)
26 septembre 2011, par
Mis à jour : Avril 2013
Langue : English
Type : Audio
Autres articles (32)
-
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Encoding and processing into web-friendly formats
13 avril 2011, parMediaSPIP automatically converts uploaded files to internet-compatible formats.
Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
All uploaded files are stored online in their original format, so you can (...) -
Contribute to a better visual interface
13 avril 2011MediaSPIP is based on a system of themes and templates. Templates define the placement of information on the page, and can be adapted to a wide range of uses. Themes define the overall graphic appearance of the site.
Anyone can submit a new graphic theme or template and make it available to the MediaSPIP community.
Sur d’autres sites (7287)
-
Pycord Music Bot : AttributeError : 'FFmpegAudio' object has no attribute '_process'
5 juin 2022, par Steven MaoI've made a discord Cog that should be able to queue up and play music, but I'm getting an error from FFmpeg when I actually try to play the URL. I have found an identical question on StackOverflow, but this user's problem was a random typo. The inputs should all be correct, so I am not sure if the problem is my code or my package.


What have I done wrong ?


class MusicClass(commands.Cog):
 #universal attributes
 YDL_OPTIONS = {'format': 'bestaudio', 'noplaylist': 'True'}
 FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}

 def __init__(self, bot):
 self.bot = bot
 self.is_playing = False
 self.music_queue = [[],''] #[[music1, music2, music3...], channel_obj]
 self.vc = ''

 @commands.command()
 async def join(self, ctx):
 if not ctx.message.author.voice:
 await ctx.send("{} is not connected to a voice channel".format(ctx.message.author.name))
 return
 else:
 channel = ctx.message.author.voice.channel
 await channel.connect()

 @commands.command()
 async def leave(self, ctx):
 voice_client = ctx.message.guild.voice_client
 if voice_client.is_connected():
 await voice_client.disconnect()
 else:
 await ctx.send("The bot is not connected to a voice channel.")
 
 #rtype: list[dict{str:}]
 #params: search string/web URL, top number of results to show
 #returns list of top 5 queries and their information
 def search_yt(self, search_query, num_results = 3):
 with YoutubeDL(self.YDL_OPTIONS) as ydl:
 try:
 top_results = ydl.extract_info(f"ytsearch{num_results}:{search_query}", download=False)['entries'][0:{num_results}]
 for i in range(len(top_results)):
 top_results[i] = {
 'title': top_results[i]['title'],
 'source': top_results[i]['formats'][0]['url'],
 'channel': top_results[i]['channel'],
 'duration': top_results[i]['duration'],
 'url': top_results[i]['webpage_url']
 }
 except:
 print(f'SEARCH_YT ERROR\t search="{search_query}"')
 return False
 return top_results
 
 #rtype: None
 #looks at queue, decides whether to play the next song in queue or stop
 def play_next(self):
 print('called play_next')
 if len(self.music_queue) > 0:
 self.is_playing = True
 #assigns url AND removes from queue
 music_url = self.music_queue[0][0]['source']
 self.music_queue[0].pop(0)
 self.vc.play(discord.FFmpegAudio(music_url, **self.FFMPEG_OPTIONS), after = lambda e: self.play_next())
 else:
 self.is_playing = False

 #rtype: None
 #similar to play_next but optimized for first-time playing
 #checks if a song in queue + checks if bot's connected, then begins to play
 async def play_now(self):
 print('called play_now, queue:', self.music_queue[0])
 if len(self.music_queue) > 0:
 self.is_playing = True
 music_url = self.music_queue[0][0]['source']
 if self.vc == '' or not self.vc.is_connected():
 self.vc = await self.music_queue[1].connect()
 else:
 print('moving to new channel')
 self.vc = await self.bot.move_to(self.music_queue[1])
 self.music_queue[0].pop(0)

 #######################################################################################################
 print('ERROR HAPPENS RIGHT HERE')
 self.vc.play(discord.FFmpegAudio(music_url, **self.FFMPEG_OPTIONS), after = lambda e: self.play_next())
 #######################################################################################################
 
 else:
 self.is_playing = False

 @commands.command()
 #dynamically checks for URL link or search query, then attempts to play
 async def p(self, ctx, *args):
 voice_channel = ctx.author.voice.channel

 if voice_channel == None: #not in a VC
 await ctx.send('You have to be in a voice channel first')
 return
 else: #set channel, search and play music
 if self.music_queue[1] != voice_channel:
 self.music_queue[1] = voice_channel
 if args[0].startswith('https://www.youtube.com/watch'): #search URL
 #search web_url directly and send object to music queue
 with YoutubeDL(self.YDL_OPTIONS) as ydl:
 try:
 print('attempting to extract URL:', args[0])
 music_obj = ydl.extract_info(args[0], download=False)
 music_obj = {
 'title': music_obj['title'],
 'source': music_obj['formats'][0]['url'],
 'channel': music_obj['channel'],
 'duration': music_obj['duration'],
 'url': music_obj['webpage_url']
 }
 print('music object:', music_obj)
 print('appending URL song queue')
 self.music_queue[0].append(music_obj)
 except:
 print('URL search failed. URL =', args[0])
 else: #search query, display search results, ask for which one, then add to queue
 num_results = args[len(args)-1] if args[len(args)-1].isdigit() else 3
 song_list = self.search_yt(' '.join(args), num_results)
 
 if not self.is_playing:
 await self.play_now()



Now my error message...


Exception ignored in: <function at="at" 0x7ff4b0a5b5e0="0x7ff4b0a5b5e0">
Traceback (most recent call last):
 File "/home/stevenmao/.local/lib/python3.8/site-packages/discord/player.py", line 127, in __del__
 self.cleanup()
 File "/home/stevenmao/.local/lib/python3.8/site-packages/discord/player.py", line 247, in cleanup
 self._kill_process()
 File "/home/stevenmao/.local/lib/python3.8/site-packages/discord/player.py", line 198, in _kill_process
 proc = self._process
AttributeError: 'FFmpegAudio' object has no attribute '_process'
</function>


-
FFMPEG not working for larger size file using PHP in my VPS server with CentOS
28 juillet 2019, par MrinmoyMkI want to compress and convert different audio formats into mp3 file using ffmpeg in php. I have already installed ffmpeg and is working fine for files below 0.9 mb. Whenever I try to submit files larger than 0.9 mb then I get error .
It may be there is some mistake in my VPS server configuration or mistake in my PHP codes. Could you please help me.I have also already tried setting the chmod or permission as 777 in my server to the needed files in my server
This is my PHP code
if (isset($_POST['submit'])) {
$path = "song/"; //set your folder path
$mp3_local=$_FILES['mp3_local']['name'];
$tmp = $_FILES['mp3_local']['tmp_name'];
exec("ffmpeg -i ".$tmp." -ab 96k ./out96/$mp3_local.mp3");}This is the error message that I receive when submitting files greater than 0.9 mb :
Forbidden
You don’t have permission to access /convert.php on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
But now after disabling ModSecurity in my server configuration the above 403 error is gone but still the FFMPEG is not being able to handle larger size files
How do I solve this ?
-
youtube_dl, ffmpeg, discord.py is not playing songs even w/o streaming
27 août 2021, par BlueFire02I have tried many times to make a basic queue system, I tested the play command to see if it worked back then and it did, unfortunately during this construction I have been having a lot of problems just playing the song. I did try to implement a queueing system but all that comes out is this specific error :


[tls @ 0x7f8244705240] IO Error: -9806 [https @ 0x7f824480b000] Will reconnect at 835584 in 0 second(s), error=Input/output error.



Additional Info : I also installed ffmpeg onto my mac, I only put the 1 file called ffmpeg in my path if that helps but I am pretty sure it has to do something with youtube_dl.


Code : (Make sure to put your guild_id in the guild_id spot, another thing is when you invite the bot make sure in the 2auth section click 'bot' and 'application.commands')


import discord
from discord.ext import commands
import youtube_dl
from discord_slash import cog_ext, SlashContext
from youtube_search import YoutubeSearch
import asyncio
import os


guild_ids = [GUILD ID GOES HERE]
queue = []
global is_playing
is_playing = False
time_video = 0 

class music(commands.Cog):
 def __init__(self, client):
 self.client = client
 
 @cog_ext.cog_slash(name="ping", guild_ids=guild_ids)
 async def ping(self, ctx):
 await ctx.send(content="Pong!")
 
 @cog_ext.cog_slash(name="join", guild_ids=guild_ids)
 async def join(self, ctx):
 if ctx.author.voice is None:
 return await ctx.send ("You are not in a voice channel!")
 voice_channel = ctx.author.voice.channel
 await voice_channel.connect()
 await ctx.guild.change_voice_state(channel=ctx.author.voice.channel, self_mute=True, self_deaf=True)
 await ctx.send("I joined the party :tada:")
 
 @cog_ext.cog_slash(name="disconnect", guild_ids=guild_ids)
 async def disconnect(self, ctx):
 await ctx.voice_client.disconnect()
 
 @cog_ext.cog_slash(name="play", guild_ids=guild_ids)
 async def play(self, ctx, input):
 if 'https://www.youtube.com/watch?' in input or 'https://youtu.be/' in input:
 YTDL_OPTIONS = {'format':"bestaudio"}
 with youtube_dl.YoutubeDL(YTDL_OPTIONS) as ydl:
 info_dict = ydl.extract_info(input, download=False)
 video_title = info_dict.get('title', None)

 results = YoutubeSearch(video_title, max_results=1).to_json()
 print(results)
 url_suffix_int = results.find('url_suffix') + 14


 results2 = "".join(['https://www.youtube.com', str(results[url_suffix_int:-3])])

 title_int = results.find('title') + 9
 title_int2 = results.find('long_desc') - 4
 title_string = str(results[title_int:title_int2])

 thumbnail_int = results.find('thumbnail') + 15
 title_split = results.find('title') - 5
 splitboth = str(results[thumbnail_int:title_split])
 final_result = splitboth.split('", "', 1)[0]

 channel_int = results.find('channel') + 11
 channel_int2 = results.find('duration') - 4
 channel_string = str(results[channel_int:channel_int2])

 duration_int = results.find('duration') + 12
 duration_int2 = results.find('views') - 4
 duration_string = str(results[duration_int:duration_int2])

 views_int = results.find('views') + 9
 views_int2 = results.find('publish_time') - 4
 views_string = str(results[views_int:views_int2])

 embed = discord.Embed(title=title_string, colour=discord.Colour(0x1), url=results2)

 embed.set_thumbnail(url=final_result)
 embed.set_author(name="Added to queue", icon_url=self.client.user.avatar_url)

 embed.add_field(name="Channel", value=channel_string, inline=True)
 embed.add_field(name="Song Duration", value=duration_string, inline=True)
 embed.add_field(name="Views", value=views_string, inline=True)

 await ctx.send(embed=embed)

 queue.append(input)
 await start_queue(self, ctx)

 else:
 results = YoutubeSearch(input, max_results=1).to_json()
 print(results)
 url_suffix_int = results.find('url_suffix') + 14


 results2 = "".join(['https://www.youtube.com', str(results[url_suffix_int:-3])])

 title_int = results.find('title') + 9
 title_int2 = results.find('long_desc') - 4
 title_string = str(results[title_int:title_int2])

 thumbnail_int = results.find('thumbnail') + 15
 title_split = results.find('title') - 5
 splitboth = str(results[thumbnail_int:title_split])
 final_result = splitboth.split('", "', 1)[0]

 channel_int = results.find('channel') + 11
 channel_int2 = results.find('duration') - 4
 channel_string = str(results[channel_int:channel_int2])

 duration_int = results.find('duration') + 12
 duration_int2 = results.find('views') - 4
 duration_string = str(results[duration_int:duration_int2])

 views_int = results.find('views') + 9
 views_int2 = results.find('publish_time') - 4
 views_string = str(results[views_int:views_int2])

 embed = discord.Embed(title=title_string, colour=discord.Colour(0x1), url=results2)

 embed.set_thumbnail(url=final_result)
 embed.set_author(name="Added to queue", icon_url=self.client.user.avatar_url)

 embed.add_field(name="Channel", value=channel_string, inline=True)
 embed.add_field(name="Song Duration", value=duration_string, inline=True)
 embed.add_field(name="Views", value=views_string, inline=True)

 await ctx.send(embed=embed)

 queue.append(results2)
 await start_queue(self, ctx)
 

 @cog_ext.cog_slash(name="pause", guild_ids=guild_ids)
 async def pause(self, ctx):
 ctx.voice_client.pause()
 
 
 @cog_ext.cog_slash(name="resume", guild_ids=guild_ids)
 async def resume(self, ctx):
 ctx.voice_client.resume()

 
def setup(client):
 client.add_cog(music(client))

async def start_queue(self, ctx):
 print(is_playing)
 if len(queue) <= 0:
 await ctx.voice_client.disconnect()
 while(len(queue) > 0):
 if(is_playing == False):
 await start(self, ctx, queue[0])

 

async def start(self, ctx, link_yt):
 global is_playing
 is_playing = True
 FFMPEG_OPTIONS = {'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn'}
 YTDL_OPTIONS = {'format':"bestaudio"}
 vc = ctx.voice_client
 with youtube_dl.YoutubeDL(YTDL_OPTIONS) as ydl:
 info = ydl.extract_info(link_yt, download=False)
 url2 = info['formats'][0]['url']
 source = await discord.FFmpegOpusAudio.from_probe(url2, **FFMPEG_OPTIONS)
 vc.play(source)
 await asyncio.sleep(info['duration'] + 1)
 print("Done")
 del queue[0]
 is_playing = False



Final Note : I did try to download and play the song but in the end it gave me the following error :


Options reconnect not found.