Recherche avancée

Médias (0)

Mot : - Tags -/alertes

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

Autres articles (57)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

  • Emballe médias : à quoi cela sert ?

    4 février 2011, par

    Ce plugin vise à gérer des sites de mise en ligne de documents de tous types.
    Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;

Sur d’autres sites (6474)

  • How to explain the given ffplay C code snippet ?

    20 juillet 2015, par Jerikc XIONG

    The following code snippet is from ffplay :

    static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub) {
       int got_frame = 0;

       do {
           int ret = -1;

           if (d->queue->abort_request)
               return -1;

           if (!d->packet_pending || d->queue->serial != d->pkt_serial) {
               AVPacket pkt;
               do {
                   if (d->queue->nb_packets == 0)
                       SDL_CondSignal(d->empty_queue_cond);
                   if (packet_queue_get(d->queue, &pkt, 1, &d->pkt_serial) < 0)
                       return -1;
                   if (pkt.data == flush_pkt.data) {
                       avcodec_flush_buffers(d->avctx);
                       d->finished = 0;
                       d->next_pts = d->start_pts;
                       d->next_pts_tb = d->start_pts_tb;
                   }
               } while (pkt.data == flush_pkt.data || d->queue->serial != d->pkt_serial);
               av_free_packet(&d->pkt);
               d->pkt_temp = d->pkt = pkt;
               d->packet_pending = 1;
           }

           switch (d->avctx->codec_type) {
               case AVMEDIA_TYPE_VIDEO:
                   ret = avcodec_decode_video2(d->avctx, frame, &got_frame, &d->pkt_temp);
                   if (got_frame) {
                       if (decoder_reorder_pts == -1) {
                           frame->pts = av_frame_get_best_effort_timestamp(frame);
                       } else if (decoder_reorder_pts) {
                           frame->pts = frame->pkt_pts;
                       } else {
                           frame->pts = frame->pkt_dts;
                       }
                   }
                   break;
               case AVMEDIA_TYPE_AUDIO:
                   ret = avcodec_decode_audio4(d->avctx, frame, &got_frame, &d->pkt_temp);
                   if (got_frame) {
                       AVRational tb = (AVRational){1, frame->sample_rate};
                       if (frame->pts != AV_NOPTS_VALUE)
                           frame->pts = av_rescale_q(frame->pts, d->avctx->time_base, tb);
                       else if (frame->pkt_pts != AV_NOPTS_VALUE)
                           frame->pts = av_rescale_q(frame->pkt_pts, av_codec_get_pkt_timebase(d->avctx), tb);
                       else if (d->next_pts != AV_NOPTS_VALUE)
                           frame->pts = av_rescale_q(d->next_pts, d->next_pts_tb, tb);
                       if (frame->pts != AV_NOPTS_VALUE) {
                           d->next_pts = frame->pts + frame->nb_samples;
                           d->next_pts_tb = tb;
                       }
                   }
                   break;
               case AVMEDIA_TYPE_SUBTITLE:
                   ret = avcodec_decode_subtitle2(d->avctx, sub, &got_frame, &d->pkt_temp);
                   break;
           }

           if (ret < 0) {
               d->packet_pending = 0;
           } else {
               d->pkt_temp.dts =
               d->pkt_temp.pts = AV_NOPTS_VALUE;
               if (d->pkt_temp.data) {
                   if (d->avctx->codec_type != AVMEDIA_TYPE_AUDIO)
                       ret = d->pkt_temp.size;
                   d->pkt_temp.data += ret;
                   d->pkt_temp.size -= ret;
                   if (d->pkt_temp.size <= 0)
                       d->packet_pending = 0;
               } else {
                   if (!got_frame) {
                       d->packet_pending = 0;
                       d->finished = d->pkt_serial; // FLAG
                   }
               }
           }
       } while (!got_frame && !d->finished);

       return got_frame;
    }

    It’s difficult for me to understand the following code :

    d->finished = d->pkt_serial; // FLAG

    Can anyone help me ?

    Thanks.

  • How do I set the framerate/FPS in an FFmpeg code (C) ?

    2 juin 2020, par Tobias v. Brevern

    I try to encode single pictures to a .avi video. The goal is to have every picture displayed for a set amount of seconds to create a slide show. I tried my script with 10 pictures and a delay of 1/5 of a second but the output file was not even half a second long (but displayed every picture). For setting the framerate I use the time_base option of the AVCodeContext :

    



    ctx->time_base = (AVRational) {1, 5};

    



    When I use the command ffmpeg -framerate 1/3 -i img%03d.png -codec png output.avi everything works fine and I get the file I want. I use the png codec because it was the only one i tried that is playable with Windows Media Player.

    



    Am I missing anything here ? Is there another option that has impact on the framerate ?

    



    This is my code so far :

    



    Note : I use a couple of self made data structures and methodes from other classes. They are the ones written in Caps Lock. They basicly do what the name suggests but are necessary for my project. The Input Array contains the pictures that i want to encode.

    



    include <libavutil></libavutil>opt.h>&#xA;include <libavutil></libavutil>imgutils.h>&#xA;include <libavutil></libavutil>error.h>&#xA;&#xA;void PixmapsToAVI (ARRAY* arr, String outfile, double secs)&#xA;{&#xA;     if (arr!=nil &amp;&amp; outfile!="" &amp;&amp; secs!=0) {&#xA;         AVCodec* codec = avcodec_find_encoder(AV_CODEC_ID_PNG);&#xA;         if (codec) {&#xA;             int width  = -1;&#xA;             int height = -1;&#xA;             int ret = 0;&#xA;&#xA;             AVCodecContext* ctx = NULL;&#xA;             ctx = avcodec_alloc_context3(codec);&#xA;             AVFrame* frame = av_frame_alloc();&#xA;             AVPacket* pkt  = av_packet_alloc();&#xA;&#xA;             FILE* file = fopen(outfile, "wb");&#xA;&#xA;             ARRAYELEMENT* e;&#xA;             int count = 0;&#xA;             forall (e, *arr) {&#xA;                 BITMAP bitmap (e->value, false);&#xA;                 if (width &lt; 0) {&#xA;                     width  = bitmap.Width();&#xA;                     height = bitmap.Height();&#xA;&#xA;                     ctx->width = width;&#xA;                     ctx->height = height;&#xA;                     ctx->time_base = (AVRational){1, 5};&#xA;                     ctx->framerate = (AVRational){5, 1};&#xA;                     ctx->pix_fmt = AV_PIX_FMT_RGB24;&#xA;                     ret = avcodec_open2(ctx, codec, NULL);&#xA;&#xA;                     frame->width  = width;&#xA;                     frame->height = height;&#xA;                     frame->format = ctx->pix_fmt;&#xA;                     av_opt_set(ctx->priv_data, "preset", "slow", 1);&#xA;&#xA;                 }&#xA;                 ret  = av_frame_get_buffer(frame, 1);&#xA;                 frame->linesize[0] = width*3;&#xA;&#xA;                 bitmap.Convert32();&#xA;                 byte* pixels = bitmap.PixelsRGB();      &#xA;&#xA;//The two methodes above convert the Pixmap into the RGB structure we need&#xA;//They are not needed to get an output file but are needed to get one that makes sense&#xA;&#xA;                     fflush(stdout);&#xA;                     int writeable = av_frame_make_writable(frame);&#xA;                     if (writeable>=0) {&#xA;                         for(int i=0; i&lt;(height*width*3); i&#x2B;&#x2B;){&#xA;                             frame->data[0][i] = pixels[i];&#xA;                         }&#xA;                     }&#xA;                     ret = avcodec_send_frame(ctx, frame);&#xA;                     for(int i=0; i= 0) {&#xA;                       ret = avcodec_receive_packet(ctx, pkt);&#xA;                     }&#xA;                     count&#x2B;&#x2B;;&#xA;                 avcodec_receive_packet(ctx, pkt);&#xA;                 fwrite(pkt->data, 1, pkt->size, file);&#xA;                 fflush(stdout);&#xA;                 av_packet_unref(pkt);&#xA;             }&#xA;             fclose(file);&#xA;             avcodec_free_context(&amp;ctx);&#xA;             av_frame_free(&amp;frame);&#xA;             av_packet_free(&amp;pkt);&#xA;&#xA;         }&#xA;     }&#xA;} &#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;

    &#xA;

  • How to let fluent-ffmpeg complete rendering before executing next line of code ?

    12 avril 2020, par wongz

    The .forEach() loop cuts ffmpeg short so it doesn't fully finish rendering any single video. How can I allow ffmpeg to finish rendering before the next loop occurs ?

    &#xA;&#xA;

    let videos = [vid1.mp4, vid2.mp4, vid3.mp4];&#xA;&#xA;videos.forEach((vid, i) => {&#xA;  ffmpeg(vid)&#xA;    .size(&#x27;1280x720&#x27;)&#xA;    .save(vid);&#xA;}&#xA;

    &#xA;