Recherche avancée

Médias (16)

Mot : - Tags -/mp3

Autres articles (20)

  • Ajout d’utilisateurs manuellement par un administrateur

    12 avril 2011, par

    L’administrateur d’un canal peut à tout moment ajouter un ou plusieurs autres utilisateurs depuis l’espace de configuration du site en choisissant le sous-menu "Gestion des utilisateurs".
    Sur cette page il est possible de :
    1. décider de l’inscription des utilisateurs via deux options : Accepter l’inscription de visiteurs du site public Refuser l’inscription des visiteurs
    2. d’ajouter ou modifier/supprimer un utilisateur
    Dans le second formulaire présent un administrateur peut ajouter, (...)

  • Les statuts des instances de mutualisation

    13 mars 2010, par

    Pour des raisons de compatibilité générale du plugin de gestion de mutualisations avec les fonctions originales de SPIP, les statuts des instances sont les mêmes que pour tout autre objets (articles...), seuls leurs noms dans l’interface change quelque peu.
    Les différents statuts possibles sont : prepa (demandé) qui correspond à une instance demandée par un utilisateur. Si le site a déjà été créé par le passé, il est passé en mode désactivé. publie (validé) qui correspond à une instance validée par un (...)

  • (Dés)Activation de fonctionnalités (plugins)

    18 février 2011, par

    Pour gérer l’ajout et la suppression de fonctionnalités supplémentaires (ou plugins), MediaSPIP utilise à partir de la version 0.2 SVP.
    SVP permet l’activation facile de plugins depuis l’espace de configuration de MediaSPIP.
    Pour y accéder, il suffit de se rendre dans l’espace de configuration puis de se rendre sur la page "Gestion des plugins".
    MediaSPIP est fourni par défaut avec l’ensemble des plugins dits "compatibles", ils ont été testés et intégrés afin de fonctionner parfaitement avec chaque (...)

Sur d’autres sites (3351)

  • Queue in Python processing more than one video at a time ? [closed]

    12 novembre 2024, par Mateus Coelho

    I have an raspberry pi, that i proccess videos, rotate and put 4 water marks, but, when i run into the raspberry pi, it uses 100% of 4CPUS threads and it reboots. I solved this using -threads 1, to prevent the usage of just one of the 4 CPUS cores, it worked.

    


    I made a Queue to procces one at a time, because i have 4 buttons that trigger the videos. But, when i send more then 3 videos to the Queue, the rasp still reboots, and im monitoring the CPU usage, is 100% for only one of the four CPUS
enter image description here

    


    But, if i send 4 or 5 videos to the thread folder, it completly reboots, and the most awkward, its after the reboot, it made its way to proceed all the videos.

    


    
import os
import time
import subprocess
from google.cloud import storage
import shutil

QUEUE_DIR = "/home/abidu/Desktop/ApertaiRemoteClone"
ERROR_VIDEOS_DIR = "/home/abidu/Desktop/ApertaiRemoteClone/ErrorVideos"
CREDENTIALS_PATH = "/home/abidu/Desktop/keys.json"
BUCKET_NAME = "videos-283812"

