Recherche avancée

Médias (0)

Mot : - Tags -/latitude

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

Autres articles (78)

  • Participer à sa traduction

    10 avril 2011

    Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
    Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
    Actuellement MediaSPIP n’est disponible qu’en français et (...)

  • MediaSPIP v0.2

    21 juin 2013, par

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

  • Mise à disposition des fichiers

    14 avril 2011, par

    Par défaut, lors de son initialisation, MediaSPIP ne permet pas aux visiteurs de télécharger les fichiers qu’ils soient originaux ou le résultat de leur transformation ou encodage. Il permet uniquement de les visualiser.
    Cependant, il est possible et facile d’autoriser les visiteurs à avoir accès à ces documents et ce sous différentes formes.
    Tout cela se passe dans la page de configuration du squelette. Il vous faut aller dans l’espace d’administration du canal, et choisir dans la navigation (...)

Sur d’autres sites (12275)

  • Broken pipe error when writing video file with moviepy in azure [closed]

    6 juin 2024, par Lydia

    I have a program that retrieves images (png) and audio files from Azure Blob Storage to merge them into a video, which is then written to a temporary file and saved back to Blob Storage. I'm coding in Python and here is code i use to do that :

    


        def merge_image_audio(azure_connection_string):
        """Merge PNG with mp3 files."""
        # get Azure Container Client 
        container_client = get_container_client(azure_connection_string, AZURE_CONTAINER_NAME)
    
        # List blobs in the "temp" folder
        blob_list = container_client.list_blobs(name_starts_with="temp/")
        # Initialize lists to store blob data
        image_blob_data_list = []
        audio_blob_data_list = []
    
        # Download PNG and MP3 files and store blob data in the lists
        for blob in blob_list:
            if blob.name.endswith('.png'):
                image_blob_data_list.append(get_blob(azure_connection_string, blob, '.png'))
    
            elif blob.name.endswith(".mp3"):
                audio_blob_data_list.append(get_blob(azure_connection_string, blob, '.mp3'))
        
        clips = []
        # Merge images and audio files
        for image, audio in zip(image_blob_data_list, audio_blob_data_list):
            image_clip = ImageClip(image).set_duration(AudioFileClip(audio).duration)
            image_clip = image_clip.set_audio(AudioFileClip(audio))
            clips.append(image_clip)
        
        # concatenate all clips 
        final_clip = concatenate_videoclips(clips)
       
        with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as video_temp_file:
                try: 
                    temp_file_name = video_temp_file.name
                    final_clip.write_videofile(temp_file_name, fps=24, codec='libx264', audio_codec='mp3')
                except OSError as e :
                    logging.error(f"Failed: {e}", exc_info=True)
        
    
        current_datetime = datetime.datetime.now().strftime("%Y-%m-%d_%H:%M")
        final_video_name = current_datetime + FINAL_VIDEO
        tmp_blob_client = get_blob_client(azure_connection_string, AZURE_CONTAINER_NAME, final_video_name)
        with open(temp_file_name, 'rb') as video_data:
            tmp_blob_client.upload_blob(video_data, overwrite=True)
        video_temp_file.close()


    


    I have containerized my code, and the Docker image works perfectly on my machine. However, once deployed on Azure, I encounter this problem with writing the video :

    


    Failed: [Errno 32] Broken pipe MoviePy error: FFMPEG encountered the following error while writing file /tmp/tmp81o22bka.mp4: b'' Traceback (most recent call last): File "/usr/local/lib/python3.8/site-packages/moviepy/video/io/ffmpeg_writer.py", line 136, in write_frame self.proc.stdin.write(img_array.tobytes()) BrokenPipeError: [Errno 32] Broken pipe During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/site/wwwroot/function_app.py", line 102, in generate_simple_video image_clip.write_videofile(temp_file_name, fps=24) File "", line 2, in write_videofile File "/usr/local/lib/python3.8/site-packages/moviepy/decorators.py", line 54, in requires_duration return f(clip, *a, **k) File "", line 2, in write_videofile File "/usr/local/lib/python3.8/site-packages/moviepy/decorators.py", line 135, in use_clip_fps_by_default return f(clip, *new_a, **new_kw) File "", line 2, in write_videofile File "/usr/local/lib/python3.8/site-packages/moviepy/decorators.py", line 22, in convert_masks_to_RGB return f(clip, *a, **k) File "/usr/local/lib/python3.8/site-packages/moviepy/video/VideoClip.py", line 300, in write_videofile ffmpeg_write_video(self, filename, fps, codec, File "/usr/local/lib/python3.8/site-packages/moviepy/video/io/ffmpeg_writer.py", line 228, in ffmpeg_write_video writer.write_frame(frame) File "/usr/local/lib/python3.8/site-packages/moviepy/video/io/ffmpeg_writer.py", line 180, in write_frame raise IOError(error) OSError: [Errno 32] Broken pipe MoviePy error: FFMPEG encountered the following error while writing file /tmp/tmp81o22bka.mp4: b''


    


    From my online research, everyone suggests that it’s a resource issue (lack of RAM and CPU). I increased these resources in the Azure Function App configuration, but I still face the same problem.

    


    I took a step-by-step approach to check for compatibility issues with the MoviePy function. I created a small 30-second video without audio, and it worked. Then, I added more options such as more images, audio, etc., but it failed.

    


    I suspected a timeout issue knowing that azure function app has a 5 min timeout that can be increased to 10 min in the consumption plan, but even with an execution time of one minute only it still fails.

    


    I am out of ideas to test and really need help.

    


    Thank you in advance.

    


  • ffmpeg doesn't work, when starting up it doesn't play music, it gives errors

    14 août 2024, par Оля Михеева
    import discord
