
Recherche avancée
Autres articles (92)
-
Pas question de marché, de cloud etc...
10 avril 2011Le vocabulaire utilisé sur ce site essaie d’éviter toute référence à la mode qui fleurit allègrement
sur le web 2.0 et dans les entreprises qui en vivent.
Vous êtes donc invité à bannir l’utilisation des termes "Brand", "Cloud", "Marché" etc...
Notre motivation est avant tout de créer un outil simple, accessible à pour tout le monde, favorisant
le partage de créations sur Internet et permettant aux auteurs de garder une autonomie optimale.
Aucun "contrat Gold ou Premium" n’est donc prévu, aucun (...) -
Automated installation script of MediaSPIP
25 avril 2011, parTo overcome the difficulties mainly due to the installation of server side software dependencies, an "all-in-one" installation script written in bash was created to facilitate this step on a server with a compatible Linux distribution.
You must have access to your server via SSH and a root account to use it, which will install the dependencies. Contact your provider if you do not have that.
The documentation of the use of this installation script is available here.
The code of this (...) -
Support audio et vidéo HTML5
10 avril 2011MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)
Sur d’autres sites (12190)
-
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.



-
Seeking with ffmpeg options fails or causes delayed playback in Discord bot
29 août 2022, par J PetersenMy Discord bot allows users to play a song starting from a timestamp.


The problem is that playback is delayed and audio plays faster and is jumbled if start times >= 30s are set.


Results from testing different start times. Same URL, 30 second duration :







 Entered Start Time (s) 

Playback Delay (s) 

Song Playback Time (s) 







 0 

3 

30 




 30 

10 

22 




 60 

17 

17 




 120 

31 

2 




 150 

120 

<1 









I am setting the start time using ffmpeg_options as suggested in this question.


Does anyone understand why the audio playback is being delayed/jumbled ? How can I improve playback delay and allow users to start in the middle of a multi-chapter YouTube video ?


Code :


import discord
import youtube_dl
import asyncio


# Suppress noise about console usage from errors
youtube_dl.utils.bug_reports_message = lambda: ""


ytdl_format_options = {
 "format": "bestaudio/best",
 "outtmpl": "%(extractor)s-%(id)s-%(title)s.%(ext)s",
 "restrictfilenames": True,
 "noplaylist": False,
 "yesplaylist": True,
 "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 at certain times
}

ytdl = youtube_dl.YoutubeDL(ytdl_format_options)


class YTDLSource(discord.PCMVolumeTransformer):
 def __init__(self, source: discord.AudioSource, *, data: dict, volume: float = 0.5):
 super().__init__(source, volume)

 self.data = data

 self.title = data.get("title")
 self.url = data.get("url")

 @classmethod
 async def from_url(cls, url, *, loop=None, stream=False, timestamp = 0):
 ffmpeg_options = {
 "options": f"-vn -ss {timestamp}"}

 loop = loop or asyncio.get_event_loop()

 data = await loop.run_in_executor(None, lambda: ytdl.extract_info(url, download=not stream))
 if "entries" in data:
 # Takes the first item from a playlist
 data = data["entries"][0]

 filename = data["url"] if stream else ytdl.prepare_filename(data)
 return cls(discord.FFmpegPCMAudio(filename, **ffmpeg_options), data=data)


intents = discord.Intents.default()

bot = discord.Bot(intents=intents)

@bot.slash_command()
async def play(ctx, audio: discord.Option(), seconds: discord.Option(), timestamp: discord.Option()):
 channel = ctx.author.voice.channel
 voice = await channel.connect()
 player = await YTDLSource.from_url(audio, loop=bot.loop, stream=True, timestamp=int(timestamp))
 voice.play(player)
 await asyncio.sleep(int(seconds))
 await voice.disconnect()

token = token value
bot.run(token)