Recherche avancée

Médias (0)

Mot : - Tags -/objet éditorial

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (99)

  • Automated installation script of MediaSPIP

    25 avril 2011, par

    To 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 (...)

  • Supporting all media types

    13 avril 2011, par

    Unlike most software and media-sharing platforms, MediaSPIP aims to manage as many different media types as possible. The following are just a few examples from an ever-expanding list of supported formats : images : png, gif, jpg, bmp and more audio : MP3, Ogg, Wav and more video : AVI, MP4, OGV, mpg, mov, wmv and more text, code and other data : OpenOffice, Microsoft Office (Word, PowerPoint, Excel), web (html, CSS), LaTeX, Google Earth and (...)

  • Que fait exactement ce script ?

    18 janvier 2011, par

    Ce script est écrit en bash. Il est donc facilement utilisable sur n’importe quel serveur.
    Il n’est compatible qu’avec une liste de distributions précises (voir Liste des distributions compatibles).
    Installation de dépendances de MediaSPIP
    Son rôle principal est d’installer l’ensemble des dépendances logicielles nécessaires coté serveur à savoir :
    Les outils de base pour pouvoir installer le reste des dépendances Les outils de développements : build-essential (via APT depuis les dépôts officiels) ; (...)

Sur d’autres sites (9279)

  • Why can I not change the number of frames (nframes) in a gganimate animation ? SOLVED

    26 décembre 2022, par Gekin

    I have produced an animation per gganimate and rendered it per ffmpeg. It works just fine, but only, if I do not change the number of frames. If I do set the number of frames, I get this error message :

    


    nframes and fps adjusted to match transition
Error parsing framerate 8,4.                           
Error: Rendering with ffmpeg failed


    


    I produced the gganim MonthlyAveragePrecipitationMap the following way :

    


    options(scipen = 999, OutDec  =  ",")

MonthlyAveragePrecipitationMap = ggplot(MonthlyAverageExtremePrecipitation) + 
  geom_path(data = map_data("world","Germany"),
            aes(x = long, y = lat, group = group)) +
  coord_fixed(xlim = c(6,15),
              ylim = c(47,55)) + 
  geom_point(aes(x=lon, y=lat, 
                 colour = ShareOfExtremePrecipitationEvents,
                 group = MonthOfYear),
             size = 3) + 
  scale_color_gradient(low="blue", high="yellow") + 
  xlab("Longitude (degree)") +
  ylab("Latitude (degree)") + 
  theme_bw() +
  transition_manual(frames = MonthOfYear) + 
  labs(title = '{unique(MonthlyAverageExtremePrecipitation$MonthOfYear)[as.integer(frame)]}', 
       color = paste0("Share of Extreme Precipitation Events \namong all Precipitation Events")) 


    


    I call the animation the following way :

    


    animate(MonthlyAveragePrecipitationMap,
        nframes = 300,
        renderer =
          ffmpeg_renderer(
            format = "auto",
            ffmpeg = NULL,
            options = list(pix_fmt = "yuv420p")))



    


    I used this exact code just a few days ago and it worked fine.

    


    Has someone had similar experiences ?
Thanks in advance.

    


    EDIT : Problem solved.

    


      

    • Problem : Changing the decimal seperator from . to , per options(dec=",")
    • 


    • Solution : Changing the decimal seperator locally within the axis scaling per function.
    • 


    


  • Music queue, discord.py music bot

    29 mars 2021, par Luca M. Schmidt

    II'm trying to add a queue system to my music cog. When possible it should be able to add songs and play the next song after the one before ended. An explanation on how it should work is sufficient, there's no need to provide any code at all. If any additional information is needed feel free to ask.

    


    My Code (Stripped down a bit) :

    


    # IMPORT


import discord
from discord.ext import commands
import json
import asyncio
import youtube_dl



# LOKALE_VARIABLEN


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'
}

ffmpeg_options = {
    'options': '-vn'
}

ytdl = youtube_dl.YoutubeDL(ytdl_format_options)

songs = asyncio.Queue()
play_next_song = asyncio.Event()


# ----

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

        self.data = data

        self.title = data.get('title')
        self.url = data.get('url')
        self.thumbnail = data.get('thumbnail')


    @classmethod
    async def from_url(cls, url, *, loop=None, stream=False):
        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:
            data = data['entries'][0]

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


# COG_SETUP(START)