from discord import FFmpegPCMAudio
import os
import random
from gtts import gTTS
import asyncio

TOKEN="***"
VOICE_CHANNEL_ID=11122224444

class Voice_Bot(discord.Client):
    def __init__(self):
        intents = discord.Intents.default()
        intents.message_content = True
        intents.voice_states=True
        super().__init__(intents=intents)
        print(os.getcwd())
        self.sounds_hello = os.listdir(os.path.join('sounds','hello'))
        self.sounds_bye = os.listdir('sounds\\bye')
        self.sounds = os.listdir('sounds\\nature')

    async def on_ready(self):        
        self.voice_channel = self.get_channel(VOICE_CHANNEL_ID) 
        if self.voice_channel == None:
            print('Не удалось подключиться к голосовому каналу.')
            return
        self.voice_client = await self.voice_channel.connect()
        print('Бот подключен к голосовому каналу')
        await self.text_to_speech("Lets play Guess the Tune")
        
    async def on_message(self,message):
        if message.author==self.user:
            return
        if message.content.startswith("game"):
            await self.text_to_speech("let's start the game guess the melody")
            music=os.listdir("sounds\\music")
            self.melody=random.choice(music)
            await self.play_sound(f"sounds\\music\\{self.melody}")
        elif message.content==self.melody[0:len(self.melody)-4]:
            if (self.voice_client.is_playing()):
                self.voice_client.stop()
            await self.text_to_speech(f"Congratulations, {message.author.name} answered correctly! To continue, type game")
        else:
            if (self.voice_client.is_playing()):
                self.voice_client.stop()
            await self.text_to_speech(f"Unfortunately, {message.author.name} did not guess. To continue, write game")


    async def on_voice_state_update(self,member,before,after):
        if member.id ==self.user.id:
            print('Someone entered or left the voice channel.')
        else:
            try:
                if before.channel == None:
                    print(f'{member.name} entered the voice channel {after.channel}.')
                    await self.play_sound(f'sounds\\hello\\{random.choice(self.sounds_hello)}')
                elif after.channel == None:
                    print(f'{member.name} left the voice channel {before.channel}.')
                    await self.play_sound(f'sounds\\bye\\{random.choice(self.sounds_bye)}')
            except Exception as e:
                print(f"Error in on_voise_state_update: {e}")

    async def text_to_speech(self,text):
        try:
            tts = gTTS(text=text, lang ="en")
            tts.save("text.mp3")
        except Exception as e:
            print(f"Error e: {e}")
        await self.voice_channel.send(text)
        await self.play_sound("text.mp3")

    def play_sound(self,path):
        print(path)
        source=discord.FFmpegPCMAudio(source=path, executable="ffmpeg\\bin\\ffmpeg.exe")
        if (self.voice_client.is_playing()):
            self.voice_client.stop()
        self.voice_client.play(source)                

