Recherche avancée

Médias (91)

Autres articles (29)

  • Librairies et binaires spécifiques au traitement vidéo et sonore

    31 janvier 2010, par

    Les logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
    Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
    Binaires complémentaires et facultatifs flvtool2 : (...)

  • Support audio et vidéo HTML5

    10 avril 2011

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

  • De l’upload à la vidéo finale [version standalone]

    31 janvier 2010, par

    Le chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
    Upload et récupération d’informations de la vidéo source
    Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
    Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...)

Sur d’autres sites (4857)

  • FFmpeg get frame rate

    22 septembre 2021, par zhin dins

    I have several images and I am reproducing them in 78.7ms, I am creating like the 80s video effect. But, I am unable to find the correct ms, and this images with the original videos are unsync.

    


    I dumped the video to images using this command => ffmpeg -i *.mp4 the80effect/img-%d.jpg And now, I have 48622 frames. The video FPS is 24

    


    So, 48622/24 = 2025 +- I cannot use 2025ms since those images will load very slow. And the and the approximate value is 78.7ms per frame/image

    


    How can I find the correct value ? The video duration in seconds is 2026. I have tried all math to find this but I'm failing. How many images (one frame) per msCould you help me ? Thank you.

    


  • Can I use the file buffer or stream as input for fluent-ffmpeg ? I am trying to avoid saving the video locally to get its path before removing

    22 avril 2023, par Moath Thawahreh

    I am receiving the file via an api, I was trying to process the file.buffer as input for FFmpeg but it did not work, I had to save the video locally first and then process the path and remove the saved video later on.
I don't want to believe that there is no other way to solve this and I have been looking for solutions and workarounds but it was all about ffmpeg input as a path.

    


    I would love to find a solution using fluent-ffmpeg because it has some other great features, but I won't mind any suggestions for compressing the video using any different approaches if it's more efficient

    


    Again my code below works fine but I have to save the video and then remove it I am hoping for a more efficient solution :

    


      fs.writeFileSync(&#x27;temp.mp4&#x27;, file.buffer);&#xA;&#xA;    // Resize the temporary file using ffmpeg&#xA;    ffmpeg(&#x27;temp.mp4&#x27;) // here I tried pass file.buffer as readable stream,it receives paths only &#xA;      .format(&#x27;mp4&#x27;)&#xA;      .size(&#x27;50%&#x27;)&#xA;      .save(&#x27;resized.mp4&#x27;)&#xA;      .on(&#x27;end&#x27;, async () => {&#xA;        // Upload the resized file to Firebase&#xA;        const resizedFileStream = bucket.file(`video/${uniqueId}`).createWriteStream();&#xA;        fs.createReadStream(&#x27;resized.mp4&#x27;).pipe(resizedFileStream);&#xA;&#xA;        await new Promise<void>((resolve, reject) => {&#xA;          resizedFileStream&#xA;            .on(&#x27;finish&#x27;, () => {&#xA;              // Remove the local files after they have been uploaded&#xA;              fs.unlinkSync(&#x27;temp.mp4&#x27;);&#xA;              fs.unlinkSync(&#x27;resized.mp4&#x27;);&#xA;              resolve();&#xA;            })&#xA;            .on(&#x27;error&#x27;, reject);&#xA;        });&#xA;&#xA;        // Get the URL of the uploaded resized version&#xA;        const resizedFile = bucket.file(`video/${uniqueId}`);&#xA;        const url = await resizedFile.getSignedUrl({&#xA;          action: &#x27;read&#x27;,&#xA;          expires: &#x27;03-17-2025&#x27;, // Change this to a reasonable expiration date&#xA;        });&#xA;&#xA;        console.log(&#x27;Resized file uploaded successfully.&#x27;);&#xA;      })&#xA;      .on(&#x27;error&#x27;, (err) => {&#xA;        console.log(&#x27;An error occurred: &#x27; &#x2B; err.message);&#xA;      });&#xA;</void>

    &#xA;

  • Stream H264 raw data on RTSP server

    1er janvier, par Aitazaz

    I have H264 hex string data saved in a list.&#xA;The data is in correct format as it is being received, I am trying to stream it to RTSP server.

    &#xA;

    I have stream the data in realtime as it is from a dashcam.

    &#xA;

    The RTSP server is deployed but when I stream frames to it, the connection is created and then ends in an instant (does not last for a second)

    &#xA;

    The code is mentioned below which performs this streaming task.

    &#xA;

    def h264_stream_to_rtsp(data_list, rtsp_url):&#xA;    try:&#xA;        ffmpeg_command = [&#xA;            "ffmpeg", &#xA;            "-f", "h264",&#xA;            "-i", "-",&#xA;            "-vcodec", "libx264",&#xA;            "-preset", "fast",&#xA;            "-f", "rtsp",&#xA;            "-analyzeduration", "5000000",&#xA;            "-probesize", "5000000", &#xA;            rtsp_url  # The RTSP URL to stream to&#xA;        ]&#xA;        &#xA;        ffmpeg_process = subprocess.Popen(ffmpeg_command, stdin=subprocess.PIPE)&#xA;&#xA;        for index, hex_data in enumerate(data_list):&#xA;            # print(f"Processing hex data {index &#x2B; 1}/{len(data_list)}...")&#xA;&#xA;            if len(hex_data) % 2 != 0:&#xA;                hex_data = &#x27;0&#x27; &#x2B; hex_data  # Append a leading zero if length is odd&#xA;&#xA;            binary_data = binascii.unhexlify(hex_data)&#xA;&#xA;            ffmpeg_process.stdin.write(binary_data)&#xA;&#xA;        ffmpeg_process.stdin.close()&#xA;&#xA;        ffmpeg_process.wait()&#xA;        print("Stream completed.")&#xA;&#xA;    except KeyboardInterrupt:&#xA;        print("Stopping live stream.")&#xA;    except Exception as e:&#xA;        print(f"Error: {e}")&#xA;

    &#xA;

    Logs from the RTSP server are mentioned below :

    &#xA;

    2025/01/01 10:56:04 INF [RTSP] [conn 20.174.9.78:35474] opened&#xA;2025/01/01 10:56:04 INF [RTSP] [session 1d2bb871] created by 20.174.9.78:35474&#xA;2025/01/01 10:56:04 INF [RTSP] [session 1d2bb871] is publishing to path &#x27;live&#x27;, 1 track (H264)&#xA;2025/01/01 10:56:04 INF [RTSP] [session 1d2bb871] destroyed: torn down by 20.174.9.78:35474&#xA;2025/01/01 10:56:04 INF [RTSP] [conn 20.174.9.78:35474] closed: EOF&#xA;2025/01/01 10:56:48 INF [RTSP] [conn 20.174.9.78:54448] opened&#xA;2025/01/01 10:56:48 INF [RTSP] [session b6a95e71] created by 20.174.9.78:54448&#xA;2025/01/01 10:56:48 INF [RTSP] [session b6a95e71] is publishing to path &#x27;live&#x27;, 1 track (H264)&#xA;2025/01/01 10:56:48 INF [RTSP] [session b6a95e71] destroyed: torn down by 20.174.9.78:54448&#xA;

    &#xA;

    How can I stream continuously ?

    &#xA;