Recherche avancée

Médias (1)

Mot : - Tags -/pirate bay

Autres articles (57)

  • Gestion des droits de création et d’édition des objets

    8 février 2011, par

    Par défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;

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

  • Dépôt de média et thèmes par FTP

    31 mai 2013, par

    L’outil MédiaSPIP traite aussi les média transférés par la voie FTP. Si vous préférez déposer par cette voie, récupérez les identifiants d’accès vers votre site MédiaSPIP et utilisez votre client FTP favori.
    Vous trouverez dès le départ les dossiers suivants dans votre espace FTP : config/ : dossier de configuration du site IMG/ : dossier des média déjà traités et en ligne sur le site local/ : répertoire cache du site web themes/ : les thèmes ou les feuilles de style personnalisées tmp/ : dossier de travail (...)

Sur d’autres sites (10027)

  • How to use ffmpeg to split a video and then merge it smoothly ? [duplicate]

    16 juin 2017, par leandro moreira

    This question is an exact duplicate of :

    The idea is to split a video into n segments and process them separated and when the process is done to merge the segments into a full video.

    I tried using the following approach :

    ```

    // spliting
    ffmpeg -i video.mp4 -c:v copy -c:a copy -ss 0 -t 10 video_0_10.mp4
    ffmpeg -i video.mp4 -c:v copy -c:a copy -ss 10 -t 20 video_10_20.mp4

    vim video_list.txt (with all files)

    // joining (merging them)
    ffmpeg -f concat -safe 0 -i video_list.txt -c:v copy -c:a copy new_video.mp4

    ```

    But when I tried to play the new_video.mp4 it didn’t play (using VLC) smooth, it froze seemly at the moment of the joining.

    What’s the best way to split a bigger video into several smaller, work on them and after joining the smaller into a new ?

  • hls playlist where the #EXTINF tag doesnt match actual segment duration ? [closed]

    8 janvier, par tamirg

    "The EXTINF tag specifies the duration of a Media Segment."

    


    But what should happen if the actual file duration does not match that tag ?

    


    I tried to edit the m3u8 file of my playlist and change the EXTINF tags so it will be smaller than the actual file duration, and also sometimes changed it so it will be bigger than the duration. In both cases the result stayed the same and simply the actual segment duration was played, regardless of the EXTINF tag.

    


    So what is the actual need of this tag ? seems that simply the file is being played.

    


  • Vulkan image data to AVFrames and to video

    12 avril 2024, par W4zab1

    I am trying to encode Vulkan image data into video with MPEG4 format. For some reason the output videofile is corrupted. FFProbe shows discontinuity in timestamps, and the frames are corrupted.
First I prepare my video encoder
    
Then I get FrameEnded events from my engine where I can get the image data from the vulkan swapchain.
    
I then convert the image data from vulkan to AVFrames (RGBA to YUV420P), then I pass the frames into queue.
    
This queue is then handled in another thread, where the frames are processed, and written into video.
    
I am bit of a noob with ffmpeg, so there can be some code that does not make sense.

    


    This seems right straight forward logic, but there is probably some problems with codec params, way I am converting the imagedata to AVFrame, or something of that sort.
    
The videofile still gets created, and has some data in it (it is > 0 bytes, and longer the recording, bigger the filesize).
    