class Music(commands.Cog):

    def __init__(self, client):
        self.client = client


    @commands.command()
    async def join(self, ctx, *, channel: discord.VoiceChannel):

        if ctx.voice_client is not None:
            return await ctx.voice_client.move_to(channel)

        await channel.connect()

    @commands.command()
    @commands.cooldown(1, 10, commands.BucketType.user)
    async def play(self, ctx, *, url):

        try:

            async with ctx.typing():
                player = await YTDLSource.from_url(url, loop=self.client.loop, stream=True)
            ctx.voice_client.play(player, after=lambda e: print('Player error: %s' % e) if e else None)

        except:
            embed = discord.Embed(
                title='Fehler!',
                colour=discord.Colour.red(),
                description='Dies ist eine nicht Unterstützte URL!'
            )

            return await ctx.send(embed=embed)

        embed = discord.Embed(
            title='',
            colour=discord.Colour.blue(),
            description=f'[{format(player.title)}]({player.url})'
        )
        embed.set_author(name='Spielt gerade:')
        embed.set_image(url=player.thumbnail)
        embed.set_footer(text=f'Hinzugefügt von: {ctx.author.name}', icon_url=ctx.author.avatar_url)


        await ctx.send(embed=embed)




    @commands.command()
    async def volume(self, ctx, volume: int):

        if ctx.voice_client is None:

            embed = discord.Embed(
                title='Fehler!',
                colour=discord.Colour.red(),
                description='Ich bin mit keinem Sprachkanal verbunden!'
            )

            return await ctx.send(embed=embed)

        elif ctx.voice_client is not None:

            if volume in range(0, 201):
                try:
                    ctx.voice_client.source.volume = volume / 100

                    embed = discord.Embed(
                        title='Lautstärke',
                        colour=discord.Colour.blue(),
                        description=f'Lautstärke auf **{format(volume)}**% gestellt.'
                    )
                    embed.set_footer(text=f"Angepasst von: {ctx.author.name}", icon_url=ctx.author.avatar_url)

                    return await ctx.send(embed=embed)
                except:
                    pass

            else:

                embed = discord.Embed(
                    title='Fehler!',
                    colour=discord.Colour.red(),
                    description='Das ist Lauter, als die Musik geht!'
                )

                return await ctx.send(embed=embed)

    @commands.command()
    async def stop(self, ctx):
        try:

            await ctx.voice_client.disconnect()
            await ctx.message.delete()

        except:
            pass

    @commands.command()
    async def pause(self, ctx):

        if ctx.voice_client.is_playing():

            ctx.voice_client.pause()
            await ctx.message.delete()
            return

        else:

            embed = discord.Embed(
                title='Fehler!',
                colour=discord.Colour.red(),
                description='Es spielt keine Musik!'
            )

            return await ctx.send(embed=embed)

    @commands.command()
    async def resume(self, ctx):

        if ctx.voice_client.is_paused():

            ctx.voice_client.resume()
            await ctx.message.delete()
            return

        else:

            embed = discord.Embed(
                title='Fehler!',
                colour=discord.Colour.red(),
                description='Es wurde keine Musik pausiert, darum kann ich auch nichts fortsetzen!'
            )

            return await ctx.send(embed=embed)

    @resume.before_invoke
    @play.before_invoke
    async def ensure_voice(self, ctx):
        if ctx.voice_client is None:
            if ctx.author.voice:
                try:

                    await ctx.author.voice.channel.connect()

                except commands.CommandError:
                    embed = discord.Embed(
                        title='Fehler!',
                        colour=discord.Colour.red(),
                        description='Du bist nicht mit einem Sprachkanal verbunden!'
                    )

                    await ctx.send(embed=embed)

        elif ctx.voice_client.is_playing():
            ctx.voice_client.stop()


# COG_SETUP(END)


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



    


  • Ghost image issues with ffmpeg -filter_complex displace

    5 juillet 2022, par raul.vila

    I've (almost) been able to apply a displacement based on 2 animated gaussian noise videos, but I'm having issues with a ghost image. A picture is worth a thousand words.

    


    Here you have a script to replicate the issue :

    


    ffmpeg -y -t 2 -f lavfi -i color=c=blue:s=160x120 -c:v libx264 -tune stillimage -pix_fmt rgb24 00_empty.mp4
ffmpeg -y -i 00_empty.mp4 -vf "drawtext=text=string1:y=h/2:x=w-t*w/2:fontcolor=white:fontsize=60" 01_text.mp4
ffmpeg -y -t 2 -f lavfi -i color=c=gray:s=160x120 -c:v libx264 -tune stillimage -pix_fmt rgb24 02_gray.mp4
ffmpeg -y -i 01_text.mp4 -i 02_gray.mp4 -i 02_gray.mp4 -filter_complex "[0][1][2]displace=edge=mirror" 03_displaced_text.mp4


    


    It creates a test video with a scrolling text and a gray dummy video. Then it applies a displacement based on the gray video. If I understand correctly, because the gray video is 100% gray, it should leave the video unchanged (or maybe displace everything by a fixed ammount of pixels), but it creates a "shadow". I tried with 3 different pixel formats (yuv420p, yuv444p, rgb24) because I found this question on stackoverflow talking about that :

    


    


    ffmpeg version 5.0.1-full_build-www.gyan.dev

    


    Any idea will be welcome.
    
Thanks !