def is_valid_video(file_path):
    try:
        result = subprocess.run(
            ['ffprobe', '-v', 'error', '-show_entries', 'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1', file_path],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
        return result.returncode == 0
    except Exception as e:
        print(f"Erro ao verificar o vídeo: {e}")
        return False

def overlay_images_on_video(input_file, image_files, output_file, positions, image_size=(100, 100), opacity=0.7):
    inputs = ['-i', input_file]
    for image in image_files:
        if image:
            inputs += ['-i', image]
    filter_complex = "[0:v]transpose=2[rotated];"
    current_stream = "[rotated]"
    for i, (x_offset, y_offset) in enumerate(positions):
        filter_complex += f"[{i+1}:v]scale={image_size[0]}:{image_size[1]},format=rgba,colorchannelmixer=aa={opacity}[img{i}];"
        filter_complex += f"{current_stream}[img{i}]overlay={x_offset}:{y_offset}"
        if i < len(positions) - 1:
            filter_complex += f"[tmp{i}];"
            current_stream = f"[tmp{i}]"
        else:
            filter_complex += ""
    command = ['ffmpeg', '-y', '-threads', '1'] + inputs + ['-filter_complex', filter_complex, '-threads', '1', output_file]

    try:
        result = subprocess.run(command, check=True)
        result.check_returncode()  # Verifica se o comando foi executado com sucesso
        print(f"Vídeo processado com sucesso: {output_file}")
    except subprocess.CalledProcessError as e:
        print(f"Erro ao processar o vídeo: {e}")
        if "moov atom not found" in str(e):
            print("Vídeo corrompido ou sem o moov atom. Pulando o arquivo.")
        raise  # Relança a exceção para ser tratada no nível superior

def process_and_upload_video():
    client = storage.Client.from_service_account_json(CREDENTIALS_PATH)
    bucket = client.bucket(BUCKET_NAME)
    
    while True:
        # Aguarda 10 segundos antes de verificar novos vídeos
        time.sleep(10)

        # Verifica se há arquivos no diretório de fila
        queue_files = [f for f in os.listdir(QUEUE_DIR) if f.endswith(".mp4")]
        
        if queue_files:
            video_file = os.path.join(QUEUE_DIR, queue_files[0])  # Pega o primeiro vídeo na fila
            
            # Define o caminho de saída após o processamento com o mesmo nome do arquivo de entrada
            output_file = os.path.join(QUEUE_DIR, "processed_" + os.path.basename(video_file))
            if not is_valid_video(video_file):
                print(f"Arquivo de vídeo inválido ou corrompido: {video_file}. Pulando.")
                os.remove(video_file)  # Remove arquivo corrompido
                continue

            # Processa o vídeo com a função overlay_images_on_video
            try:
                overlay_images_on_video(
                    video_file,
                    ["/home/abidu/Desktop/ApertaiRemoteClone/Sponsor/image1.png", 
                     "/home/abidu/Desktop/ApertaiRemoteClone/Sponsor/image2.png", 
                     "/home/abidu/Desktop/ApertaiRemoteClone/Sponsor/image3.png", 
                     "/home/abidu/Desktop/ApertaiRemoteClone/Sponsor/image4.png"],
                    output_file,
                    [(10, 10), (35, 1630), (800, 1630), (790, 15)],
                    image_size=(250, 250),
                    opacity=0.8
                )
                
                if os.path.exists(output_file):
                    blob = bucket.blob(os.path.basename(video_file).replace("-", "/"))
                    blob.upload_from_filename(output_file, content_type='application/octet-stream')
                    print(f"Uploaded {output_file} to {BUCKET_NAME}")
                    os.remove(video_file)
                    os.remove(output_file)
                    print(f"Processed and deleted {video_file} and {output_file}.")
            
            except subprocess.CalledProcessError as e:
                print(f"Erro ao processar {video_file}: {e}")
                
                move_error_video_to_error_directory(video_file)

                continue  # Move para o próximo vídeo na fila após erro

def move_error_video_to_error_directory(video_file):
    print(f"Movendo arquivo de vídeo com erro {video_file} para {ERROR_VIDEOS_DIR}")

    if not os.path.exists(ERROR_VIDEOS_DIR):
        os.makedirs(ERROR_VIDEOS_DIR)
                
    shutil.move(video_file, ERROR_VIDEOS_DIR)

if __name__ == "__main__":
    process_and_upload_video()



    


  • How can i convert and compress in real time batch of images to mp4 video file ?

    29 juin 2015, par Brubaker Haim

    In my directory on the hard disk i have many images : screenshot000001.bmp , screenshot000002.bmp....screenshot001200.bmp

    I want to do two things :

    1. For testing using the cmd(Command Prompt) and to compress and convert the images to mp4 video file.

    2. In my program in real time while my program take the screenshots and save them to the hard disk to compress them and build the mp4 video file in real time.

    For the first part i tried to type in cmd :

    ffmpeg -f image2 -i screenshot%d.bmp -vcodec libx264 -b 800k video.avi

    But what i got is two errors :

    [image2 @ 0000000004766380] Could find no file with path ’screenshot%d.bmp’ and
    index in the range 0-4
    screenshot%d.bmp : No such file or directory

    I copied the ffmpeg.exe to the directory where the images are in.
    E :\screenshots

    For the second part this how i’m taking the screenshots in real time :

    A button click event that start a timer :

    private void button1_Click(object sender, EventArgs e)
           {
               timer1.Start();
           }

    Then in the tick event :

       ScreenShot shot = new ScreenShot();
       public static int counter = 0;
       private void timer1_Tick(object sender, EventArgs e)
       {
           counter++;
           shot.GetScreenShot(@"e:\screenshots\", "screenshot");
           if (counter == 1200)
           {
               timer1.Stop();
           }
       }

    This line shot.GetScreenShot(@"e :\screenshots\", "screenshot") ; save the screenshots to the hard disk.
    Here after each screenshot save i want to compress and build the mp4 video file in real time.

    I tried this and got errors :

    ffmpeg -f image2 -i screenshot%06d.bmp -vcodec libx264 -b 800k video.avi

    Error message :

    ffmpeg version N-73165-gf1e1730 Copyright (
     built with gcc 4.9.2 (GCC)
     configuration: --enable-gpl --enable-vers
    isynth --enable-bzlib --enable-fontconfig -
    le-iconv --enable-libass --enable-libbluray
    enable-libdcadec --enable-libfreetype --ena
    ibilbc --enable-libmodplug --enable-libmp3l
    le-libopencore-amrwb --enable-libopenjpeg -
    able-libschroedinger --enable-libsoxr --ena
    ble-libtwolame --enable-libvidstab --enable
    --enable-libvorbis --enable-libvpx --enabl
    e-libx264 --enable-libx265 --enable-libxavs
    ble-decklink --enable-zlib
     libavutil      54. 27.100 / 54. 27.100
     libavcodec     56. 45.100 / 56. 45.100
     libavformat    56. 38.102 / 56. 38.102
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 18.100 /  5. 18.100
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  2.100 /  1.  2.100
     libpostproc    53.  3.100 / 53.  3.100
    [bmp @ 0000000002f77ce0] bad magic number
       Last message repeated 3 times
    [image2 @ 0000000002f76380] decoding for st
    [image2 @ 0000000002f76380] Could not find
    bmp, none): unspecified size
    Consider increasing the value for the 'anal
    screenshot%06d.bmp: could not find codec pa
    Input #0, image2, from 'screenshot%06d.bmp'
     Duration: 00:00:02.88, start: 0.000000, b
       Stream #0:0: Video: bmp, none, 25 fps,
    Please use -b:a or -b:v, -b is ambiguous
    Codec AVOption b (set bitrate (in bits/s))
    vi) has not been used for any stream. The m
    e (e.g. a video option with no video stream
    some encoder which was not actually used fo
    Output #0, avi, to 'video.avi':
    Output file #0 does not contain any stream
  • How to set the destination folder of a Node.js fluent-ffmpeg screenshot to your AWS S3 bucket using getSignedUrl() ?

    10 juillet 2017, par Madhavi Mohoni

    I’m writing a program to generate .png thumbnails (with the same name, in the same folder) for a set of .mp4 videos in my Amazon S3 bucket. For this example, I’m going to create a /folder/file.png for a /folder/file.mp4 in the bucket. I’ve managed to set the source URL using the s3 object and getSignedUrl as follows :

    var srcurl = s3.getSignedUrl('getObject', {
           Bucket: 'bucket-name',
           Key: '/folder/file.mp4'
         });

    and

    new ffmpeg({ source: srcurl })
        .screenshots({
           count: 1,
           filename: '%f'.substr(0, '%f'.indexOf('.')) + '.png',
           /* To shorten the long string that's returned */
           folder: desturl,
           size: MAX_WIDTH + 'x' + MAX_HEIGHT
         });

    The destination URL has to be the same folder as the source. So I set it as follows :

    var desturl = s3.getSignedUrl('putObject', {
           Bucket: 'bucket-name',
           Key: '/folder/file' + '.png'
         });

    This combination doesn’t work - is there a way to do this correctly ?