There is no errors from ffmpeg with log_level set to DEBUG.

    


    struct FrameData {&#xA;    AVFrame* frame;&#xA;    int frame_index;&#xA;};&#xA;&#xA;class EventListenerVideoCapture : public VEEventListenerGLFW {&#xA;private:&#xA;    AVFormatContext* format_ctx = nullptr;&#xA;    AVCodec* video_codec = nullptr;&#xA;    AVCodecContext* codec_context = nullptr;&#xA;    AVStream* video_stream = nullptr;&#xA;    AVDictionary* muxer_opts = nullptr;&#xA;    int frame_index = 0;&#xA;&#xA;    std::queue frame_queue;&#xA;    std::mutex queue_mtx;&#xA;    std::condition_variable queue_cv;&#xA;    std::atomic<bool> stop_processing{ false };&#xA;    std::thread video_processing_thread;&#xA;    int prepare_video_encoder()&#xA;    {&#xA;        av_log_set_level(AV_LOG_DEBUG);&#xA;        // Add video stream to format context&#xA;        avformat_alloc_output_context2(&amp;format_ctx, nullptr, nullptr, "video.mpg");&#xA;        video_stream = avformat_new_stream(format_ctx, NULL);&#xA;        video_codec = (AVCodec*)avcodec_find_encoder(AV_CODEC_ID_MPEG4);&#xA;        codec_context = avcodec_alloc_context3(video_codec);&#xA;        if (!format_ctx) { std::cerr &lt;&lt; "Error: Failed to allocate format context" &lt;&lt; std::endl; system("pause"); }&#xA;        if (!video_stream) { std::cerr &lt;&lt; "Error: Failed to create new stream" &lt;&lt; std::endl; system("pause"); }&#xA;        if (!video_codec) { std::cerr &lt;&lt; "Error: Failed to find video codec" &lt;&lt; std::endl; system("pause"); }&#xA;        if (!codec_context) { std::cerr &lt;&lt; "Error: Failed to allocate codec context" &lt;&lt; std::endl; system("pause"); }&#xA;&#xA;        if (avio_open(&amp;format_ctx->pb, "video.mpg", AVIO_FLAG_WRITE) &lt; 0) { std::cerr &lt;&lt; "Error: Failed to open file for writing!" &lt;&lt; std::endl; return -1; }&#xA;&#xA;        av_opt_set(codec_context->priv_data, "preset", "fast", 0);&#xA;&#xA;        codec_context->codec_id = AV_CODEC_ID_MPEG4;&#xA;        codec_context->codec_type = AVMEDIA_TYPE_VIDEO;&#xA;        codec_context->pix_fmt = AV_PIX_FMT_YUV420P;&#xA;        codec_context->width = getWindowPointer()->getExtent().width;&#xA;        codec_context->height = getWindowPointer()->getExtent().height;&#xA;        codec_context->bit_rate = 1000 * 1000; // Bitrate&#xA;        codec_context->time_base = { 1, 30 }; // 30 FPS&#xA;        codec_context->gop_size = 10;&#xA;&#xA;        av_dict_set(&amp;muxer_opts, "movflags", "faststart", 0);&#xA;&#xA;        //Unecessary? Since the params are copied anyways&#xA;        video_stream->time_base = codec_context->time_base;&#xA;&#xA;        //Try to open codec after changes&#xA;        //copy codec_context params to videostream&#xA;        //and write headers to format_context&#xA;        if (avcodec_open2(codec_context, video_codec, NULL) &lt; 0) { std::cerr &lt;&lt; "Error: Could not open codec!" &lt;&lt; std::endl; return -1; }&#xA;        if (avcodec_parameters_from_context(video_stream->codecpar, codec_context) &lt; 0) { std::cerr &lt;&lt; "Error: Could not copy params from context to stream!" &lt;&lt; std::endl; return -1; };&#xA;        if (avformat_write_header(format_ctx, &amp;muxer_opts) &lt; 0) { std::cerr &lt;&lt; "Error: Failed to write output file headers!" &lt;&lt; std::endl; return -1; }&#xA;        return 0;&#xA;    }&#xA;&#xA;    void processFrames() {&#xA;        while (!stop_processing) {&#xA;            FrameData* frameData = nullptr;&#xA;            {&#xA;                std::unique_lock lock(queue_mtx);&#xA;                queue_cv.wait(lock, [&amp;]() { return !frame_queue.empty() || stop_processing; });&#xA;&#xA;                if (stop_processing &amp;&amp; frame_queue.empty())&#xA;                    break;&#xA;&#xA;                frameData = frame_queue.front();&#xA;                frame_queue.pop();&#xA;            }&#xA;&#xA;            if (frameData) {&#xA;                encodeAndWriteFrame(frameData);&#xA;                AVFrame* frame = frameData->frame;&#xA;                av_frame_free(&amp;frame); // Free the processed frame&#xA;                delete frameData;&#xA;            }&#xA;        }&#xA;    }&#xA;&#xA;    void encodeAndWriteFrame(FrameData* frameData) {&#xA;&#xA;        // Validation&#xA;        if (!frameData->frame) { std::cerr &lt;&lt; "Error: Frame was null! " &lt;&lt; std::endl; return; }&#xA;        if (frameData->frame->format != codec_context->pix_fmt) { std::cerr &lt;&lt; "Error: Frame format mismatch!" &lt;&lt; std::endl; return; }&#xA;        if ( av_frame_get_buffer(frameData->frame, 0) &lt; 0) { std::cerr &lt;&lt; "Error allocating frame buffer: " &lt;&lt; std::endl; return; }&#xA;        if (!codec_context) return;&#xA;&#xA;        AVPacket* pkt = av_packet_alloc();&#xA;        if (!pkt) { std::cerr &lt;&lt; "Error: Failed to allocate AVPacket" &lt;&lt; std::endl; system("pause"); }&#xA;&#xA;        int ret = avcodec_send_frame(codec_context, frameData->frame);&#xA;        if (ret &lt; 0) { &#xA;            std::cerr &lt;&lt; "Error receiving packet from codec: " &lt;&lt; ret &lt;&lt; std::endl;&#xA;            delete frameData;&#xA;            av_packet_free(&amp;pkt); return; &#xA;        }&#xA;&#xA;        while (ret >= 0) {&#xA;            ret = avcodec_receive_packet(codec_context, pkt);&#xA;&#xA;            //Error checks&#xA;            if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { break; }&#xA;            else if (ret &lt; 0) { std::cerr &lt;&lt; "Error receiving packet from codec: " &lt;&lt; ret &lt;&lt; std::endl; av_packet_free(&amp;pkt); return; }&#xA;            if (!video_stream) { std::cerr &lt;&lt; "Error: video stream is null!" &lt;&lt; std::endl; av_packet_free(&amp;pkt); return; }&#xA;            &#xA;            int64_t frame_duration = codec_context->time_base.den / codec_context->time_base.num;&#xA;            pkt->stream_index = video_stream->index;&#xA;            pkt->duration = frame_duration;&#xA;            pkt->pts = frameData->frame_index * frame_duration;&#xA;&#xA;            int write_ret = av_interleaved_write_frame(format_ctx, pkt);&#xA;            if (write_ret &lt; 0) { std::cerr &lt;&lt; "Error: failed to write a frame! " &lt;&lt; write_ret &lt;&lt; std::endl;}&#xA;&#xA;            av_packet_unref(pkt);&#xA;        }&#xA;&#xA;        av_packet_free(&amp;pkt);&#xA;&#xA;    }&#xA;&#xA;protected:&#xA;    virtual void onFrameEnded(veEvent event) override {&#xA;        // Get the image data from vulkan&#xA;        VkExtent2D extent = getWindowPointer()->getExtent();&#xA;        uint32_t imageSize = extent.width * extent.height * 4;&#xA;        VkImage image = getEnginePointer()->getRenderer()->getSwapChainImage();&#xA;&#xA;        uint8_t *dataImage = new uint8_t[imageSize];&#xA;        &#xA;        vh::vhBufCopySwapChainImageToHost(getEnginePointer()->getRenderer()->getDevice(),&#xA;            getEnginePointer()->getRenderer()->getVmaAllocator(),&#xA;            getEnginePointer()->getRenderer()->getGraphicsQueue(),&#xA;            getEnginePointer()->getRenderer()->getCommandPool(),&#xA;            image, VK_FORMAT_R8G8B8A8_UNORM,&#xA;            VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,&#xA;            dataImage, extent.width, extent.height, imageSize);&#xA;        &#xA;        // Create AVFrame for the converted image data&#xA;        AVFrame* frame = av_frame_alloc();&#xA;        if (!frame) { std::cout &lt;&lt; "Could not allocate memory for frame!" &lt;&lt; std::endl; return; }&#xA;&#xA;        frame->format = AV_PIX_FMT_YUV420P;&#xA;        frame->width = extent.width;&#xA;        frame->height = extent.height;&#xA;        if (av_frame_get_buffer(frame, 0) &lt; 0) { std::cerr &lt;&lt; "Failed to allocate frame buffer! " &lt;&lt; std::endl; return;} ;&#xA;&#xA;        // Prepare context for converting from RGBA to YUV420P&#xA;        SwsContext* sws_ctx = sws_getContext(&#xA;            extent.width, extent.height, AV_PIX_FMT_RGBA,&#xA;            extent.width, extent.height, AV_PIX_FMT_YUV420P,&#xA;            SWS_BILINEAR, nullptr, nullptr, nullptr);&#xA;&#xA;        // Convert the vulkan image data to AVFrame&#xA;        uint8_t* src_data[1] = { dataImage };&#xA;        int src_linesize[1] = { extent.width * 4 };&#xA;        int scale_ret = sws_scale(sws_ctx, src_data, src_linesize, 0, extent.height,&#xA;                  frame->data, frame->linesize);&#xA;&#xA;        if (scale_ret &lt;= 0) { std::cerr &lt;&lt; "Failed to scale the image to frame" &lt;&lt; std::endl; return; }&#xA;&#xA;        sws_freeContext(sws_ctx);&#xA;        delete[] dataImage;&#xA;&#xA;        // Add frame to the queue&#xA;        {&#xA;            std::lock_guard lock(queue_mtx);&#xA;&#xA;            FrameData* frameData = new FrameData;&#xA;            frameData->frame = frame;&#xA;            frameData->frame_index = frame_index;&#xA;            frame_queue.push(frameData);&#xA;&#xA;            frame_index&#x2B;&#x2B;;&#xA;        }&#xA;&#xA;        // Notify processing thread&#xA;        queue_cv.notify_one();&#xA;    }&#xA;&#xA;public:&#xA;    EventListenerVideoCapture(std::string name) : VEEventListenerGLFW(name) {&#xA;        //Prepare the video encoder&#xA;        int ret = prepare_video_encoder();&#xA;        if (ret &lt; 0)&#xA;        {&#xA;            std::cerr &lt;&lt; "Failed to prepare video encoder! " &lt;&lt; std::endl;&#xA;            exit(-1);&#xA;        }&#xA;        else&#xA;        {&#xA;            // Start video processing thread&#xA;            video_processing_thread = std::thread(&amp;EventListenerVideoCapture::processFrames, this);&#xA;        }&#xA;    }&#xA;&#xA;    ~EventListenerVideoCapture() {&#xA;        // Stop video processing thread&#xA;        stop_processing = true;&#xA;        queue_cv.notify_one(); // Notify processing thread to stop&#xA;&#xA;        if (video_processing_thread.joinable()) {&#xA;            video_processing_thread.join();&#xA;        }&#xA;&#xA;        // Flush codec and close output file&#xA;        avcodec_send_frame(codec_context, nullptr);&#xA;        av_write_trailer(format_ctx);&#xA;&#xA;        av_dict_free(&amp;muxer_opts);&#xA;        avio_closep(&amp;format_ctx->pb);&#xA;        avcodec_free_context(&amp;codec_context);&#xA;        avformat_free_context(format_ctx);&#xA;    }&#xA;};&#xA;&#xA;</bool>

    &#xA;

    I have tried changing the codec params, debugging and printing the videoframe data with no success.

    &#xA;