client = Voice_Bot()
client.run(TOKEN)


    


    [enter image description here](https://i.sstatic.net/ys8Xza0w.jpg)

    


  • MoviePy write_videofile is very slow. Why ?

    5 novembre 2024, par RukshanJS

    I've seen multiple questions on SO relating with this, but couldn't find a solid answer. The following is my code.

    


    async def write_final_video(clip, output_path, results_dir):
    cpu_count = psutil.cpu_count(logical=False)
    threads = max(1, min(cpu_count - 1, 16))

    os.makedirs(results_dir, exist_ok=True)

    output_params = {
        "codec": await detect_hardware_encoder(),
        "audio_codec": "aac",
        "fps": 24,
        "threads": threads,
        "preset": "medium",
        "bitrate": "5000k",
        "audio_bitrate": "192k",
    }

    logger.info(f"Starting video writing process with codec: {output_params['codec']}")
    try:
        await asyncio.to_thread(
            clip.write_videofile,
            output_path,
            **output_params,
        )
    except Exception as e:
        logger.error(f"Error during video writing with {output_params['codec']}: {str(e)}")
        logger.info("Falling back to libx264 software encoding")
        output_params["codec"] = "libx264"
        output_params["preset"] = "medium"
        try:
            await asyncio.to_thread(
                clip.write_videofile,
                output_path,
                **output_params,
            )
        except Exception as e:
            logger.error(f"Error during fallback video writing: {str(e)}")
            raise
    finally:
        logger.info("Video writing process completed")

    # Calculate and return the relative path
    relative_path = os.path.relpath(output_path, start=os.path.dirname(ARTIFACTS_DIR))
    return relative_path


    


    and the helper function to get encoder is below

    


    async def detect_hardware_encoder():
    try:
        result = await asyncio.to_thread(
            subprocess.run,
            ["ffmpeg", "-encoders"],
            capture_output=True,
            text=True
        )

        # Check for hardware encoders in order of preference
        if "h264_videotoolbox" in result.stdout:
            return "h264_videotoolbox"
        elif "h264_nvenc" in result.stdout:
            return "h264_nvenc"
        elif "h264_qsv" in result.stdout:
            return "h264_qsv"

        return "libx264"  # Default software encoder
    except Exception:
        logger.warning("Failed to check for hardware acceleration. Using default encoder.")
        return "libx264"


    


    This code makes the rendering of a 15s video around 6min+ which is not acceptable.

    


    t:  62%|██████▏   | 223/361 [04:40<03:57,  1.72s/it, now=None]

    


    My config is MPS (Apple Silicon Metal Performance Shader), but also should work with NVIDIA CUDA.

    


    How can I reduce the time to write the video ? How to actually reduce this long time to write the file ?

    


    The question is about optimizing MoviePy's video processing pipeline, not just FFmpeg :

    


      

    1. clip is a MoviePy VideoFileClip object handling video processing before FFmpeg encoding
    2. 


    3. write_videofile() is MoviePy's method that manages the entire rendering pipeline including :

        

      • Frame extraction and processing
      • 


      • Memory management
      • 


      • Multiprocessing coordination
      • 


      • Audio synchronization
      • 


      


    4. 


    


    Source - https://zulko.github.io/moviepy/getting_started/videoclips.html#video-files-mp4-webm-ogv

    


    Other places where this is asked,