Recherche avancée

Médias (1)

Mot : - Tags -/musée

Autres articles (76)

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

  • Les tâches Cron régulières de la ferme

    1er décembre 2010, par

    La gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
    Le super Cron (gestion_mutu_super_cron)
    Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...)

  • Participer à sa documentation

    10 avril 2011

    La documentation est un des travaux les plus importants et les plus contraignants lors de la réalisation d’un outil technique.
    Tout apport extérieur à ce sujet est primordial : la critique de l’existant ; la participation à la rédaction d’articles orientés : utilisateur (administrateur de MediaSPIP ou simplement producteur de contenu) ; développeur ; la création de screencasts d’explication ; la traduction de la documentation dans une nouvelle langue ;
    Pour ce faire, vous pouvez vous inscrire sur (...)

Sur d’autres sites (10809)

  • How to encode a video from several images generated in a C++ program without writing the separate frame images to disk ?

    29 janvier 2016, par ksb496

    I am writing a C++ code where a sequence of N different frames is generated after performing some operations implemented therein. After each frame is completed, I write it on the disk as IMG_%d.png, and finally I encode them to a video through ffmpeg using the x264 codec.

    The summarized pseudocode of the main part of the program is the following one :

    std::vector<int> B(width*height*3);
    for (i=0; i/ void generateframe(std::vector<int> &amp;, int)
     generateframe(B, i); // Returns different images for different i values.
     sprintf(s, "IMG_%d.png", i+1);
     WriteToDisk(B, s); // void WriteToDisk(std::vector<int>, char[])
    }
    </int></int></int>

    The problem of this implementation is that the number of desired frames, N, is usually high (N 100000) as well as the resolution of the pictures (1920x1080), resulting into an overload of the disk, producing write cycles of dozens of GB after each execution.

    In order to avoid this, I have been trying to find documentation about parsing directly each image stored in the vector B to an encoder such as x264 (without having to write the intermediate image files to the disk). Albeit some interesting topics were found, none of them solved specifically what I exactly want to, as many of them concern the execution of the encoder with existing images files on the disk, whilst others provide solutions for other programming languages such as Python (here you can find a fully satisfactory solution for that platform).

    The pseudocode of what I would like to obtain is something similar to this :

    std::vector<int> B(width*height*3);
    video_file=open_video("Generated_Video.mp4", ...[encoder options]...);
    for (i=0; icode></int>

    According to what I have read on related topics, the x264 C++ API might be able to do this, but, as stated above, I did not find a satisfactory answer for my specific question. I tried learning and using directly the ffmpeg source code, but both its low ease of use and compilation issues forced me to discard this possibility as a mere non-professional programmer I am (I take it as just as a hobby and unluckily I cannot waste that many time learning something so demanding).

    Another possible solution that came to my mind is to find a way to call the ffmpeg binary file in the C++ code, and somehow manage to transfer the image data of each iteration (stored in B) to the encoder, letting the addition of each frame (that is, not "closing" the video file to write) until the last frame, so that more frames can be added until reaching the N-th one, where the video file will be "closed". In other words, call ffmpeg.exe through the C++ program to write the first frame to a video, but make the encoder "wait" for more frames. Then call again ffmpeg to add the second frame and make the encoder "wait" again for more frames, and so on until reaching the last frame, where the video will be finished. However, I do not know how to proceed or if it is actually possible.

    Edit 1 :

    As suggested in the replies, I have been documenting about named pipes and tried to use them in my code. First of all, it should be remarked that I am working with Cygwin, so my named pipes are created as they would be created under Linux. The modified pseudocode I used (including the corresponding system libraries) is the following one :

    FILE *fd;
    mkfifo("myfifo", 0666);

    for (i=0; i/ void WriteToPipe(std::vector<int>, FILE *&amp;fd)
     fflush(fd);
     fd=fclose("myfifo");
    }
    unlink("myfifo");
    </int>

    WriteToPipe is a slight modification of the previous WriteToFile function, where I made sure that the write buffer to send the image data is small enough to fit the pipe buffering limitations.

    Then I compile and write the following command in the Cygwin terminal :

    ./myprogram | ffmpeg -i pipe:myfifo -c:v libx264 -preset slow -crf 20 Video.mp4

    However, it remains stuck at the loop when i=0 at the "fopen" line (that is, the first fopen call). If I had not called ffmpeg it would be natural as the server (my program) would be waiting for a client program to connect to the "other side" of the pipe, but it is not the case. It looks like they cannot be connected through the pipe somehow, but I have not been able to find further documentation in order to overcome this issue. Any suggestion ?

  • How to modify this Windows script to do a match ?

    21 janvier 2016, par Andrei Clear

    ffmpeg can resize a video/image file .. first is input_file .. parameters .. output_file ..

    ffmpeg -i input.avi -vf scale=320:240 output.avi

    or

    ffmpeg -i 20140724_071746.mp4 -vf scale=640:-1 20140724_071746_LOW_640.mp4

    more info here : https://trac.ffmpeg.org/wiki/Scaling%20%28resizing%29%20with%20ffmpeg

    I want it to downscale all the videos on my microSD card to create space (I have originals backed-up)

    So I want it to go throw all the files in all the sub-directories overnight and resize all the files. Chances are that the script might stop or crash and I would need to run it again, or if I add new files I would want to run it again.

    So I would want it to skip processing all the files that have been processed AND their resized versions.

    In my case if a FILE_NAME.mp4 also has FILE_NAME_LOW_640.mp4 SKIP it
    AND
    if a FILE_NAME_LOW_640.mp4 has *640 SKIP it

    Here is my Windows batch script so far

    REM @echo off
    REM just save as "DOS"
    REM cd /d C:\s

    setlocal enabledelayedexpansion
    for %%j in (*.mp4) do (
    set filename=%%~nj
    echo %%j

    ffmpeg -i %%j -vf scale=640:-1 %%j_LOW_640.mp4

    REM but now I want to add the two checks to skip files that have been resized .. or if they are the resized version

    REM if not "!filename!"=="%%j_LOW_640.mp4" AND IF FILE !COINTAIN *640* THEN ffmpeg -i %%j -vf scale=640:-1 %%j_LOW_640.mp4

    )

    pause
    REM AND I would also want it to process all the sub-directories  

    In other words my questions for help are :

    1. How can I do a check for a string if it contains a string match ?

    2. How can I have my script also process all the subdirectories ?

  • FFmpeg - how to configure H264 encoder to output 1 packet after 1 frame (no B frames)

    30 octobre 2018, par maxest

    Is it possible to configure FFmpeg encoder such that when I call :

    avcodec_send_frame

    I can then call :

    avcodec_receive_packet

    and receive the packet ?

    Right now I have to call avcodec_send_frame a few dozens times before avcodec_receive_packet returns any valid packet. In other words I would like the latency to be reduced to 0.